cards/server/src/game_handler.rs

52 lines
1.3 KiB
Rust
Raw Normal View History

2024-08-08 05:29:32 -04:00
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<AppState>,
}
impl GameHandler {
pub fn new(state: Arc<AppState>) -> 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();
}
}
}