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()); |