use crate::user_handler::*; use crate::AppState; use crate::Game; use crate::NewGameManifest; use crate::NewGameRequest; use std::net::SocketAddr; use std::sync::{Arc, RwLock}; /// Handle incoming messages over the WebSocket pub struct GameHandler { state: Arc, } impl GameHandler { pub fn new(state: Arc) -> Self { GameHandler { state } } pub async fn handle(&self, message: (SocketAddr, NewGameRequest)) { let manifest = NewGameManifest { name: message.1.name, host: self .state .online_users .read() .unwrap() .get(&message.0) .unwrap() .clone(), }; tracing::debug!("Game Packs {:?}", message.1.packs); // create game if let Ok(new_game_object) = Game::new(manifest) { self.state .games .write() .unwrap() .insert(new_game_object.name.clone(), RwLock::new(new_game_object)); self.state .broadcast_tx .send(meta_games_browser_update(&self.state)) .unwrap(); self.state .broadcast_tx .send(meta_server_summary_update(&self.state)) .unwrap(); } } }