Save after every game change
Signed-off-by: James Ketrenos <james_eikona@ketrenos.com>
This commit is contained in:
parent
2137bdcf25
commit
def582f350
@ -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) => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user