- Añadido sistema de sesiones con localStorage - Nuevo hook useSessionStorage para manejar sesiones - Botón de salir de la partida (ExitGameButton) en todas las pantallas del juego - Botón de logout (LogoutButton) solo en el lobby - Evento leave_game en servidor para cerrar partida cuando alguien sale - Evento reconnect_session para reconectar jugadores después de recargar - Actualizado GameBoard para incluir botón de salida - Actualizado page.tsx para manejar sesiones y logout
3.6 KiB
3.6 KiB
Resumen de Implementación: Sesiones y Botones de Salida
Cambios Realizados
1. Sistema de Sesiones Persistentes ✅
Cliente
-
Nuevo hook:
client/src/hooks/useSessionStorage.ts- Maneja el almacenamiento y recuperación de sesiones en localStorage
- Guarda: playerName, fullPlayerName, currentView, roomId
-
Actualización de
page.tsx:- Integrado hook
useSessionStorage - Al iniciar sesión, se guarda la sesión
- Al cargar la app, se restaura la sesión si existe
- Al cambiar de vista (lobby/game), se actualiza la sesión
- Función
handleLogoutpara limpiar sesión
- Integrado hook
Servidor
- Nuevo evento:
reconnect_session- Permite a un jugador reconectarse a una partida existente
- Actualiza el socketId del jugador en la partida
- Envía el estado actualizado al jugador reconectado
2. Botón de Salir de la Partida ✅
Cliente
-
Nuevo componente:
client/src/components/ExitGameButton.tsx- Botón con icono de flecha
- Posicionado arriba a la izquierda (fixed top-4 left-4)
- Modal de confirmación antes de salir
- Se muestra en todas las fases del juego excepto en pantallas de victoria
-
Actualización de
GameBoard.tsx:- Agregado prop
fullPlayerName - Integrado
ExitGameButton - Llama a
actions.leaveGame()al confirmar
- Agregado prop
-
Actualización de
useSocket.ts:- Nueva acción:
leaveGame() - Nuevo listener:
player_left_game
- Nueva acción:
Servidor
- Nuevo evento:
leave_game- Notifica a todos los jugadores que alguien abandonó
- Elimina la partida de la base de datos
- Limpia timers asociados
- Actualiza la lista de salas
- Desconecta a todos los jugadores de la sala
3. Botón de Salir del Juego (Logout) ✅
Cliente
-
Nuevo componente:
client/src/components/LogoutButton.tsx- Botón con icono de apagar
- Posicionado arriba a la izquierda (fixed top-4 left-4)
- Solo visible en el lobby
-
Actualización de
page.tsx:- Función
handleLogout():- Limpia la sesión de localStorage
- Vuelve a la vista de login
- Si está en una partida, llama a
leaveGame()
- Función
Flujo de Uso
Sesiones Persistentes
- Usuario se loguea → sesión guardada en localStorage
- Usuario cierra navegador
- Usuario vuelve a abrir → sesión restaurada automáticamente
- Si estaba en una partida, intenta reconectar
Salir de la Partida
- Usuario hace clic en botón de flecha (arriba izquierda)
- Aparece modal de confirmación
- Al confirmar:
- Servidor notifica a todos: "Jugador X ha abandonado"
- Partida eliminada de la BD
- Todos vuelven al lobby
Salir del Juego (Logout)
- Usuario hace clic en botón de apagar (arriba izquierda, solo en lobby)
- Sesión eliminada de localStorage
- Vuelve a pantalla de login
Archivos Modificados
Nuevos Archivos
client/src/hooks/useSessionStorage.tsclient/src/components/LogoutButton.tsxclient/src/components/ExitGameButton.tsx.agent/workflows/sesiones-y-botones.md
Archivos Modificados
client/src/app/page.tsxclient/src/components/GameBoard.tsxclient/src/hooks/useSocket.tsserver/src/index.ts
Próximos Pasos
-
Probar la aplicación:
- Verificar que las sesiones persisten correctamente
- Probar el botón de salir de la partida
- Probar el botón de logout
- Verificar reconexión después de recargar
-
Posibles mejoras:
- Agregar notificación toast cuando alguien abandona
- Mejorar el manejo de errores en reconexión
- Agregar timeout de sesión (expiración automática)
- Guardar más información en la sesión (configuración, preferencias)