diff --git a/experimental/2nub/src/client/App.tsx b/experimental/2nub/src/client/App.tsx index 970891b..f271e4b 100644 --- a/experimental/2nub/src/client/App.tsx +++ b/experimental/2nub/src/client/App.tsx @@ -183,16 +183,19 @@ const App: React.FC = () => { if (!currentGameId || !currentPlayerId) return; try { - await fetch(buildApiUrl(`api/games/${currentGameId}/players/${currentPlayerId}`), { + const response = await fetch(buildApiUrl(`api/games/${currentGameId}/players/${currentPlayerId}`), { method: 'DELETE' }); + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}. Response: ${response}`); + } setCurrentGame(null); setCurrentGameId(null); setCurrentPlayerId(null); setView('list'); sessionStorage.clearPlayerSession(); } catch (error) { - console.error('Failed to leave game:', error); + console.log('Failed to leave game:', error); } }; diff --git a/experimental/2nub/src/client/components/GameList.tsx b/experimental/2nub/src/client/components/GameList.tsx index e2f25fc..4f9e488 100644 --- a/experimental/2nub/src/client/components/GameList.tsx +++ b/experimental/2nub/src/client/components/GameList.tsx @@ -207,10 +207,8 @@ export const GameList: React.FC = ({ games, onJoinGame, onRejoinG ) : ( )} diff --git a/experimental/2nub/src/server/gameState.ts b/experimental/2nub/src/server/gameState.ts index f05f1c5..b97fe3c 100644 --- a/experimental/2nub/src/server/gameState.ts +++ b/experimental/2nub/src/server/gameState.ts @@ -134,6 +134,8 @@ class GameStateManager { const game = this.games.get(gameId); if (!game) return false; + if (game.state.state !== 'lobby') return false; + const playerIndex = game.state.players.findIndex(p => p.id === playerId); if (playerIndex === -1) return false; diff --git a/experimental/2nub/src/server/routes.ts b/experimental/2nub/src/server/routes.ts index e98a6b1..f1da0f0 100644 --- a/experimental/2nub/src/server/routes.ts +++ b/experimental/2nub/src/server/routes.ts @@ -148,7 +148,7 @@ export function setupRoutes(): Router { const removed = gameStateManager.maybeRemovePlayer(gameId, playerId); if (!removed) { - return respondFailure(res, 404, 'Player or game not found'); + return respondFailure(res, 404, 'Failed to remove player'); } const game = gameStateManager.maybeGetGame(gameId);