72 ]; |
72 ]; |
73 |
73 |
74 let server_msg = ServerMessage(server.get_greetings(client).to_string()); |
74 let server_msg = ServerMessage(server.get_greetings(client).to_string()); |
75 |
75 |
76 let rooms_msg = Rooms( |
76 let rooms_msg = Rooms( |
77 server |
77 server.iter_rooms() |
78 .rooms |
78 .filter(|r| r.protocol_number == client.protocol_number) |
79 .iter() |
79 .flat_map(|r| r.info(r.master_id.map(|id| server.client(id)))) |
80 .filter(|(_, r)| r.protocol_number == client.protocol_number) |
|
81 .flat_map(|(_, r)| r.info(r.master_id.map(|id| server.client(id)))) |
|
82 .collect(), |
80 .collect(), |
83 ); |
81 ); |
84 |
82 |
85 response.add(LobbyJoined(nick).send_all().but_self()); |
83 response.add(LobbyJoined(nick).send_all().but_self()); |
86 response.add( |
84 response.add( |
340 server: &HwServer, |
338 server: &HwServer, |
341 room_id: RoomId, |
339 room_id: RoomId, |
342 to_client: ClientId, |
340 to_client: ClientId, |
343 response: &mut Response, |
341 response: &mut Response, |
344 ) { |
342 ) { |
345 let room = &server.rooms[room_id]; |
343 let room = server.room(room_id); |
346 if let Some(id) = room.master_id { |
344 if let Some(id) = room.master_id { |
347 response.add( |
345 response.add( |
348 ClientFlags( |
346 ClientFlags( |
349 add_flags(&[Flags::RoomMaster]), |
347 add_flags(&[Flags::RoomMaster]), |
350 vec![server.client(id).nick.clone()], |
348 vec![server.client(id).nick.clone()], |
376 } |
374 } |
377 } |
375 } |
378 } |
376 } |
379 VoteType::Map(None) => (), |
377 VoteType::Map(None) => (), |
380 VoteType::Map(Some(name)) => { |
378 VoteType::Map(Some(name)) => { |
381 if let Some(location) = server.rooms[room_id].load_config(&name) { |
379 if let Some(location) = server.room_mut(room_id).load_config(&name) { |
382 response.add( |
380 response.add( |
383 server_chat(location.to_string()) |
381 server_chat(location.to_string()) |
384 .send_all() |
382 .send_all() |
385 .in_room(room_id), |
383 .in_room(room_id), |
386 ); |
384 ); |
387 let room = &server.rooms[room_id]; |
385 let room = &server.room(room_id); |
388 let room_master = if let Some(id) = room.master_id { |
386 let room_master = if let Some(id) = room.master_id { |
389 Some(server.client(id)) |
387 Some(server.client(id)) |
390 } else { |
388 } else { |
391 None |
389 None |
392 }; |
390 }; |
393 get_room_update(None, room, room_master, response); |
391 get_room_update(None, room, room_master, response); |
394 |
392 |
395 for client in server.iter_clients() { |
393 for client in server.iter_clients() { |
396 if client.room_id == Some(room_id) { |
394 if client.room_id == Some(room_id) { |
397 super::common::get_room_config(&server.rooms[room_id], client.id, response); |
395 super::common::get_room_config(server.room(room_id), client.id, response); |
398 } |
396 } |
399 } |
397 } |
400 } |
398 } |
401 } |
399 } |
402 VoteType::Pause => { |
400 VoteType::Pause => { |
403 if let Some(ref mut info) = server.rooms[room_id].game_info { |
401 if let Some(ref mut info) = server.room_mut(room_id).game_info { |
404 info.is_paused = !info.is_paused; |
402 info.is_paused = !info.is_paused; |
405 response.add( |
403 response.add( |
406 server_chat("Pause toggled.".to_string()) |
404 server_chat("Pause toggled.".to_string()) |
407 .send_all() |
405 .send_all() |
408 .in_room(room_id), |
406 .in_room(room_id), |
416 } |
414 } |
417 VoteType::NewSeed => { |
415 VoteType::NewSeed => { |
418 let seed = thread_rng().gen_range(0, 1_000_000_000).to_string(); |
416 let seed = thread_rng().gen_range(0, 1_000_000_000).to_string(); |
419 let cfg = GameCfg::Seed(seed); |
417 let cfg = GameCfg::Seed(seed); |
420 response.add(cfg.to_server_msg().send_all().in_room(room_id)); |
418 response.add(cfg.to_server_msg().send_all().in_room(room_id)); |
421 server.rooms[room_id].set_config(cfg); |
419 server.room_mut(room_id).set_config(cfg); |
422 } |
420 } |
423 VoteType::HedgehogsPerTeam(number) => { |
421 VoteType::HedgehogsPerTeam(number) => { |
424 let r = &mut server.rooms[room_id]; |
422 let r = server.room_mut(room_id); |
425 let nicks = r.set_hedgehogs_number(number); |
423 let nicks = r.set_hedgehogs_number(number); |
426 |
424 |
427 response.extend( |
425 response.extend( |
428 nicks |
426 nicks |
429 .into_iter() |
427 .into_iter() |