rust/hedgewars-server/src/core/server.rs
changeset 15551 7478568cffbe
parent 15541 d122b65bdf6f
child 15552 0031683bfa76
equal deleted inserted replaced
15550:0b16baefefd1 15551:7478568cffbe
   521 
   521 
   522 pub struct HwRoomControl<'a> {
   522 pub struct HwRoomControl<'a> {
   523     server: &'a mut HwServer,
   523     server: &'a mut HwServer,
   524     client_id: ClientId,
   524     client_id: ClientId,
   525     room_id: RoomId,
   525     room_id: RoomId,
       
   526     is_room_removed: bool
   526 }
   527 }
   527 
   528 
   528 impl<'a> HwRoomControl<'a> {
   529 impl<'a> HwRoomControl<'a> {
   529     #[inline]
   530     #[inline]
   530     pub fn new(server: &'a mut HwServer, client_id: ClientId) -> Option<Self> {
   531     pub fn new(server: &'a mut HwServer, client_id: ClientId) -> Option<Self> {
   531         if let Some(room_id) = server.clients[client_id].room_id {
   532         if let Some(room_id) = server.clients[client_id].room_id {
   532             Some(Self {
   533             Some(Self {
   533                 server,
   534                 server,
   534                 client_id,
   535                 client_id,
   535                 room_id,
   536                 room_id,
       
   537                 is_room_removed: false
   536             })
   538             })
   537         } else {
   539         } else {
   538             None
   540             None
       
   541         }
       
   542     }
       
   543 
       
   544     #[inline]
       
   545     pub fn cleanup_room(self) {
       
   546         if self.is_room_removed {
       
   547             self.server.rooms.remove(self.room_id);
   539         }
   548         }
   540     }
   549     }
   541 
   550 
   542     #[inline]
   551     #[inline]
   543     pub fn server(&self) -> &HwServer {
   552     pub fn server(&self) -> &HwServer {
   616         client.set_is_ready(false);
   625         client.set_is_ready(false);
   617         client.set_is_in_game(false);
   626         client.set_is_in_game(false);
   618 
   627 
   619         if !is_fixed {
   628         if !is_fixed {
   620             if room.players_number == 0 {
   629             if room.players_number == 0 {
   621                 self.server.rooms.remove(self.room_id);
   630                 self.is_room_removed = true
   622             } else if room.master_id == None {
   631             } else if room.master_id == None {
   623                 let protocol_number = room.protocol_number;
   632                 let protocol_number = room.protocol_number;
   624                 let new_master_id = self.server.room_client_ids(self.room_id).next();
   633                 let new_master_id = self.server.room_client_ids(self.room_id).next();
   625 
   634 
   626                 if let Some(new_master_id) = new_master_id {
   635                 if let Some(new_master_id) = new_master_id {