This commit is contained in:
Eden Kirin
2023-03-25 18:45:31 +01:00
parent 1b745c756f
commit ed4d61b37b
5 changed files with 152 additions and 9 deletions

View File

@ -47,7 +47,9 @@ class GameEngine:
def _start_inactivity_watchdog(self) -> None:
if not self._inacivity_watchdog:
self._inacivity_watchdog = InactivityWatchdog(
players=self.players, daemon=True
players=self.players,
ws_server=self.ws_server,
daemon=True,
)
self._inacivity_watchdog.start()

View File

@ -5,6 +5,7 @@ from threading import Thread
import websockets
from websockets import WebSocketServerProtocol
from websockets.exceptions import ConnectionClosedOK
from hopper.models.ws_dto import GameStateDto
from settings import settings
@ -15,12 +16,18 @@ class WSServer(Thread):
self.connected_clients = set[WebSocketServerProtocol]()
super().__init__(*args, **kwargs)
async def ws_handler(self, websocket: WebSocketServerProtocol) -> None:
async def handler(self, websocket: WebSocketServerProtocol) -> None:
self.connected_clients.add(websocket)
logging.info(f"Add client: {websocket.id}")
try:
await self.send_game_state_to_client(websocket)
connected = True
while connected:
try:
message = await websocket.recv()
except ConnectionClosedOK:
connected = False
finally:
self.connected_clients.remove(websocket)
logging.info(f"Remove client: {websocket.id}")
@ -63,7 +70,7 @@ class WSServer(Thread):
)
async with websockets.serve(
ws_handler=self.ws_handler,
ws_handler=self.handler,
host=settings.ws_server.HOST,
port=settings.ws_server.PORT,
):