1
0

Save after every game change

Signed-off-by: James Ketrenos <james_eikona@ketrenos.com>
This commit is contained in:
James Ketrenos 2022-03-16 13:47:00 -07:00
parent 2137bdcf25
commit def582f350

View File

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