rust/hedgewars-server/src/server/handlers/inroom.rs
changeset 14686 9f98086de1b6
parent 14683 932ff7683653
child 14687 5122c584804e
equal deleted inserted replaced
14685:669eb45bda72 14686:9f98086de1b6
   163             } else {
   163             } else {
   164                 let mut old_name = new_name.clone();
   164                 let mut old_name = new_name.clone();
   165                 let client = &server.clients[client_id];
   165                 let client = &server.clients[client_id];
   166                 let room = &mut server.rooms[room_id];
   166                 let room = &mut server.rooms[room_id];
   167                 swap(&mut room.name, &mut old_name);
   167                 swap(&mut room.name, &mut old_name);
   168                 let update_msg = RoomUpdated(old_name, room.info(Some(client)));
   168                 super::common::get_room_update(Some(old_name), room, Some(&client), response);
   169                 response.add(update_msg.send_all().with_protocol(room.protocol_number));
       
   170             };
   169             };
   171         }
   170         }
   172         ToggleReady => {
   171         ToggleReady => {
   173             if let (client, Some(room)) = server.client_and_room(client_id) {
   172             if let (client, Some(room)) = server.client_and_room(client_id) {
   174                 let flags = if client.is_ready() {
   173                 let flags = if client.is_ready() {
   233                         HedgehogsNumber(team.name.clone(), team.hedgehogs_number)
   232                         HedgehogsNumber(team.name.clone(), team.hedgehogs_number)
   234                             .send_all()
   233                             .send_all()
   235                             .in_room(room_id),
   234                             .in_room(room_id),
   236                     );
   235                     );
   237 
   236 
   238                     let update_msg = RoomUpdated(room.name.clone(), room.info(Some(client)));
   237                     super::common::get_room_update(None, room, Some(&client), response);
   239                     response.add(update_msg.send_all().with_protocol(room.protocol_number));
       
   240                 }
   238                 }
   241             }
   239             }
   242         }
   240         }
   243         RemoveTeam(name) => {
   241         RemoveTeam(name) => {
   244             if let (client, Some(room)) = server.client_and_room(client_id) {
   242             if let (client, Some(room)) = server.client_and_room(client_id) {
   456             };
   454             };
   457             match error {
   455             match error {
   458                 None => {
   456                 None => {
   459                     let msg = voting_description(&kind);
   457                     let msg = voting_description(&kind);
   460                     let voting = Voting::new(kind, server.room_clients(client_id));
   458                     let voting = Voting::new(kind, server.room_clients(client_id));
   461                     server.rooms[room_id].voting = Some(voting);
   459                     let room = &mut server.rooms[room_id];
       
   460                     room.voting = Some(voting);
   462                     response.add(server_chat(msg).send_all().in_room(room_id));
   461                     response.add(server_chat(msg).send_all().in_room(room_id));
   463                     //AddVote{ vote: true, is_forced: false}
   462                     super::common::add_vote(room, response, true, false);
   464                 }
   463                 }
   465                 Some(msg) => {
   464                 Some(msg) => {
   466                     response.add(server_chat(msg).send_self());
   465                     response.add(server_chat(msg).send_self());
   467                 }
   466                 }
   468             }
   467             }
   469         }
   468         }
   470         Vote(vote) => {
   469         Vote(vote) => {
   471             server.react(
   470             super::common::add_vote(&mut server.rooms[room_id], response, vote, false);
   472                 client_id,
       
   473                 vec![AddVote {
       
   474                     vote,
       
   475                     is_forced: false,
       
   476                 }],
       
   477             );
       
   478         }
   471         }
   479         ForceVote(vote) => {
   472         ForceVote(vote) => {
   480             let is_forced = server.clients[client_id].is_admin();
   473             let is_forced = server.clients[client_id].is_admin();
   481             server.react(client_id, vec![AddVote { vote, is_forced }]);
   474             super::common::add_vote(&mut server.rooms[room_id], response, vote, false);
   482         }
   475         }
   483         ToggleRestrictJoin | ToggleRestrictTeams | ToggleRegisteredOnly => {
   476         ToggleRestrictJoin | ToggleRestrictTeams | ToggleRegisteredOnly => {
   484             if server.clients[client_id].is_master() {
   477             let client = &server.clients[client_id];
   485                 server.rooms[room_id]
   478             let room = &mut server.rooms[room_id];
   486                     .flags
   479             if client.is_master() {
   487                     .toggle(room_message_flag(&message));
   480                 room.flags.toggle(room_message_flag(&message));
   488             }
   481                 super::common::get_room_update(None, room, Some(&client), response);
   489             server.react(client_id, vec![SendRoomUpdate(None)]);
   482             }
   490         }
   483         }
   491         StartGame => {
   484         StartGame => {
   492             server.react(client_id, vec![StartRoomGame(room_id)]);
   485             // StartRoomGame(room_id);
   493         }
   486         }
   494         EngineMessage(em) => {
   487         EngineMessage(em) => {
   495             let mut actions = Vec::new();
       
   496             if let (c, Some(r)) = server.client_and_room(client_id) {
   488             if let (c, Some(r)) = server.client_and_room(client_id) {
   497                 if c.teams_in_game > 0 {
   489                 if c.teams_in_game > 0 {
   498                     let decoding = decode(&em[..]).unwrap();
   490                     let decoding = decode(&em[..]).unwrap();
   499                     let messages = by_msg(&decoding);
   491                     let messages = by_msg(&decoding);
   500                     let valid = messages.filter(|m| is_msg_valid(m, &c.team_indices));
   492                     let valid = messages.filter(|m| is_msg_valid(m, &c.team_indices));
   527                             info.sync_msg = msg;
   519                             info.sync_msg = msg;
   528                         }
   520                         }
   529                     }
   521                     }
   530                 }
   522                 }
   531             }
   523             }
   532             server.react(client_id, actions)
       
   533         }
   524         }
   534         RoundFinished => {
   525         RoundFinished => {
   535             let mut actions = Vec::new();
       
   536             if let (c, Some(r)) = server.client_and_room(client_id) {
   526             if let (c, Some(r)) = server.client_and_room(client_id) {
   537                 if c.is_in_game() {
   527                 if c.is_in_game() {
   538                     c.set_is_in_game(false);
   528                     c.set_is_in_game(false);
   539                     response.add(
   529                     response.add(
   540                         ClientFlags("-g".to_string(), vec![c.nick.clone()])
   530                         ClientFlags("-g".to_string(), vec![c.nick.clone()])
   541                             .send_all()
   531                             .send_all()
   542                             .in_room(r.id),
   532                             .in_room(r.id),
   543                     );
   533                     );
   544                     if r.game_info.is_some() {
   534                     if r.game_info.is_some() {
   545                         for team in r.client_teams(c.id) {
   535                         for team in r.client_teams(c.id) {
   546                             actions.push(SendTeamRemovalMessage(team.name.clone()));
   536                             //SendTeamRemovalMessage(team.name.clone());
   547                         }
   537                         }
   548                     }
   538                     }
   549                 }
   539                 }
   550             }
   540             }
   551             server.react(client_id, actions)
       
   552         }
   541         }
   553         Rnd(v) => {
   542         Rnd(v) => {
   554             let result = rnd_reply(&v);
   543             let result = rnd_reply(&v);
   555             let mut echo = vec!["/rnd".to_string()];
   544             let mut echo = vec!["/rnd".to_string()];
   556             echo.extend(v.into_iter());
   545             echo.extend(v.into_iter());