diff options
Diffstat (limited to 'src/server/core.rs')
| -rw-r--r-- | src/server/core.rs | 77 |
1 files changed, 50 insertions, 27 deletions
diff --git a/src/server/core.rs b/src/server/core.rs index 7231577..2ce8b2b 100644 --- a/src/server/core.rs +++ b/src/server/core.rs | |||
| @@ -85,11 +85,11 @@ impl ServerCore { | |||
| 85 | } | 85 | } |
| 86 | } | 86 | } |
| 87 | "PLAY_START" => { | 87 | "PLAY_START" => { |
| 88 | if parts.len() != 3 { | 88 | if parts.len() != 3 && parts.len() != 4 { |
| 89 | "ERROR Invalid PLAY_START format. Usage: PLAY_START <game_type> <bet_amount>" | 89 | "ERROR Invalid PLAY_START format. Usage: PLAY_START <game_type> <bet_amount> [payload]" |
| 90 | .to_string() | 90 | .to_string() |
| 91 | } else { | 91 | } else { |
| 92 | self.handle_play_start(state, parts[1], parts[2]) | 92 | self.handle_play_start(state, parts[1], parts[2], parts.get(3).copied()) |
| 93 | } | 93 | } |
| 94 | } | 94 | } |
| 95 | "REGISTER" => { | 95 | "REGISTER" => { |
| @@ -187,6 +187,7 @@ impl ServerCore { | |||
| 187 | state: &ConnectionState, | 187 | state: &ConnectionState, |
| 188 | game_type: &str, | 188 | game_type: &str, |
| 189 | bet_amount_str: &str, | 189 | bet_amount_str: &str, |
| 190 | payload: Option<&str>, | ||
| 190 | ) -> String { | 191 | ) -> String { |
| 191 | let Some(user) = state.user.as_deref() else { | 192 | let Some(user) = state.user.as_deref() else { |
| 192 | return "ERROR Not logged in".to_string(); | 193 | return "ERROR Not logged in".to_string(); |
| @@ -216,7 +217,8 @@ impl ServerCore { | |||
| 216 | } | 217 | } |
| 217 | 218 | ||
| 218 | let game_state = game.prepare_state(user, bet_amount as u64); | 219 | let game_state = game.prepare_state(user, bet_amount as u64); |
| 219 | let new_state = match game.process_action(&game_state, "spin", &[]) { | 220 | let params: Vec<&str> = payload.into_iter().collect(); |
| 221 | let new_state = match game.process_action(&game_state, "spin", ¶ms) { | ||
| 220 | Ok(state) => state, | 222 | Ok(state) => state, |
| 221 | Err(error) => return game_error(error), | 223 | Err(error) => return game_error(error), |
| 222 | }; | 224 | }; |
| @@ -239,26 +241,6 @@ impl ServerCore { | |||
| 239 | } | 241 | } |
| 240 | }; | 242 | }; |
| 241 | 243 | ||
| 242 | let reels = result | ||
| 243 | .result_data | ||
| 244 | .get("reels") | ||
| 245 | .cloned() | ||
| 246 | .unwrap_or_default(); | ||
| 247 | let win_type = result | ||
| 248 | .result_data | ||
| 249 | .get("win_type") | ||
| 250 | .cloned() | ||
| 251 | .unwrap_or_default(); | ||
| 252 | let win_lines = result | ||
| 253 | .result_data | ||
| 254 | .get("win_lines") | ||
| 255 | .cloned() | ||
| 256 | .unwrap_or_else(|| "-".to_string()); | ||
| 257 | let win_cells = result | ||
| 258 | .result_data | ||
| 259 | .get("win_cells") | ||
| 260 | .cloned() | ||
| 261 | .unwrap_or_else(|| "-".to_string()); | ||
| 262 | let details = | 244 | let details = |
| 263 | serde_json::to_string(&result.result_data).unwrap_or_else(|_| "{}".to_string()); | 245 | serde_json::to_string(&result.result_data).unwrap_or_else(|_| "{}".to_string()); |
| 264 | 246 | ||
| @@ -273,9 +255,50 @@ impl ServerCore { | |||
| 273 | ) { | 255 | ) { |
| 274 | Ok(new_balance) => { | 256 | Ok(new_balance) => { |
| 275 | let _ = self.sessions.remove_session(&session_id); | 257 | let _ = self.sessions.remove_session(&session_id); |
| 276 | format!( | 258 | if game_type == "roulette" { |
| 277 | "GAME_RESULT {session_id} {winnings} {bet_amount} {new_balance} {reels} {win_type} {win_lines} {win_cells}" | 259 | let number = result |
| 278 | ) | 260 | .result_data |
| 261 | .get("number") | ||
| 262 | .cloned() | ||
| 263 | .unwrap_or_default(); | ||
| 264 | let color = result | ||
| 265 | .result_data | ||
| 266 | .get("color") | ||
| 267 | .cloned() | ||
| 268 | .unwrap_or_default(); | ||
| 269 | let bets = result | ||
| 270 | .result_data | ||
| 271 | .get("bets") | ||
| 272 | .cloned() | ||
| 273 | .unwrap_or_else(|| "{}".to_string()); | ||
| 274 | format!( | ||
| 275 | "ROULETTE_RESULT {session_id} {winnings} {bet_amount} {new_balance} {number} {color} {bets}" | ||
| 276 | ) | ||
| 277 | } else { | ||
| 278 | let reels = result | ||
| 279 | .result_data | ||
| 280 | .get("reels") | ||
| 281 | .cloned() | ||
| 282 | .unwrap_or_default(); | ||
| 283 | let win_type = result | ||
| 284 | .result_data | ||
| 285 | .get("win_type") | ||
| 286 | .cloned() | ||
| 287 | .unwrap_or_default(); | ||
| 288 | let win_lines = result | ||
| 289 | .result_data | ||
| 290 | .get("win_lines") | ||
| 291 | .cloned() | ||
| 292 | .unwrap_or_else(|| "-".to_string()); | ||
| 293 | let win_cells = result | ||
| 294 | .result_data | ||
| 295 | .get("win_cells") | ||
| 296 | .cloned() | ||
| 297 | .unwrap_or_else(|| "-".to_string()); | ||
| 298 | format!( | ||
| 299 | "GAME_RESULT {session_id} {winnings} {bet_amount} {new_balance} {reels} {win_type} {win_lines} {win_cells}" | ||
| 300 | ) | ||
| 301 | } | ||
| 279 | } | 302 | } |
| 280 | Err(error) => { | 303 | Err(error) => { |
| 281 | let _ = self.sessions.remove_session(&session_id); | 304 | let _ = self.sessions.remove_session(&session_id); |
