gameServer2/src/server/server.rs
changeset 12141 78925eff02c2
parent 12139 f3121d7dedec
child 12142 4d7d41be1993
--- a/gameServer2/src/server/server.rs	Wed Jan 18 22:23:41 2017 +0300
+++ b/gameServer2/src/server/server.rs	Wed Jan 18 22:54:02 2017 +0300
@@ -15,15 +15,19 @@
 pub struct HWServer {
     listener: TcpListener,
     clients: Slab<HWClient>,
-    rooms: Slab<HWRoom>
+    rooms: Slab<HWRoom>,
+    lobbyId: Token,
 }
 
 impl HWServer {
     pub fn new(listener: TcpListener, clients_limit: usize, rooms_limit: usize) -> HWServer {
+        let mut rooms = Slab::with_capacity(rooms_limit);
+        let token = rooms.insert(HWRoom::new()).ok().expect("Cannot create lobby");
         HWServer {
             listener: listener,
             clients: Slab::with_capacity(clients_limit),
-            rooms: Slab::with_capacity(rooms_limit),
+            rooms: rooms,
+            lobbyId: token,
         }
     }
 
@@ -36,7 +40,7 @@
         let (sock, addr) = self.listener.accept()?;
         info!("Connected: {}", addr);
 
-        let client = HWClient::new(sock);
+        let client = HWClient::new(sock, &self.lobbyId);
         let token = self.clients.insert(client)
             .ok().expect("could not add connection to slab");
 
@@ -76,16 +80,24 @@
         Ok(())
     }
 
+    fn send(&mut self, token: Token, msg: &String) {
+        self.clients[token].send_string(msg);
+    }
+
     fn react(&mut self, token: Token, poll: &Poll, actions: Vec<Action>) {
         for action in actions {
             match action {
-                SendMe(msg) => self.clients[token].send_string(&msg),
+                SendMe(msg) => self.send(token, &msg),
                 ByeClient(msg) => {
                     self.react(token, poll, vec![
                         SendMe(Bye(&msg).to_raw_protocol()),
                         RemoveClient,
                     ]);
                 },
+                SetNick(nick) => {
+                    self.send(token, &Nick(&nick).to_raw_protocol());
+                    self.clients[token].nick = nick;
+                }
                 RemoveClient => {
                     self.clients[token].deregister(poll);
                     self.clients.remove(token);
@@ -100,3 +112,11 @@
 struct HWRoom {
     name: String
 }
+
+impl HWRoom {
+    pub fn new() -> HWRoom {
+        HWRoom {
+            name: String::new(),
+        }
+    }
+}