create MemoryGameBoardStore Class and rework Building of Game Board Storage
This commit is contained in:
+9
-8
@@ -1,6 +1,6 @@
|
||||
from server.Files import read_file
|
||||
from server.game_board_stats import GameBoardStoreBuilder
|
||||
from server.GameBoard import GameBoard
|
||||
from server.GameStateStore import GameStateStore
|
||||
from snakes import SnakeBuilder
|
||||
from quart_common.web.logger import await_log
|
||||
from quart_common.web.logger import build_logger
|
||||
@@ -31,7 +31,7 @@ class Server:
|
||||
self.check_tls_security = check_tls_security
|
||||
|
||||
self.store_game_state = False
|
||||
self.game_state_store = GameStateStore(
|
||||
self.game_state_store = GameBoardStoreBuilder.build(
|
||||
backend=game_state_backend,
|
||||
redis_url=game_state_redis_url,
|
||||
ttl_seconds=game_state_ttl_sec,
|
||||
@@ -104,7 +104,7 @@ class Server:
|
||||
self._record_http_request('move')
|
||||
game_state = await request.get_json()
|
||||
move_started = time.perf_counter()
|
||||
game_board = await self._get_game_board(game_state)
|
||||
game_board = cast(GameBoard, await self._get_game_board(game_state))
|
||||
next_move = game_board.snake_neat_make_a_move()
|
||||
await self._persist_game_board(game_state['game']['id'], game_board)
|
||||
elapsed_ms = (time.perf_counter() - move_started) * 1000.0
|
||||
@@ -133,7 +133,7 @@ class Server:
|
||||
self._prune_stale_games()
|
||||
game_state = await request.get_json()
|
||||
if self.store_game_state:
|
||||
game_board = await self._get_game_board(game_state, end=True)
|
||||
game_board = cast(GameBoard, await self._get_game_board(game_state, end=True))
|
||||
if self.check_tls_security:
|
||||
await game_board.save(
|
||||
StorageLoader.build(self.storage_type),
|
||||
@@ -228,7 +228,7 @@ class Server:
|
||||
except ValueError:
|
||||
return 180
|
||||
|
||||
async def _create_game_board(self, game_state: dict):
|
||||
async def _create_game_board(self, game_state:dict) -> GameBoard:
|
||||
game_id = game_state['game']['id']
|
||||
new_game_board = GameBoard(
|
||||
game_id=game_id,
|
||||
@@ -257,21 +257,22 @@ class Server:
|
||||
self.running_games[game_id] = game_board
|
||||
await self.game_state_store.save(game_id, game_board)
|
||||
|
||||
async def _delete_game_board(self, game_state: dict):
|
||||
async def _delete_game_board(self, game_state:dict):
|
||||
game_id = game_state['game']['id']
|
||||
self.running_games.pop(game_id, None)
|
||||
self.game_move_counts.pop(game_id, None)
|
||||
self.game_last_seen_unix.pop(game_id, None)
|
||||
await self.game_state_store.delete(game_id)
|
||||
|
||||
async def _get_game_board(self, game_state:dict, end:bool=False):
|
||||
async def _get_game_board(self, game_state:dict, end:bool=False) -> GameBoard:
|
||||
game_id = game_state['game']['id']
|
||||
game_board:GameBoard
|
||||
try:
|
||||
game_board = self.running_games[game_id]
|
||||
except KeyError:
|
||||
persisted_board = await self.game_state_store.load(game_id)
|
||||
if persisted_board is not None:
|
||||
game_board = persisted_board
|
||||
game_board = cast(GameBoard, persisted_board)
|
||||
self.running_games[game_id] = game_board
|
||||
else:
|
||||
game_board = await self._create_game_board(game_state)
|
||||
|
||||
Reference in New Issue
Block a user