summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornatrixaeria <janng@gmx.de>2019-05-19 15:39:48 +0200
committernatrixaeria <janng@gmx.de>2019-05-19 15:39:48 +0200
commitc45a9524b307c264e69aa017fcf370d71ea799da (patch)
tree9c3ececf32619a8158f70f093b925c7dafd93761
parentf3983341be939235c1a6cd522b3bb5cc318a6d1a (diff)
Push new clients to a Map
-rw-r--r--game_server/src/gameserver.rs20
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");
+ }
});
}