rust/hedgewars-server/src/server/handlers/common.rs
changeset 14785 a1077e8d26f4
parent 14784 8390d5e4e39c
child 14787 0e64acbc3f8b
equal deleted inserted replaced
14784:8390d5e4e39c 14785:a1077e8d26f4
     7         ProtocolFlags as Flags,
     7         ProtocolFlags as Flags,
     8     },
     8     },
     9     server::{
     9     server::{
    10         client::HWClient,
    10         client::HWClient,
    11         core::HWServer,
    11         core::HWServer,
    12         coretypes::{ClientId, GameCfg, RoomId, Vote, VoteType},
    12         coretypes::{ClientId, GameCfg, RoomId, TeamInfo, Vote, VoteType},
    13         room::HWRoom,
    13         room::HWRoom,
    14     },
    14     },
    15     utils::to_engine_msg,
    15     utils::to_engine_msg,
    16 };
    16 };
    17 
    17 
    18 use super::Response;
    18 use super::Response;
    19 
    19 
       
    20 use crate::server::coretypes::RoomConfig;
    20 use rand::{self, seq::SliceRandom, thread_rng, Rng};
    21 use rand::{self, seq::SliceRandom, thread_rng, Rng};
    21 use std::{iter::once, mem::replace};
    22 use std::{iter::once, mem::replace};
    22 
    23 
    23 pub fn rnd_reply(options: &[String]) -> HWServerMessage {
    24 pub fn rnd_reply(options: &[String]) -> HWServerMessage {
    24     let mut rng = thread_rng();
    25     let mut rng = thread_rng();
   245 ) {
   246 ) {
   246     let update_msg = RoomUpdated(room_name.unwrap_or(room.name.clone()), room.info(master));
   247     let update_msg = RoomUpdated(room_name.unwrap_or(room.name.clone()), room.info(master));
   247     response.add(update_msg.send_all().with_protocol(room.protocol_number));
   248     response.add(update_msg.send_all().with_protocol(room.protocol_number));
   248 }
   249 }
   249 
   250 
       
   251 pub fn get_room_config_impl(config: &RoomConfig, to_client: ClientId, response: &mut Response) {
       
   252     response.add(ConfigEntry("FULLMAPCONFIG".to_string(), config.to_map_config()).send(to_client));
       
   253     for cfg in config.to_game_config() {
       
   254         response.add(cfg.to_server_msg().send(to_client));
       
   255     }
       
   256 }
       
   257 
   250 pub fn get_room_config(room: &HWRoom, to_client: ClientId, response: &mut Response) {
   258 pub fn get_room_config(room: &HWRoom, to_client: ClientId, response: &mut Response) {
   251     response.add(ConfigEntry("FULLMAPCONFIG".to_string(), room.map_config()).send(to_client));
   259     get_room_config_impl(room.active_config(), to_client, response);
   252     for cfg in room.game_config() {
   260 }
   253         response.add(cfg.to_server_msg().send(to_client));
   261 
       
   262 pub fn get_teams<'a, I>(teams: I, to_client: ClientId, response: &mut Response)
       
   263 where
       
   264     I: Iterator<Item = &'a TeamInfo>,
       
   265 {
       
   266     for team in teams {
       
   267         response.add(TeamAdd(team.to_protocol()).send(to_client));
       
   268         response.add(TeamColor(team.name.clone(), team.color).send(to_client));
       
   269         response.add(HedgehogsNumber(team.name.clone(), team.hedgehogs_number).send(to_client));
   254     }
   270     }
   255 }
   271 }
   256 
   272 
   257 pub fn get_room_teams(
   273 pub fn get_room_teams(
   258     server: &HWServer,
   274     server: &HWServer,
   264     let current_teams = match room.game_info {
   280     let current_teams = match room.game_info {
   265         Some(ref info) => &info.teams_at_start,
   281         Some(ref info) => &info.teams_at_start,
   266         None => &room.teams,
   282         None => &room.teams,
   267     };
   283     };
   268 
   284 
   269     for (owner_id, team) in current_teams.iter() {
   285     get_teams(current_teams.iter().map(|(_, t)| t), to_client, response);
   270         response.add(TeamAdd(HWRoom::team_info(&server.clients[*owner_id], &team)).send(to_client));
       
   271         response.add(TeamColor(team.name.clone(), team.color).send(to_client));
       
   272         response.add(HedgehogsNumber(team.name.clone(), team.hedgehogs_number).send(to_client));
       
   273     }
       
   274 }
   286 }
   275 
   287 
   276 pub fn get_room_flags(
   288 pub fn get_room_flags(
   277     server: &HWServer,
   289     server: &HWServer,
   278     room_id: RoomId,
   290     room_id: RoomId,