diff --git a/server/routes/games.js b/server/routes/games.js index 587b629..fd77ca6 100755 --- a/server/routes/games.js +++ b/server/routes/games.js @@ -1842,7 +1842,8 @@ const trade = (game, session, action, offer) => { const clearTimeNotice= (game, session) => { if (!session.player.turnNotice) { - return `You have not been idle.`; + /* benign state; don't alert the user */ + //return `You have not been idle.`; } session.player.turnNotice = ""; sendUpdateToPlayer(game, session, { @@ -1852,7 +1853,7 @@ const clearTimeNotice= (game, session) => { const startTurnTimer = (game, session) => { const timeout = 90; - if (!session.connection) { + if (!session.ws) { console.log(`${session.id}: Aborting turn timer as ${session.name} is disconnected.`); } else { console.log(`${session.id}: (Re)setting turn timer for ${session.name} to ${timeout} seconds.`); @@ -1942,6 +1943,7 @@ const pass = (game, session) => { chat: game.chat, activities: game.activities }); + saveGame(game); } const placeRobber = (game, session, robber) => { @@ -3052,7 +3054,7 @@ const saveGame = async (game) => { delete reducedGame.unselected; /* Save per turn while debugging... */ - await writeFile(`games/${game.id}.${game.turns}`, JSON.stringify(reducedGame, null, 2)) + await writeFile(`games/${game.id}.${game.step++}`, JSON.stringify(reducedGame, null, 2)) .catch((error) => { console.error(`${session.id} Unable to write to games/${game.id}`); console.error(error); @@ -3156,7 +3158,6 @@ const sendUpdateToPlayers = async (game, update) => { _session.ws.send(message); } } - await saveGame(game); } const sendUpdateToPlayer = async (game, session, update) => { @@ -3525,9 +3526,9 @@ router.ws("/ws/:id", async (ws, req) => { error = setPlayerName(game, session, data.name); if (error) { sendError(session, error); - break; + }else { + saveGame(game); } - saveGame(game); break; case 'set': @@ -3538,7 +3539,7 @@ router.ws("/ws/:id", async (ws, req) => { if (warning) { sendWarning(session, warning); } else { - await saveGame(game); + saveGame(game); } break; @@ -3547,7 +3548,7 @@ router.ws("/ws/:id", async (ws, req) => { if (warning) { sendWarning(session, warning); } else { - await saveGame(game); + saveGame(game); } break; default: @@ -3615,6 +3616,7 @@ router.ws("/ws/:id", async (ws, req) => { addChatMessage(game, session, `${session.name}: ${data.message}`); parseChatCommands(game, data.message); sendUpdateToPlayers(game, { chat: game.chat }); + saveGame(game); break; default: @@ -3623,6 +3625,7 @@ router.ws("/ws/:id", async (ws, req) => { } if (processed) { + /* saveGame(game); -- do not save here; only save on changes */ return; } @@ -3789,6 +3792,11 @@ router.ws("/ws/:id", async (ws, req) => { break; } + /* If action was taken, persist the game */ + if (processed) { + saveGame(game); + } + /* If the current player took an action, reset the session timer */ if (processed && session.color === game.turn.color && game.state !== 'winner') { resetTurnTimer(game, session); @@ -3945,6 +3953,7 @@ const resetGame = (game) => { startTime: Date.now(), state: 'lobby', turns: 0, + step: 0, /* used for the suffix # in game backups */ turn: {}, sheep: 19, ore: 19, @@ -4069,7 +4078,8 @@ const createGame = (id) => { }, sessions: {}, unselected: [], - active: 0 + active: 0, + step: 0 /* used for the suffix # in game backups */ }; [ "pips", "borders", "tiles" ].forEach((field) => {