gameServer2/src/server/handlers/inroom.rs
changeset 13801 5fb40c8e5542
parent 13795 e335daaa77a9
child 13805 0463a4221327
equal deleted inserted replaced
13800:0118b7412570 13801:5fb40c8e5542
     1 use mio;
     1 use mio;
     2 
     2 
     3 use crate::{
     3 use crate::{
     4     server::{
     4     server::{
     5         coretypes::{
     5         coretypes::{
     6             ClientId, RoomId, Voting, VoteType,
     6             ClientId, RoomId, Voting, VoteType, GameCfg,
     7             MAX_HEDGEHOGS_PER_TEAM
     7             MAX_HEDGEHOGS_PER_TEAM
     8         },
     8         },
     9         server::HWServer,
     9         server::HWServer,
    10         room::{HWRoom, RoomFlags},
    10         room::{HWRoom, RoomFlags},
    11         actions::{Action, Action::*}
    11         actions::{Action, Action::*}
   166                     "-r"
   166                     "-r"
   167                 } else {
   167                 } else {
   168                     r.ready_players_number += 1;
   168                     r.ready_players_number += 1;
   169                     "+r"
   169                     "+r"
   170                 };
   170                 };
   171                 c.set_is_ready(!c.is_ready());
   171 
   172                 let mut v =
   172                 let msg = if c.protocol_number < 38 {
   173                     vec![ClientFlags(flags.to_string(), vec![c.nick.clone()])
   173                     LegacyReady(c.is_ready(), vec![c.nick.clone()])
   174                         .send_all().in_room(r.id).action()];
   174                 } else {
       
   175                     ClientFlags(flags.to_string(), vec![c.nick.clone()])
       
   176                 };
       
   177 
       
   178                 let mut v = vec![msg.send_all().in_room(r.id).action()];
       
   179 
   175                 if r.is_fixed() && r.ready_players_number == r.players_number {
   180                 if r.is_fixed() && r.ready_players_number == r.players_number {
   176                     v.push(StartRoomGame(r.id))
   181                     v.push(StartRoomGame(r.id))
   177                 }
   182                 }
       
   183 
       
   184                 c.set_is_ready(!c.is_ready());
   178                 server.react(client_id, v);
   185                 server.react(client_id, v);
   179             }
   186             }
   180         }
   187         }
   181         AddTeam(info) => {
   188         AddTeam(info) => {
   182             let mut actions = Vec::new();
   189             let mut actions = Vec::new();
   190                 } else if r.game_info.is_some() {
   197                 } else if r.game_info.is_some() {
   191                     actions.push(Warn("Joining not possible: Round is in progress.".to_string()))
   198                     actions.push(Warn("Joining not possible: Round is in progress.".to_string()))
   192                 } else if r.is_team_add_restricted() {
   199                 } else if r.is_team_add_restricted() {
   193                     actions.push(Warn("This room currently does not allow adding new teams.".to_string()));
   200                     actions.push(Warn("This room currently does not allow adding new teams.".to_string()));
   194                 } else {
   201                 } else {
   195                     let team = r.add_team(c.id, *info);
   202                     let team = r.add_team(c.id, *info, c.protocol_number < 42);
   196                     c.teams_in_game += 1;
   203                     c.teams_in_game += 1;
   197                     c.clan = Some(team.color);
   204                     c.clan = Some(team.color);
   198                     actions.push(TeamAccepted(team.name.clone())
   205                     actions.push(TeamAccepted(team.name.clone())
   199                         .send_self().action());
   206                         .send_self().action());
   200                     actions.push(TeamAdd(HWRoom::team_info(&c, team))
   207                     actions.push(TeamAdd(HWRoom::team_info(&c, team))
   276                 let actions = if r.is_fixed() {
   283                 let actions = if r.is_fixed() {
   277                     vec![Warn("Access denied.".to_string())]
   284                     vec![Warn("Access denied.".to_string())]
   278                 } else if !c.is_master() {
   285                 } else if !c.is_master() {
   279                     vec![ProtocolError("You're not the room master!".to_string())]
   286                     vec![ProtocolError("You're not the room master!".to_string())]
   280                 } else {
   287                 } else {
       
   288                     let cfg = match cfg {
       
   289                         GameCfg::Scheme(name, mut values) => {
       
   290                             if c.protocol_number == 49 && values.len() >= 2 {
       
   291                                 let mut s = "X".repeat(50);
       
   292                                 s.push_str(&values.pop().unwrap());
       
   293                                 values.push(s);
       
   294                             }
       
   295                             GameCfg::Scheme(name, values)
       
   296                         }
       
   297                         cfg => cfg
       
   298                     };
       
   299 
   281                     let v = vec![cfg.to_server_msg()
   300                     let v = vec![cfg.to_server_msg()
   282                         .send_all().in_room(r.id).but_self().action()];
   301                         .send_all().in_room(r.id).but_self().action()];
   283                     r.set_config(cfg);
   302                     r.set_config(cfg);
   284                     v
   303                     v
   285                 };
   304                 };