selector now managed by gameserver rather than socketserver
This commit is contained in:
parent
13ff6a3ea2
commit
72210a501b
|
@ -14,6 +14,7 @@ from . import player
|
|||
from asciifarm.common import messages
|
||||
|
||||
import re
|
||||
import selectors
|
||||
|
||||
|
||||
class GameServer:
|
||||
|
@ -28,10 +29,20 @@ class GameServer:
|
|||
self.messages = queue.Queue()
|
||||
|
||||
def start(self):
|
||||
|
||||
self.listener = threading.Thread(target=self.serv.listen, daemon=True)
|
||||
selector = selectors.DefaultSelector()
|
||||
self.serv.listen(selector)
|
||||
self.listener = threading.Thread(target=self.listen, daemon=True, args=(selector,))
|
||||
self.listener.start()
|
||||
|
||||
def listen(self, selector):
|
||||
|
||||
while True:
|
||||
events = selector.select()
|
||||
for key, mask in events:
|
||||
sock = key.fileobj
|
||||
callback = key.data
|
||||
callback(sock, selector)
|
||||
|
||||
def sendState(self, view):
|
||||
|
||||
for connection, name in list(self.connections.items()):
|
||||
|
|
|
@ -57,7 +57,7 @@ class Server:
|
|||
self.selector = None
|
||||
|
||||
|
||||
def listen(self, selector=None):
|
||||
def listen(self, selector):
|
||||
print("starting {} socket server on address {}".format(self.socketType, self.address))
|
||||
try:
|
||||
self.sock.bind(self.address)
|
||||
|
@ -72,29 +72,21 @@ class Server:
|
|||
|
||||
self.sock.setblocking(False)
|
||||
|
||||
if selector is None:
|
||||
selector = selectors.DefaultSelector()
|
||||
self.selector = selector
|
||||
|
||||
selector.register(self.sock, selectors.EVENT_READ, self._accept)
|
||||
|
||||
self.connections = {}
|
||||
print("listening")
|
||||
while True:
|
||||
events = selector.select()
|
||||
for key, mask in events:
|
||||
sock = key.fileobj
|
||||
callback = key.data
|
||||
callback(sock)
|
||||
|
||||
def _accept(self, sock):
|
||||
def _accept(self, sock, selector):
|
||||
connection, client_address = sock.accept()
|
||||
connection.setblocking(False)
|
||||
self.selector.register(connection, selectors.EVENT_READ, self._receive)
|
||||
selector.register(connection, selectors.EVENT_READ, self._receive)
|
||||
self.connections[connection] = _BytesBuffer()
|
||||
self.onConnection(connection)
|
||||
|
||||
def _receive(self, connection):
|
||||
def _receive(self, connection, selector):
|
||||
try:
|
||||
data = connection.recv(4096)
|
||||
except ConnectionResetError:
|
||||
|
|
Loading…
Reference in New Issue