equal
deleted
inserted
replaced
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 { |