Fix stale restore after game restart
This commit is contained in:
Vendored
+13
-5
@@ -127,7 +127,13 @@ function getSlots(socketId) {
|
||||
}
|
||||
return slots;
|
||||
}
|
||||
async function handleGameApi(socket, method, args) {
|
||||
function withClientRequestId(turn, requestId) {
|
||||
const id = Number(requestId || 0);
|
||||
return Number.isInteger(id) && id > 0
|
||||
? { ...turn, clientRequestId: id }
|
||||
: turn;
|
||||
}
|
||||
async function handleGameApi(socket, method, args, requestId) {
|
||||
const slots = getSlots(socket.id);
|
||||
debugLog(`gameApi request from ${socket.id}: ${method}`, { args });
|
||||
switch (method) {
|
||||
@@ -135,7 +141,7 @@ async function handleGameApi(socket, method, args) {
|
||||
case 'newGame()': {
|
||||
const engine = getOrCreateEngine(socket.id);
|
||||
const turn = await engine.newGame();
|
||||
socket.emit('narrativeResponse', toClientTurn(turn));
|
||||
socket.emit('narrativeResponse', withClientRequestId(toClientTurn(turn), requestId));
|
||||
return {
|
||||
success: true,
|
||||
result: true,
|
||||
@@ -151,8 +157,8 @@ async function handleGameApi(socket, method, args) {
|
||||
}
|
||||
const engine = getOrCreateEngine(socket.id);
|
||||
const turn = await engine.loadGame(slots.get(slot));
|
||||
socket.emit('narrativeResponse', toClientTurn(turn));
|
||||
socket.emit('gameLoaded', { slot });
|
||||
socket.emit('narrativeResponse', withClientRequestId(toClientTurn(turn), requestId));
|
||||
socket.emit('gameLoaded', { slot, clientRequestId: requestId });
|
||||
return { success: true, result: true, running: true, slot };
|
||||
}
|
||||
case 'saveGame':
|
||||
@@ -229,7 +235,9 @@ io.on('connection', (socket) => {
|
||||
socket.emit('gameConfig', (0, game_config_1.clientGameConfig)(engineConfig));
|
||||
socket.on('gameApi', async (request, respond) => {
|
||||
try {
|
||||
const result = await handleGameApi(socket, String(request?.method ?? ''), Array.isArray(request?.args) ? request.args : []);
|
||||
const result = await handleGameApi(socket, String(request?.method ?? ''), Array.isArray(request?.args) ? request.args : [], Number.isInteger(Number(request?.requestId)) && Number(request?.requestId) > 0
|
||||
? Number(request?.requestId)
|
||||
: undefined);
|
||||
debugLog(`gameApi response to ${socket.id}`, result);
|
||||
if (typeof respond === 'function')
|
||||
respond(result);
|
||||
|
||||
Reference in New Issue
Block a user