当前位置: 首页>>代码示例>>Python>>正文


Python GameState.reset方法代码示例

本文整理汇总了Python中GameState.GameState.reset方法的典型用法代码示例。如果您正苦于以下问题:Python GameState.reset方法的具体用法?Python GameState.reset怎么用?Python GameState.reset使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在GameState.GameState的用法示例。


在下文中一共展示了GameState.reset方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: Server

# 需要导入模块: from GameState import GameState [as 别名]
# 或者: from GameState.GameState import reset [as 别名]

#.........这里部分代码省略.........
  def _init_listen_socket(self):
    """
    Inicjalizuje gniazdko nasłuchujące na połączenia.

    Do ustalenia hosta i portu stosujemy wartości z pliku konfiguracyjnego.
    """
    host, port = self._cfg['connection.host'], self._cfg['connection.port']

    self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    self._sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    self._sock.bind((host, port))
    self._sock.listen(2)

    Logger.log("Rejestrujemy SID serwera #%d do epoll..." % self._sock.fileno())
    self._poller.register(self._sock.fileno(), select.EPOLLIN | 
      select.EPOLLERR | select.EPOLLRDHUP | select.EPOLLHUP | select.EPOLLPRI)


  def _register_in_poll(self, sock):
    """
    Rejestruje gniazdko sieciowe klienta do kolejki EPOLL.

    Dodatkowo, tworzymy odpowiednie dowiązania do kolejek pakietów i hashmapy
    socketów, z kluczem ustawionym na deskryptor gniazda.
    """
    Logger.log("Rejestrujemy SID klienta #%d do epoll..." % sock.fileno())
    self._poller.register(sock.fileno(), select.EPOLLIN | select.EPOLLHUP |
        select.EPOLLERR | select.EPOLLRDHUP | select.EPOLLPRI | select.EPOLLOUT)
    self._client_sockets[sock.fileno()] = sock
    self._packet_queues[sock.fileno()] = deque()


  def _add_player(self): 
    """
    Dodaje połączenie gracza do serwera.

    Wchodzi w to sprawdzanie, czy może się połączyć (serwer nie jest pełen),
    oraz odpowiednie zapisanie i rejestrację danych po stronie serwera.
    """
    client_sock, _ = self._sock.accept()
    if len(self._client_sockets) == 2:
      client_sock.close()
      return
  
    client_sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
    self._register_in_poll(client_sock)
    pl = 0
    for key in self._player_bindings:
      if self._player_bindings[key] == 0:
        pl = 1
        break
    self._player_bindings[client_sock.fileno()] = pl
    self._proto.push_player(client_sock.fileno(), pl+1)

    if len(self._client_sockets) == 2:
      Logger.log('Mamy dwóch graczy, startujemy grę!')
      self._gamestate.start()
      self._proto.push_start()


  def loop(self):
    """
    Główna pętla serwera.

    Służy głównie do czytania zdarzeń z epolla i sprawdzaniu, czy gra nie
    została ukończona.
    """
    while True:
      if self._gamestate.completed():
        Logger.log('Gra skończona! Reset...')

        loser = self._gamestate.completed()
        self._proto.push_complete(loser) # Gra skończona. Wysyłamy do klientów.
        self._gamestate.reset()

      for fno, event in self._poller.poll(0):
        if self._sock.fileno() == fno:
          Logger.log("Połączenie z serwerem...")
          self._add_player()
        else:
          sock = self._client_sockets[fno]
          if event & select.EPOLLHUP or event & select.EPOLLRDHUP:
            Logger.log('Klient o SID #%d wyszedł z gry. Resetuję...' % fno)
            self._gamestate.reset()
            self._poller.unregister(fno)
            self._client_sockets[fno].close()
            del self._client_sockets[fno]
            del self._packet_queues[fno]
            del self._player_bindings[fno]
          elif event & select.EPOLLIN:
            Logger.log('Klient do nas napisał...')
            self._proto.handle(fno)
          elif event & select.EPOLLERR:
            Logger.log('Błąd epolla (EPOLLERR)')
          elif event & select.EPOLLPRI:
            Logger.log('Ważny event doszedł do serwera.')
          elif event & select.EPOLLOUT:
            if len(self._packet_queues[fno]) > 0:
              data = self._packet_queues[fno].popleft()
              self._client_sockets[fno].sendall(data)
开发者ID:Killavus,项目名称:CLI-BattleShips,代码行数:104,代码来源:Server.py


注:本文中的GameState.GameState.reset方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。