From 5b177c77fc428d99fd3a15e9efe44615bcb58cd1 Mon Sep 17 00:00:00 2001 From: magdo Date: Thu, 6 Nov 2025 19:37:32 +0100 Subject: [PATCH] game workflow corrected --- Documentations/COMPLETE_GAME_WORKFLOW.md | 32 ++++++++++++++++++ Documentations/COMPLETE_GAME_WORKFLOW.pdf | Bin 229346 -> 237098 bytes .../Services/GameWebSocketService.ts | 32 +++++++++++++++++- 3 files changed, 63 insertions(+), 1 deletion(-) diff --git a/Documentations/COMPLETE_GAME_WORKFLOW.md b/Documentations/COMPLETE_GAME_WORKFLOW.md index 12beb10b..eac61973 100644 --- a/Documentations/COMPLETE_GAME_WORKFLOW.md +++ b/Documentations/COMPLETE_GAME_WORKFLOW.md @@ -970,6 +970,8 @@ socket.on('game:ended', { message: string; finalPositions: PlayerPosition[]; timestamp: string; + reason?: string; // Optional: 'gamemaster_left' if GM disconnected + gamemasterName?: string; // Optional: GM name if GM left }); // Server → All Players: Cleanup complete @@ -980,6 +982,36 @@ socket.on('game:cleanup-complete', { }); ``` +**Game End Scenarios**: + +1. **Normal Win** (Player reaches position 100): + ```typescript + { + winner: "player-uuid", + winnerName: "Alice", + message: "🎉 Alice won the game! Congratulations!", + finalPositions: [...], + timestamp: "2025-11-06T..." + } + ``` + +2. **Gamemaster Disconnect** (Game cancelled): + ```typescript + { + reason: "gamemaster_left", + gamemasterName: "Bob", + message: "🎭 Gamemaster Bob left. Game has ended.", + timestamp: "2025-11-06T..." + } + ``` + + **Behavior**: + - Game immediately cancelled when gamemaster disconnects + - All players notified via `game:ended` event + - Database updated: `state = CANCELLED`, `enddate = now` + - All Redis data and socket connections cleaned up + - No winner recorded (game didn't complete normally) + --- #### Error Events diff --git a/Documentations/COMPLETE_GAME_WORKFLOW.pdf b/Documentations/COMPLETE_GAME_WORKFLOW.pdf index 7a10fb5876d3e8edfb0ca126a2bf4522a1b6cdcc..08e14ee57c1c4320f4a5f50cf7bb7f6aaee72f1e 100644 GIT binary patch delta 47434 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 delta 39619 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

st8fL& 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