SendAllButMe action, list all clients in lobby in LobbyJoined message to newcomers
--- a/gameServer2/src/server/actions.rs Thu Jan 26 14:45:44 2017 +0300
+++ b/gameServer2/src/server/actions.rs Fri Jan 27 23:03:31 2017 +0300
@@ -9,6 +9,7 @@
pub enum Action {
SendMe(String),
+ SendAllButMe(String),
RemoveClient,
ByeClient(String),
ReactProtocolMessage(HWProtocolMessage),
@@ -22,6 +23,13 @@
match action {
SendMe(msg) =>
server.send(token, &msg),
+ SendAllButMe(msg) => {
+ for c in server.clients.iter_mut() {
+ if c.id != token {
+ c.send_string(&msg)
+ }
+ }
+ },
ByeClient(msg) => {
server.react(token, poll, vec![
SendMe(Bye(&msg).to_raw_protocol()),
@@ -35,15 +43,27 @@
ReactProtocolMessage(msg) =>
handlers::handle(server, token, poll, msg),
CheckRegistered =>
- if server.clients[token].protocolNumber > 0 && server.clients[token].nick != "" {
+ if server.clients[token].protocol_number > 0 && server.clients[token].nick != "" {
+ server.react(token, poll, vec![
+ JoinLobby,
+ ]);
+ },
+ JoinLobby => {
+ let joined_msg;
+ {
+ let mut lobby_nicks: Vec<&str> = Vec::new();
+ for c in server.clients.iter() {
+ if c.room_id.is_some() {
+ lobby_nicks.push(&c.nick);
+ }
+ }
+ joined_msg = LobbyJoined(&lobby_nicks).to_raw_protocol();
+ }
+ let everyone_msg = LobbyJoined(&[&server.clients[token].nick]).to_raw_protocol();
+ server.clients[token].room_id = Some(server.lobby_id);
server.react(token, poll, vec![
- JoinLobby,
- ]);
- },
- JoinLobby => {
- let msg_string = LobbyJoined(&[&server.clients[token].nick]).to_raw_protocol();
- server.react(token, poll, vec![
- SendMe(msg_string),
+ SendAllButMe(everyone_msg),
+ SendMe(joined_msg),
]);
},
//_ => unimplemented!(),
--- a/gameServer2/src/server/client.rs Thu Jan 26 14:45:44 2017 +0300
+++ b/gameServer2/src/server/client.rs Fri Jan 27 23:03:31 2017 +0300
@@ -14,22 +14,24 @@
sock: TcpStream,
decoder: ProtocolDecoder,
buf_out: netbuf::Buf,
- room_id: Token,
+ pub id: Token,
+ pub room_id: Option<Token>,
pub nick: String,
- pub protocolNumber: u32,
+ pub protocol_number: u32,
}
impl HWClient {
- pub fn new(sock: TcpStream, roomId: &Token) -> HWClient {
+ pub fn new(sock: TcpStream) -> HWClient {
HWClient {
sock: sock,
decoder: ProtocolDecoder::new(),
buf_out: netbuf::Buf::new(),
- room_id: roomId.clone(),
+ room_id: None,
+ id: Token(0),
nick: String::new(),
- protocolNumber: 0,
+ protocol_number: 0,
}
}
--- a/gameServer2/src/server/handlers.rs Thu Jan 26 14:45:44 2017 +0300
+++ b/gameServer2/src/server/handlers.rs Fri Jan 27 23:03:31 2017 +0300
@@ -17,13 +17,13 @@
HWProtocolMessage::Quit(None) =>
server.react(token, poll, vec![ByeClient("User quit".to_string())]),
HWProtocolMessage::Nick(nick) =>
- if server.clients[token].nick.len() == 0 {
+ if server.clients[token].room_id == None {
server.react(token, poll, vec![SendMe(Nick(&nick).to_raw_protocol())]);
server.clients[token].nick = nick;
server.react(token, poll, vec![CheckRegistered]);
},
HWProtocolMessage::Proto(proto) => {
- server.clients[token].protocolNumber = proto;
+ server.clients[token].protocol_number = proto;
server.react(token, poll, vec![CheckRegistered]);
},
HWProtocolMessage::List => warn!("Deprecated LIST message received"),
--- a/gameServer2/src/server/server.rs Thu Jan 26 14:45:44 2017 +0300
+++ b/gameServer2/src/server/server.rs Fri Jan 27 23:03:31 2017 +0300
@@ -37,10 +37,11 @@
let (sock, addr) = self.listener.accept()?;
info!("Connected: {}", addr);
- let client = HWClient::new(sock, &self.lobby_id);
+ let client = HWClient::new(sock);
let token = self.clients.insert(client)
.ok().expect("could not add connection to slab");
+ self.clients[token].id = token;
self.clients[token].register(poll, token);
Ok(())