52 lines
1.3 KiB
Rust
52 lines
1.3 KiB
Rust
|
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();
|
||
|
}
|
||
|
}
|
||
|
}
|