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, |