From 3ac48e50fb687605431c2fbcd68e7bcc24b3a4cb Mon Sep 17 00:00:00 2001 From: Resistencia Dev Date: Mon, 22 Dec 2025 18:38:07 +0100 Subject: [PATCH] fix: Redirigir al lobby cuando la partida deja de existir tras recargar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Añadido listener de errores de socket para detectar fallos de reconexión - Actualizada la lógica de transiciones de vista para evitar bloqueos en pantallas vacías - Limpieza de sesión al fallar la reconexión --- client/src/app/page.tsx | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/client/src/app/page.tsx b/client/src/app/page.tsx index c994084..dd13b2d 100644 --- a/client/src/app/page.tsx +++ b/client/src/app/page.tsx @@ -65,10 +65,30 @@ export default function Home() { updateSession({ currentView: 'game', roomId: gameState.roomId }); } else if (view === 'game' && !gameState) { // Si estábamos en juego y volvemos a null, volver al lobby - setView('lobby'); - updateSession({ currentView: 'lobby', roomId: undefined }); + // Pero solo si no estamos esperando una reconexión inicial + if (hasReconnected) { + setView('lobby'); + updateSession({ currentView: 'lobby', roomId: undefined }); + } } - }, [gameState]); + }, [gameState, view, hasReconnected]); + + // Listener para errores de socket que deben expulsar al lobby + useEffect(() => { + if (!socket) return; + + const handleError = (msg: string) => { + if (msg === 'La partida ya no existe' || msg === 'No se pudo reconectar a la partida') { + setView('lobby'); + updateSession({ currentView: 'lobby', roomId: undefined }); + } + }; + + socket.on('error', handleError); + return () => { + socket.off('error', handleError); + }; + }, [socket, updateSession]); const handleLogin = (e: React.FormEvent) => { e.preventDefault();