From 86d5f832c8452aad2313489b82eb8fd514215b95 Mon Sep 17 00:00:00 2001 From: salmonik Date: Wed, 28 Oct 2026 22:28:20 +0100 Subject: v0.2.3: add ClientCore and fix the game board rendering --- src/client/games/response.rs | 60 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/client/games/response.rs (limited to 'src/client/games/response.rs') diff --git a/src/client/games/response.rs b/src/client/games/response.rs new file mode 100644 index 0000000..6948805 --- /dev/null +++ b/src/client/games/response.rs @@ -0,0 +1,60 @@ +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct SpinResult { + pub session_id: String, + pub winnings: u64, + pub bet_amount: u64, + pub balance: i64, + pub reels: String, + pub win_type: String, +} + +/// Parse one server reply to `PLAY_START`. +/// +/// `Ok` carries the settled spin; `Err` carries a message that is safe to +/// show to the player (server errors are reported without the `ERROR ` prefix). +pub fn parse_spin_response(response: &str) -> Result { + let response = response.trim(); + if response.is_empty() { + return Err("No response from server".to_string()); + } + + if let Some(message) = response.strip_prefix("ERROR") { + let message = message.trim(); + return Err(if message.is_empty() { + "Server error".to_string() + } else { + message.to_string() + }); + } + + let parts: Vec<&str> = response.split_whitespace().collect(); + if parts.first() != Some(&"GAME_RESULT") { + return Err(format!("Unexpected server response: {response}")); + } + if parts.len() < 7 { + return Err("Malformed GAME_RESULT from server".to_string()); + } + + let winnings = parts[2] + .parse::() + .map_err(|_| format!("Invalid winnings from server: {}", parts[2]))?; + let bet_amount = parts[3] + .parse::() + .map_err(|_| format!("Invalid bet from server: {}", parts[3]))?; + let balance = parts[4] + .parse::() + .map_err(|_| format!("Invalid balance from server: {}", parts[4]))?; + + if parts[5].chars().count() != 3 { + return Err(format!("Invalid reels from server: {}", parts[5])); + } + + Ok(SpinResult { + session_id: parts[1].to_string(), + winnings, + bet_amount, + balance, + reels: parts[5].to_string(), + win_type: parts[6].to_string(), + }) +} -- cgit v1.2.3