rust/hedgewars-server/src/handlers/common.rs
changeset 15541 d122b65bdf6f
parent 15540 479911540e17
child 15543 02f648f7cbe1
equal deleted inserted replaced
15540:479911540e17 15541:d122b65bdf6f
   229     removed_teams: Vec<String>,
   229     removed_teams: Vec<String>,
   230     response: &mut Response,
   230     response: &mut Response,
   231 ) {
   231 ) {
   232     if was_in_game {
   232     if was_in_game {
   233         for team_name in &removed_teams {
   233         for team_name in &removed_teams {
   234             let msg = once(b'F').chain(team_name.bytes());
       
   235             response.add(
       
   236                 ForwardEngineMessage(vec![to_engine_msg(msg)])
       
   237                     .send_all()
       
   238                     .in_room(room_id)
       
   239                     .but_self(),
       
   240             );
       
   241 
       
   242             let remove_msg = to_engine_msg(once(b'F').chain(team_name.bytes()));
   234             let remove_msg = to_engine_msg(once(b'F').chain(team_name.bytes()));
   243 
   235 
   244             response.add(
   236             response.add(
   245                 ForwardEngineMessage(vec![remove_msg])
   237                 ForwardEngineMessage(vec![remove_msg])
   246                     .send_all()
   238                     .send_all()
   247                     .in_room(room_id)
   239                     .in_room(room_id)
   248                     .but_self(),
   240                     .but_self(),
   249             );
   241             );
   250         }
   242         }
   251     }
   243     } else {
   252 
   244         for team_name in removed_teams {
   253     for team_name in removed_teams {
   245             response.add(TeamRemove(team_name).send_all().in_room(room_id));
   254         response.add(TeamRemove(team_name).send_all().in_room(room_id));
   246         }
   255     }
   247     }
   256 }
   248 }
   257 
   249 
   258 pub fn get_room_leave_result(
   250 pub fn get_room_leave_result(
   259     server: &HwServer,
   251     server: &HwServer,
   371     }
   363     }
   372 }
   364 }
   373 
   365 
   374 pub fn get_room_teams(room: &HwRoom, to_client: ClientId, response: &mut Response) {
   366 pub fn get_room_teams(room: &HwRoom, to_client: ClientId, response: &mut Response) {
   375     let current_teams = match room.game_info {
   367     let current_teams = match room.game_info {
   376         Some(ref info) => &info.teams_at_start,
   368         Some(ref info) => &info.original_teams,
   377         None => &room.teams,
   369         None => &room.teams,
   378     };
   370     };
   379 
   371 
   380     get_teams(current_teams.iter().map(|(_, t)| t), to_client, response);
   372     get_teams(current_teams.iter().map(|(_, t)| t), to_client, response);
   381 }
   373 }
   593     let room_master = room.master_id.map(|id| server.client(id));
   585     let room_master = room.master_id.map(|id| server.client(id));
   594 
   586 
   595     get_room_update(None, room, room_master, response);
   587     get_room_update(None, room, room_master, response);
   596     response.add(RoundFinished.send_all().in_room(room_id));
   588     response.add(RoundFinished.send_all().in_room(room_id));
   597 
   589 
       
   590     response.extend(
       
   591         result
       
   592             .left_teams
       
   593             .iter()
       
   594             .map(|name| TeamRemove(name.clone()).send_all().in_room(room.id)),
       
   595     );
       
   596 
   598     for client_id in result.joined_mid_game_clients {
   597     for client_id in result.joined_mid_game_clients {
   599         super::common::get_room_config(room, client_id, response);
   598         super::common::get_room_config(room, client_id, response);
   600         response.extend(
   599     }
   601             result
   600 
   602                 .left_teams
   601     if !result.unreadied_nicks.is_empty() {
   603                 .iter()
   602         response.add(
   604                 .map(|name| TeamRemove(name.clone()).send(client_id)),
   603             ClientFlags(remove_flags(&[Flags::Ready]), result.unreadied_nicks)
       
   604                 .send_all()
       
   605                 .in_room(room_id),
   605         );
   606         );
   606     }
       
   607 
       
   608     if !result.unreadied_nicks.is_empty() {
       
   609         let msg = if room.protocol_number < 38 {
       
   610             LegacyReady(false, result.unreadied_nicks)
       
   611         } else {
       
   612             ClientFlags(remove_flags(&[Flags::Ready]), result.unreadied_nicks)
       
   613         };
       
   614         response.add(msg.send_all().in_room(room_id));
       
   615     }
   607     }
   616 }
   608 }
   617 
   609 
   618 #[cfg(test)]
   610 #[cfg(test)]
   619 mod tests {
   611 mod tests {