move Server code into more services and use them into blueprints or server
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
from quart_common.web.logger import await_log, logging
|
||||
|
||||
from server.database import GameplayDatabase
|
||||
from server.GameBoard import GameBoard
|
||||
|
||||
class GameplayTrackingService:
|
||||
def __init__(self, gameplay_database:GameplayDatabase, snake_type:str, snake_version:str, logger:logging):
|
||||
self.gameplay_database = gameplay_database
|
||||
self.snake_type = snake_type
|
||||
self.snake_version = snake_version
|
||||
self.logger = logger
|
||||
|
||||
async def record_gameplay_start(self, game_state:dict) -> None:
|
||||
if self.gameplay_database is None:
|
||||
return
|
||||
try:
|
||||
await self.gameplay_database.record_game_start(
|
||||
game_state,
|
||||
snake_type=self.snake_type,
|
||||
snake_version=self.snake_version,
|
||||
)
|
||||
except Exception as error:
|
||||
await await_log(self.logger.warning(f"Gameplay DB start record failed:{error}"))
|
||||
|
||||
async def record_gameplay_turn(self, game_state:dict, my_move:str, game_board:GameBoard) -> None:
|
||||
if self.gameplay_database is None:
|
||||
return
|
||||
try:
|
||||
thinking = self._extract_latest_snake_thinking(game_board)
|
||||
await self.gameplay_database.record_turn(game_state, my_move, thinking)
|
||||
except Exception as error:
|
||||
await await_log(self.logger.warning(f"Gameplay DB turn record failed:{error}"))
|
||||
|
||||
async def record_gameplay_end(self, game_state:dict) -> None:
|
||||
if self.gameplay_database is None:
|
||||
return
|
||||
try:
|
||||
await self.gameplay_database.record_game_end(game_state)
|
||||
except Exception as error:
|
||||
await await_log(self.logger.warning(f"Gameplay DB end record failed:{error}"))
|
||||
|
||||
def _extract_latest_snake_thinking(self, game_board:GameBoard) -> dict|None:
|
||||
try:
|
||||
history = game_board.snake_class.get_history()
|
||||
except Exception:
|
||||
return None
|
||||
if not isinstance(history, list) or len(history) == 0:
|
||||
return None
|
||||
latest = history[-1]
|
||||
return latest if isinstance(latest, dict) else None
|
||||
Reference in New Issue
Block a user