From 5d6b5049c2a34a3f8abe725d4a871ba84a0dd714 Mon Sep 17 00:00:00 2001 From: salmonik Date: Mon, 24 Aug 2026 14:48:12 +0200 Subject: TLS transport and games framework on client and server --- src/bin/server/games/session.rs | 77 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 src/bin/server/games/session.rs (limited to 'src/bin/server/games/session.rs') diff --git a/src/bin/server/games/session.rs b/src/bin/server/games/session.rs new file mode 100644 index 0000000..595a745 --- /dev/null +++ b/src/bin/server/games/session.rs @@ -0,0 +1,77 @@ +#![allow(dead_code)] + +use crate::games::traits::{GameError, GameState}; +use std::collections::HashMap; +use std::sync::{Arc, Mutex}; +use uuid::Uuid; + +#[derive(Debug, Clone)] +pub struct GameSession { + pub session_id: String, + pub username: String, + pub game_type: String, + pub bet_amount: u64, + pub state: GameState, +} + +pub struct SessionManager { + sessions: Arc>>, +} + +impl SessionManager { + pub fn new() -> Self { + Self { + sessions: Arc::new(Mutex::new(HashMap::new())), + } + } + + pub fn create_session(&self, username: &str, game_type: String, state: GameState) -> String { + let session_id = Uuid::new_v4().to_string(); + let session = GameSession { + session_id: session_id.clone(), + username: username.to_string(), + game_type, + bet_amount: state.bet_amount, + state, + }; + + let mut sessions = self.sessions.lock().unwrap(); + sessions.insert(session_id.clone(), session); + session_id + } + + pub fn get_session(&self, session_id: &str) -> Result { + let sessions = self.sessions.lock().unwrap(); + sessions + .get(session_id) + .cloned() + .ok_or(GameError::SessionNotFound) + } + + pub fn update_session(&self, session_id: &str, new_state: GameState) -> Result<(), GameError> { + let mut sessions = self.sessions.lock().unwrap(); + if let Some(session) = sessions.get_mut(session_id) { + session.state = new_state; + Ok(()) + } else { + Err(GameError::SessionNotFound) + } + } + + pub fn remove_session(&self, session_id: &str) -> Result<(), GameError> { + let mut sessions = self.sessions.lock().unwrap(); + sessions + .remove(session_id) + .ok_or(GameError::SessionNotFound) + .map(|_| ()) + } + + pub fn get_user_sessions(&self, username: &str) -> Vec { + let sessions = self.sessions.lock().unwrap(); + sessions + .values() + .filter(|s| s.username == username) + .cloned() + .collect() + } +} -- cgit v1.2.3