selector now managed by gameserver rather than socketserver

This commit is contained in:
troido 2019-09-26 20:33:04 +02:00
parent 13ff6a3ea2
commit 72210a501b
2 changed files with 17 additions and 14 deletions

View File

@ -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()):

View File

@ -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: