本文整理汇总了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)