From 1d2966a494f794b96b2cb67ed94982f288e27c4a Mon Sep 17 00:00:00 2001 From: deadvey Date: Thu, 7 May 2026 23:34:37 +0100 Subject: [PATCH] began implementing choice responses server side --- .~lock.report.odt# | 1 - report.odt | Bin 13964 -> 13997 bytes src/.api.rs.swp | Bin 0 -> 12288 bytes src/.parsing.rs.swp | Bin 12288 -> 20480 bytes src/api.rs | 24 +++++++++++++++++------- src/main.rs | 2 ++ src/parsing.rs | 31 +++++++++++++++++++++++++------ 7 files changed, 44 insertions(+), 14 deletions(-) delete mode 100644 .~lock.report.odt# create mode 100644 src/.api.rs.swp diff --git a/.~lock.report.odt# b/.~lock.report.odt# deleted file mode 100644 index 76dbfef..0000000 --- a/.~lock.report.odt# +++ /dev/null @@ -1 +0,0 @@ -,deadvey,linux-pc,03.05.2026 02:13,file:///home/deadvey/.config/libreoffice/4; \ No newline at end of file diff --git a/report.odt b/report.odt index dc19a1303a97d75dc1e43beef9da2c2b8fe315f3..eefef77e132f23724f7ecf0e45530c7b2e3344c3 100644 GIT binary patch delta 7723 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 XL)AUm(M*Pk-*|GonL1m&2}maZU|4y* delta 7705 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 diff --git a/src/.api.rs.swp b/src/.api.rs.swp new file mode 100644 index 0000000000000000000000000000000000000000..4314426cea6ec35b8af7828f06b4ccd6e32290c1 GIT binary patch literal 12288 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 diff --git a/src/api.rs b/src/api.rs index 5d2e1cf..a506f0f 100644 --- a/src/api.rs +++ b/src/api.rs @@ -20,6 +20,7 @@ pub struct DataToSend { pub action_type: String, pub content: String, pub character: String, + pub choices: Vec, } // Async function that runs the api server in the background. @@ -29,27 +30,28 @@ pub async fn api_process ( data_to_send: Arc>, characters: Arc>>, - tx: Sender, + tx: Sender<(bool, usize)>, ) { // This data must be passed through to the api route in order to be used let data_filter = warp::any().map(move || Arc::clone(&data_to_send)); let characters_filter = warp::any().map(move || Arc::clone(&characters)); let tx_filter = warp::any().map(move || tx.clone()); - + let tx_filter2 = tx_filter.clone(); + info!("Running server"); - + // The server route is loaded at address:port/happening let main = warp::path("happening") .and(warp::get()) .and(data_filter) .and(tx_filter) // Perform this code on a GET request - .map(|state: Arc>, tx_handle: Sender| + .map(|state: Arc>, tx_handle: Sender<(bool,usize)>| { info!("GET: {:?}", state); let reply = state.as_ref(); - let _ = tx_handle.send(1); + let _ = tx_handle.send((true,0)); warp::reply::json(&reply) // Send the reply data (data_to_send formatted as JSON) }).boxed(); let characters = warp::path("character") @@ -60,10 +62,18 @@ pub async fn api_process { let map = characters.lock().unwrap(); // TODO remove unwrap let reply = map.get(&name).unwrap(); - debug!("GET: name: {}, data: {:?}", name, reply); + debug!("GET: name: {}", name); warp::reply::json(&reply) }).boxed(); - + let choice = warp::path("choice") + .and(warp::post()) + .and(warp::body::json()) + .and(tx_filter2) + .map(|index: usize, tx_handle: Sender<(bool,usize)>| { + debug!("Choice: {}", index); + let _ = tx_handle.send((true,index)); + }).boxed(); + let routes = main.or(characters); // Start the server warp::serve(routes) diff --git a/src/main.rs b/src/main.rs index 4cd9999..f0a5125 100644 --- a/src/main.rs +++ b/src/main.rs @@ -31,6 +31,7 @@ async fn main() action_type: "begin".to_string(), content: "".to_string(), character: "".to_string(), + choices: vec![], })); // Setup the characters hashmap which will store each character in it as a Character struct let mut characters: Arc>> = Default::default(); @@ -73,6 +74,7 @@ async fn main() { warn!("No END statement, story may exit unexpectedly"); } + debug!("{:?}", tokens); let data_clone2 = Arc::clone(&data_to_send); let characters_clone2 = Arc::clone(&characters); diff --git a/src/parsing.rs b/src/parsing.rs index 21a84b1..aad0b35 100644 --- a/src/parsing.rs +++ b/src/parsing.rs @@ -22,7 +22,7 @@ pub async fn token_parse( tokens: &Vec<&str>, characters: Arc>>, data_to_send: Arc>, - rx: &Receiver, + rx: &Receiver<(bool,usize)>, ) -> Result<(),String> { let mut index: usize = 0; @@ -62,7 +62,7 @@ pub async fn token_parse( }, "choice" => { - index += match choice_parse(index+1, &tokens).await + index += match choice_parse(index+1, &tokens, &data_to_send).await { Ok(increment) => increment, Err(error) => return Err(error), @@ -82,17 +82,35 @@ async fn choice_parse ( index: usize, tokens: &Vec<&str>, -) -> Result + data_to_send: &Arc>, +) -> Result<(usize, Vec), String> { let mut sum_index: usize = index; let mut choices: Vec = Vec::new(); + let mut choice_indeces: Vec = Vec::new(); // Ensure the index is valid (the index is not beyond the vector) let (choice_string, counter) = strings::extract_quoted(&tokens[sum_index..]) .ok_or_else(|| "No choice string".to_string())?; sum_index += counter; - choices.append(choice_string); - sum_index += strings::closing_char(&tokens[sum_index..], '{','}').unwrap(); //TODO eh - Ok(sum_index + 1) + choices.push(choice_string); + choice_indeces.push(sum_index+1); + sum_index += strings::closing_char(&tokens[sum_index..], '{','}').unwrap() + 1; //TODO eh + while tokens[sum_index].to_lowercase() == "or" + { + let (choice_string, counter) = strings::extract_quoted(&tokens[sum_index+1..]) + .ok_or_else(|| "No choice string".to_string())?; + sum_index += counter; + choices.push(choice_string); + choice_indeces.push(sum_index+2); + sum_index += strings::closing_char(&tokens[sum_index..], '{','}').unwrap() + 1; //TODO eh + } + debug!("{:?}", choices); + let mut data = data_to_send.lock().unwrap(); + data.action_type = String::from("choice"); + data.content = "".to_string(); + data.character = "".to_string(); + data.choices = choices; //TODO + Ok((sum_index + 1, choice_indeces)) } // Parsing character related instructions @@ -127,6 +145,7 @@ async fn character_parse data.action_type = String::from("output"); data.content = output_string; data.character = character_name.clone(); + data.choices = vec![]; }, None => return Err(String::from("Unable to read string")), }