Add Ink session recovery and Coolify Docker support
This commit is contained in:
@@ -117,7 +117,16 @@ export class InkEngine {
|
||||
});
|
||||
}
|
||||
|
||||
resumeGame(savedState: string): void {
|
||||
this.restoreState(savedState);
|
||||
}
|
||||
|
||||
loadGame(savedState: string): TurnResult {
|
||||
this.restoreState(savedState);
|
||||
return this.continueStory();
|
||||
}
|
||||
|
||||
private restoreState(savedState: string): void {
|
||||
this.story = this.loadStory();
|
||||
let inkState = savedState;
|
||||
try {
|
||||
@@ -132,7 +141,6 @@ export class InkEngine {
|
||||
// Backward compatibility with raw Ink state JSON.
|
||||
}
|
||||
this.story.state.LoadJson(inkState);
|
||||
return this.continueStory();
|
||||
}
|
||||
|
||||
private loadStory(): Story {
|
||||
|
||||
@@ -140,6 +140,27 @@ async function handleGameApi(
|
||||
return { success: true, result: true, running: true, slot };
|
||||
}
|
||||
|
||||
case 'resumeGame':
|
||||
case 'resumeGame()': {
|
||||
const browserSave = typeof args[0] === 'string' ? args[0] : null;
|
||||
if (!browserSave) {
|
||||
return { success: false, error: 'missing_state', result: false };
|
||||
}
|
||||
const engine = new InkEngine(getStoryPath());
|
||||
engine.resumeGame(browserSave);
|
||||
sessions.set(socket.id, engine);
|
||||
return { success: true, result: true, running: engine.isRunning() };
|
||||
}
|
||||
|
||||
case 'exportGameState':
|
||||
case 'exportGameState()': {
|
||||
const engine = sessions.get(socket.id);
|
||||
if (!engine?.isRunning()) {
|
||||
return { success: false, error: 'game_not_running', result: false };
|
||||
}
|
||||
return { success: true, result: true, savedState: engine.saveGame() };
|
||||
}
|
||||
|
||||
case 'saveGame':
|
||||
case 'saveGame()': {
|
||||
const engine = sessions.get(socket.id);
|
||||
|
||||
Reference in New Issue
Block a user