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