From 416cc4511b7af33abfc43a007f0021429ae7a3cd Mon Sep 17 00:00:00 2001 From: retoor Date: Sat, 4 Oct 2025 21:15:02 +0200 Subject: [PATCH] Fixed issue in game loop. Unique key issue in database. --- server/database.py | 6 ++---- server/main.py | 24 ++++++++++++++---------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/server/database.py b/server/database.py index 359e535..dc60ddd 100644 --- a/server/database.py +++ b/server/database.py @@ -50,12 +50,10 @@ class Database: def save_game_state(self, game_state): """Save complete game state to database""" with self._get_connection() as conn: - # Save players - conn.execute('DELETE FROM players') - + # Save players using INSERT OR REPLACE to handle existing nicknames for player in game_state.players.values(): conn.execute(''' - INSERT INTO players (player_id, nickname, money, population, color, last_online) + INSERT OR REPLACE INTO players (player_id, nickname, money, population, color, last_online) VALUES (?, ?, ?, ?, ?, ?) ''', ( player.player_id, diff --git a/server/main.py b/server/main.py index 2bba113..4290462 100644 --- a/server/main.py +++ b/server/main.py @@ -20,16 +20,20 @@ database = Database() async def game_loop(): """Main game loop: economy ticks every 10 seconds, DB save every 10 seconds""" while True: - await asyncio.sleep(10) - - # Economy tick - economy_engine.tick() - - # Save to database - database.save_game_state(game_state) - - # Broadcast state to all players - await ws_manager.broadcast_game_state(game_state.get_state()) + try: + await asyncio.sleep(10) + + # Economy tick + economy_engine.tick() + + # Save to database + database.save_game_state(game_state) + + # Broadcast state to all players + await ws_manager.broadcast_game_state(game_state.get_state()) + except Exception as e: + print(f"Error in game loop: {e}") + # Continue running even if there's an error @asynccontextmanager async def lifespan(app: FastAPI):