本文整理汇总了Python中GameState.GameState.start方法的典型用法代码示例。如果您正苦于以下问题:Python GameState.start方法的具体用法?Python GameState.start怎么用?Python GameState.start使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类GameState.GameState
的用法示例。
在下文中一共展示了GameState.start方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: Server
# 需要导入模块: from GameState import GameState [as 别名]
# 或者: from GameState.GameState import start [as 别名]
class Server(object):
"""
Klasa serwera zajmuje się zarządzaniem połączeniami.
"""
def __init__(self):
"""
Konstruktor klasy.
Ładuje on konfigurację, ustawia socket nasłuchujący na połączenia oraz
definiuje struktury wymagane do działania serwera.
"""
Logger.log('Witam!')
self._cfg = JSONConfig(open('config.json', 'r'))
self._gamestate = GameState(self._cfg)
# Inicjalizujemy kolejkę epoll.
self._poller = select.epoll(3)
self._init_listen_socket()
# Odpowiednie hashmapy do odpytywania socketów i pakietów do wysłania.
self._client_sockets = {}
self._packet_queues = {}
self._player_bindings = {}
# Tworzymy obiekt protokołu:
self._proto = Protocol(self._gamestate, self._client_sockets,
self._packet_queues)
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...')
#.........这里部分代码省略.........