gameServer2/src/server/actions.rs
changeset 13424 d8354cb98b98
parent 13423 87a6cad20c90
child 13426 f091f69d59e4
equal deleted inserted replaced
13423:87a6cad20c90 13424:d8354cb98b98
    93     RemoveClientTeams,
    93     RemoveClientTeams,
    94     SendRoomUpdate(Option<String>),
    94     SendRoomUpdate(Option<String>),
    95     StartRoomGame(RoomId),
    95     StartRoomGame(RoomId),
    96     SendTeamRemovalMessage(String),
    96     SendTeamRemovalMessage(String),
    97     FinishRoomGame(RoomId),
    97     FinishRoomGame(RoomId),
       
    98     SendRoomData{teams: bool, config: bool, flags: bool},
    98     Warn(String),
    99     Warn(String),
    99     ProtocolError(String)
   100     ProtocolError(String)
   100 }
   101 }
   101 
   102 
   102 use self::Action::*;
   103 use self::Action::*;
   219                 let mut v = vec![
   220                 let mut v = vec![
   220                     RoomJoined(vec![c.nick.clone()]).send_all().in_room(room_id).action(),
   221                     RoomJoined(vec![c.nick.clone()]).send_all().in_room(room_id).action(),
   221                     flags_msg.send_all().action(),
   222                     flags_msg.send_all().action(),
   222                     SendRoomUpdate(None)];
   223                     SendRoomUpdate(None)];
   223                 if !c.is_master {
   224                 if !c.is_master {
   224                     v.push(ConfigEntry("FULLMAPCONFIG".to_string(), r.map_config())
   225                     v.push(SendRoomData{ teams: true, config: true, flags: true});
       
   226                 }
       
   227                 v
       
   228             };
       
   229             server.react(client_id, actions);
       
   230         }
       
   231         SendRoomData {teams, config, flags} => {
       
   232             let mut actions = Vec::new();
       
   233             let room_id = server.clients[client_id].room_id;
       
   234             if let Some(r) = room_id.and_then(|id| server.rooms.get(id)) {
       
   235                 if config {
       
   236                     actions.push(ConfigEntry("FULLMAPCONFIG".to_string(), r.map_config())
   225                         .send_self().action());
   237                         .send_self().action());
   226                     for cfg in r.game_config().into_iter() {
   238                     for cfg in r.game_config().into_iter() {
   227                         v.push(cfg.into_server_msg().send_self().action());
   239                         actions.push(cfg.into_server_msg().send_self().action());
   228                     }
   240                     }
   229                 }
   241                 }
   230                 v
   242                 if teams {
   231             };
   243                     for (owner_id, team) in r.teams.iter() {
   232             server.react(client_id, actions);
   244                         actions.push(TeamAdd(HWRoom::team_info(&server.clients[*owner_id], &team))
   233         },
   245                             .send_self().action());
       
   246                     }
       
   247                 }
       
   248                 if flags {
       
   249                     if let Some(id) = r.master_id {
       
   250                         actions.push(ClientFlags("+h".to_string(), vec![server.clients[id].nick.clone()])
       
   251                             .send_self().action());
       
   252                     }
       
   253                     let nicks: Vec<_> = server.clients.iter()
       
   254                         .filter(|(_, c)| c.room_id == Some(r.id) && c.is_ready)
       
   255                         .map(|(_, c)| c.nick.clone()).collect();
       
   256                     if !nicks.is_empty() {
       
   257                         actions.push(ClientFlags("+r".to_string(), nicks)
       
   258                             .send_self().action());
       
   259                     }
       
   260                 }
       
   261             }
       
   262             server.react(client_id, actions);
       
   263         }
   234         MoveToLobby(msg) => {
   264         MoveToLobby(msg) => {
   235             let mut actions = Vec::new();
   265             let mut actions = Vec::new();
   236             let lobby_id = server.lobby_id;
   266             let lobby_id = server.lobby_id;
   237             if let (c, Some(r)) = server.client_and_room(client_id) {
   267             if let (c, Some(r)) = server.client_and_room(client_id) {
   238                 r.players_number -= 1;
   268                 r.players_number -= 1;
   239                 if c.is_ready {
   269                 if c.is_ready && r.ready_players_number > 0 {
   240                     r.ready_players_number -= 1;
   270                     r.ready_players_number -= 1;
   241                 }
   271                 }
   242                 if r.players_number > 0 && c.is_master {
   272                 if r.players_number > 0 && c.is_master {
   243                     actions.push(ChangeMaster(r.id, None));
   273                     actions.push(ChangeMaster(r.id, None));
   244                 }
   274                 }