def __init__(self): self._players_queue = PlayersQueue() self._message_resender = MessageResender()
class HallManager(object): ''' Игровой зал. ''' def __init__(self): self._players_queue = PlayersQueue() self._message_resender = MessageResender() def _can_player_enter(self, player): ''' Может ли игрок войти в игровой зал? @param player: Player @return: bool ''' return not player.is_in_party and not player.is_in_game def _on_player_enter_request(self, message): ''' Выполняется при запросе пользователя на вход в зал. @param message: EnterPacket ''' player = message.player if self._can_player_enter(player): logger.debug('handling hall enter request for player %s'%player) packet = outcoming.WelcomePacket() message = messages.PlayerResponseMessage(player, packet) player_dispatcher.dispatch(message) else: logger.debug('hall enter request rejected for player %s'%player) def _add_to_queue(self, player): ''' Добавляет игрока в очередь. @param player: Player ''' if self._players_queue.has_player(player): logger.debug('player already in queue') return logger.debug('adding to players queue') self._players_queue.add_player(player) party = self._players_queue.find_party_for_last_player() if party is None: logger.debug('no party yet') else: logger.debug('party %s found, removing party from queue and sending invites'%party) self._players_queue.remove_party(party) party.invite() def _on_player_play_request(self, message): ''' Выполняется при запросе пользователя на игру. @param message: PlayPacket ''' player = message.player if self._can_player_enter(player): logger.debug('handling hall play request') self._add_to_queue(message.player) else: logger.debug('play request rejected for player %s'%player) def _subscribe(self): ''' Подписывается на всякие сообщения. ''' player_dispatcher.subscribe_for_packet(incoming.EnterPacket, self._on_player_enter_request) player_dispatcher.subscribe_for_packet(incoming.PlayPacket, self._on_player_play_request) def init(self): ''' Инициализация. ''' logger.info('initializing hall manager') self._subscribe()