# HG changeset patch # User alfadur # Date 1530719391 -10800 # Node ID 2501428303a212fc0706d5a7683e1bd06350131b # Parent c6a3784ff2c16c5aaebeda05d5e4c39cdfbd75f9 Fix team remove synchronization diff -r c6a3784ff2c1 -r 2501428303a2 gameServer2/src/server/actions.rs --- a/gameServer2/src/server/actions.rs Wed Jul 04 15:42:42 2018 +0300 +++ b/gameServer2/src/server/actions.rs Wed Jul 04 18:49:51 2018 +0300 @@ -446,10 +446,13 @@ actions.push(FinishRoomGame(r.id)); } let remove_msg = to_engine_msg(once(b'F').chain(team_name.bytes())); - match &info.last_msg { - Some(m) => info.msg_log.push(m.clone()), - None => info.msg_log.push(remove_msg.clone()) + if let Some(m) = &info.sync_msg { + info.msg_log.push(m.clone()); } + if info.sync_msg.is_some() { + info.sync_msg = None + } + info.msg_log.push(remove_msg.clone()); actions.push(ForwardEngineMessage(vec![remove_msg]) .send_all().in_room(r.id).but_self().action()); } diff -r c6a3784ff2c1 -r 2501428303a2 gameServer2/src/server/handlers/inroom.rs --- a/gameServer2/src/server/handlers/inroom.rs Wed Jul 04 15:42:42 2018 +0300 +++ b/gameServer2/src/server/handlers/inroom.rs Wed Jul 04 18:49:51 2018 +0300 @@ -65,6 +65,10 @@ msg.get(1).filter(|t| **t == b'+').is_some() } +fn is_msg_timed(msg: &[u8]) -> bool { + msg.get(1).filter(|t| !NON_TIMED_MESSAGES.contains(t)).is_some() +} + pub fn handle(server: &mut HWServer, client_id: ClientId, message: HWProtocolMessage) { use protocol::messages::HWProtocolMessage::*; match message { @@ -245,9 +249,10 @@ if c.teams_in_game > 0 { let decoding = decode(&em[..]).unwrap(); let messages = by_msg(&decoding); - let valid = messages.clone().filter(|m| is_msg_valid(m, &c.team_indices)); - let non_empty = messages.filter(|m| !is_msg_empty(m)); - let last_msg = None; + let valid = messages.filter(|m| is_msg_valid(m, &c.team_indices)); + let non_empty = valid.clone().filter(|m| !is_msg_empty(m)); + let sync_msg = valid.clone().filter(|m| is_msg_timed(m)) + .last().map(|m| if is_msg_empty(m) {Some(encode(m))} else {None}); let em_response = encode(&valid.flat_map(|msg| msg).cloned().collect::>()); if !em_response.is_empty() { @@ -259,8 +264,8 @@ if !em_log.is_empty() { info.msg_log.push(em_log); } - if last_msg.is_some() { - info.last_msg = last_msg; + if let Some(msg) = sync_msg { + info.sync_msg = msg; } } } diff -r c6a3784ff2c1 -r 2501428303a2 gameServer2/src/server/room.rs --- a/gameServer2/src/server/room.rs Wed Jul 04 15:42:42 2018 +0300 +++ b/gameServer2/src/server/room.rs Wed Jul 04 18:49:51 2018 +0300 @@ -84,7 +84,7 @@ pub teams_at_start: Vec<(ClientId, TeamInfo)>, pub left_teams: Vec, pub msg_log: Vec, - pub last_msg: Option, + pub sync_msg: Option, pub is_paused: bool, config: RoomConfig } @@ -94,7 +94,7 @@ GameInfo { left_teams: Vec::new(), msg_log: Vec::new(), - last_msg: None, + sync_msg: None, is_paused: false, teams_in_game: teams.len() as u8, teams_at_start: teams,