Threads creation optimization
This commit is contained in:
@ -2,6 +2,7 @@ from typing import Optional
|
||||
|
||||
from hopper.engine import GameEngine, GameEngineFactory
|
||||
from hopper.ws_server import WSServer
|
||||
from settings import settings
|
||||
|
||||
game_engine: Optional[GameEngine] = None
|
||||
|
||||
@ -12,7 +13,10 @@ def create_game_engine() -> GameEngine:
|
||||
if game_engine:
|
||||
raise RuntimeError("Can't call create_game_engine() more than once!")
|
||||
|
||||
ws_server = WSServer(daemon=True)
|
||||
ws_server = WSServer(
|
||||
host=settings.ws_server.HOST,
|
||||
port=settings.ws_server.PORT,
|
||||
)
|
||||
ws_server.start()
|
||||
|
||||
game_engine = GameEngineFactory.create_default(ws_server=ws_server)
|
||||
|
||||
@ -10,11 +10,11 @@ class CountdownTimer(Thread):
|
||||
self.seconds = seconds
|
||||
self.stop_event = Event()
|
||||
self.callback = callback
|
||||
super().__init__()
|
||||
super().__init__(daemon=True)
|
||||
|
||||
def run(self) -> None:
|
||||
cnt = self.seconds
|
||||
while cnt > 0 and not self.stop_event.is_set():
|
||||
while cnt and not self.stop_event.is_set():
|
||||
cnt -= 1
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
@ -60,7 +60,6 @@ class GameEngine:
|
||||
self._inacivity_watchdog = InactivityWatchdog(
|
||||
players=self.players,
|
||||
ws_server=self.ws_server,
|
||||
daemon=True,
|
||||
)
|
||||
self._inacivity_watchdog.start()
|
||||
|
||||
|
||||
@ -12,16 +12,12 @@ from settings import settings
|
||||
|
||||
class InactivityWatchdog(Thread):
|
||||
def __init__(
|
||||
self,
|
||||
players: PlayerList,
|
||||
ws_server: Optional[SendGameDumpInterface] = None,
|
||||
*args,
|
||||
**kwargs,
|
||||
self, players: PlayerList, ws_server: Optional[SendGameDumpInterface] = None
|
||||
) -> None:
|
||||
self.players = players
|
||||
self.ws_server = ws_server
|
||||
self.stopped = False
|
||||
super().__init__(*args, **kwargs)
|
||||
super().__init__(daemon=True)
|
||||
|
||||
def run(self) -> None:
|
||||
logging.info("Starting inactivity watchdog")
|
||||
|
||||
@ -17,10 +17,14 @@ from hopper.models.ws_dto import (
|
||||
WSProductPurchaseDone,
|
||||
WSProductPurchaseStart,
|
||||
)
|
||||
from settings import settings
|
||||
|
||||
|
||||
class WSServer(Thread):
|
||||
def __init__(self, host: str, port: int) -> None:
|
||||
self.host = host
|
||||
self.port = port
|
||||
super().__init__(daemon=True)
|
||||
|
||||
async def handler(self, websocket: WebSocketServerProtocol) -> None:
|
||||
"""New handler instance spawns for each connected client"""
|
||||
self.connected_clients.add(websocket)
|
||||
@ -95,13 +99,13 @@ class WSServer(Thread):
|
||||
|
||||
async def run_async(self) -> None:
|
||||
logging.info(
|
||||
f"Starting FairHopper Websockets Server on {settings.ws_server.HOST}:{settings.ws_server.PORT}"
|
||||
f"Starting FairHopper Websockets Server on {self.host}:{self.port}"
|
||||
)
|
||||
|
||||
async with websockets.serve(
|
||||
ws_handler=self.handler,
|
||||
host=settings.ws_server.HOST,
|
||||
port=settings.ws_server.PORT,
|
||||
host=self.host,
|
||||
port=self.port,
|
||||
):
|
||||
await asyncio.Future() # run forever
|
||||
|
||||
|
||||
Reference in New Issue
Block a user