diff options
author | natrixaeria <janng@gmx.de> | 2019-05-19 15:39:48 +0200 |
---|---|---|
committer | natrixaeria <janng@gmx.de> | 2019-05-19 15:39:48 +0200 |
commit | c45a9524b307c264e69aa017fcf370d71ea799da (patch) | |
tree | 9c3ececf32619a8158f70f093b925c7dafd93761 /game_server | |
parent | f3983341be939235c1a6cd522b3bb5cc318a6d1a (diff) |
Push new clients to a Map
Diffstat (limited to 'game_server')
-rw-r--r-- | game_server/src/gameserver.rs | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/game_server/src/gameserver.rs b/game_server/src/gameserver.rs index 9334a27..6f6dead 100644 --- a/game_server/src/gameserver.rs +++ b/game_server/src/gameserver.rs @@ -4,8 +4,10 @@ use websocket::{OwnedMessage, server::{NoTlsAcceptor, InvalidConnection, sync::AcceptResult}}; use std::net::{SocketAddr, ToSocketAddrs, TcpStream}; -use std::sync::mpsc; -use std::sync::mpsc::{Sender, Receiver}; +use std::sync::{mpsc, + mpsc::{Sender, Receiver}, + Arc, Mutex}; +use std::collections::HashMap; use super::lobby::Lobby; use super::backend_connection::BackendConnection; @@ -25,6 +27,7 @@ pub struct GameServer { addr: SocketAddr, lobby: Lobby, backend: BackendConnection, + clients: Arc<Mutex<HashMap<Token, GameClient>>>, } pub struct GameClient { @@ -47,7 +50,7 @@ impl GameClient { .recv_message() .ok()?; if let OwnedMessage::Text(text) = message { - text.parse::<Token>().ok() + text.parse().ok() } else { None } @@ -68,6 +71,7 @@ impl GameServer { addr, lobby, backend, + clients: Arc::new(Mutex::new(HashMap::new())), } } @@ -81,9 +85,15 @@ impl GameServer { } fn add_client(&self, mut client: GameClient) { + let clients = Arc::clone(&self.clients); std::thread::spawn(move || { - println!("Token: {:?}", client.require_token()); - loop { std::thread::sleep(std::time::Duration::from_millis(100)); } + let token = client.require_token(); + if let Some(token) = token { + println!("Token: {}", token); + clients.lock().unwrap().insert(token, client); + } else { + warn!("Client sent invalid token"); + } }); } |