rust/hedgewars-server/src/handlers/common.rs
changeset 15535 3f6a7a867040
parent 15534 bb93e9642b5b
child 15536 a798e6441a36
equal deleted inserted replaced
15534:bb93e9642b5b 15535:3f6a7a867040
   132         RoomJoined(vec![nick.clone()])
   132         RoomJoined(vec![nick.clone()])
   133             .send_all()
   133             .send_all()
   134             .in_room(room.id)
   134             .in_room(room.id)
   135             .but_self(),
   135             .but_self(),
   136     );
   136     );
   137     response.add(ClientFlags(add_flags(&[Flags::InRoom]), vec![nick]).send_all());
   137     response.add(ClientFlags(add_flags(&[Flags::InRoom]), vec![nick.clone()]).send_all());
   138     let nicks = room_clients.clone().map(|c| c.nick.clone()).collect();
   138     let nicks = room_clients.clone().map(|c| c.nick.clone()).collect();
   139     response.add(RoomJoined(nicks).send_self());
   139     response.add(RoomJoined(nicks).send_self());
   140 
       
   141     get_room_teams(room, client.id, response);
       
   142     get_room_config(room, client.id, response);
       
   143 
   140 
   144     let mut flag_selectors = [
   141     let mut flag_selectors = [
   145         (
   142         (
   146             Flags::RoomMaster,
   143             Flags::RoomMaster,
   147             partition_nicks(room_clients.clone(), |c| c.is_master()),
   144             partition_nicks(room_clients.clone(), |c| c.is_master()),
   166                 ClientFlags(remove_flags(&[*flag]), replace(cleared_nicks, vec![])).send_self(),
   163                 ClientFlags(remove_flags(&[*flag]), replace(cleared_nicks, vec![])).send_self(),
   167             );
   164             );
   168         }
   165         }
   169     }
   166     }
   170 
   167 
       
   168     get_room_teams(room, client.id, response);
       
   169     get_room_config(room, client.id, response);
       
   170 
   171     if !room.greeting.is_empty() {
   171     if !room.greeting.is_empty() {
   172         response.add(
   172         response.add(
   173             ChatMsg {
   173             ChatMsg {
   174                 nick: "[greeting]".to_string(),
   174                 nick: "[greeting]".to_string(),
   175                 msg: room.greeting.clone(),
   175                 msg: room.greeting.clone(),
   176             }
   176             }
   177             .send_self(),
   177             .send_self(),
   178         );
   178         );
       
   179     }
       
   180 
       
   181     if let Some(info) = &room.game_info {
       
   182         response.add(
       
   183             ClientFlags(add_flags(&[Flags::Ready, Flags::InGame]), vec![nick])
       
   184                 .send_all()
       
   185                 .in_room(room.id),
       
   186         );
       
   187         response.add(RunGame.send_self());
       
   188 
       
   189         response.add(
       
   190             ForwardEngineMessage(
       
   191                 once(to_engine_msg("e$spectate 1".bytes()))
       
   192                     .chain(info.msg_log.iter().cloned())
       
   193                     .collect(),
       
   194             )
       
   195             .send_self(),
       
   196         );
       
   197 
       
   198         for team in info.client_teams(client.id) {
       
   199             response.add(
       
   200                 ForwardEngineMessage(vec![to_engine_msg(once(b'G').chain(team.name.bytes()))])
       
   201                     .send_all()
       
   202                     .in_room(room.id),
       
   203             );
       
   204         }
       
   205 
       
   206         if info.is_paused {
       
   207             response.add(ForwardEngineMessage(vec![to_engine_msg(once(b'I'))]).send_self());
       
   208         }
   179     }
   209     }
   180 }
   210 }
   181 
   211 
   182 pub fn get_room_join_error(error: JoinRoomError, response: &mut Response) {
   212 pub fn get_room_join_error(error: JoinRoomError, response: &mut Response) {
   183     use super::strings::*;
   213     use super::strings::*;