Síntoma
Cuando se corta la conexión, el juego muestra "Conexion cerrada." y ahí queda. El jugador tiene que recargar la página a mano y volver a elegir personaje.
Causa
En frontend/components/game/session/useGameSession.ts, los handlers onerror y onclose sólo emiten estado. No hay ningún intento de reconexión.
El auto-connect de frontend/app/play/page.tsx está protegido por una guarda (autoConnectKeyRef) que hace que corra una sola vez por combinación de cuenta y personaje, así que tampoco vuelve a disparar.
Buscando reconnect o Reconectar en todo el frontend no aparece nada: no existe ni siquiera un botón manual.
Por qué importa
En desktop con conexión estable se nota poco. En mobile es permanente: cambiar de WiFi a datos, pasar por un túnel o bloquear la pantalla cortan el socket.
Propuesta
- Reconexión automática con backoff exponencial y un tope de intentos.
- Estado visible para el jugador: "reconectando…", con la posibilidad de cancelar.
- Botón de reconectar manual cuando se agotan los intentos.
- Escuchar
visibilitychange y pagehide para reconectar al volver del segundo plano, en vez de esperar a que el jugador toque algo.
- Preservar el personaje seleccionado, para no obligar a rehacer el flujo entero.
A tener en cuenta
- El servidor puede haber desconectado al personaje del lado suyo. La reconexión tiene que rehacer el handshake completo, no asumir que la sesión sigue viva.
- Hay que evitar la tormenta de reconexiones si lo que se cayó es el servidor: el backoff es lo que protege de eso.
- El juego pide un ticket antes de conectar. La reconexión tiene que contemplar que ese ticket puede haber expirado.
Criterios de aceptación
Archivos relevantes
frontend/components/game/session/useGameSession.ts (ciclo de vida del socket)
frontend/app/play/page.tsx (auto-connect y autoConnectKeyRef)
Síntoma
Cuando se corta la conexión, el juego muestra "Conexion cerrada." y ahí queda. El jugador tiene que recargar la página a mano y volver a elegir personaje.
Causa
En
frontend/components/game/session/useGameSession.ts, los handlersonerroryonclosesólo emiten estado. No hay ningún intento de reconexión.El auto-connect de
frontend/app/play/page.tsxestá protegido por una guarda (autoConnectKeyRef) que hace que corra una sola vez por combinación de cuenta y personaje, así que tampoco vuelve a disparar.Buscando
reconnectoReconectaren todo el frontend no aparece nada: no existe ni siquiera un botón manual.Por qué importa
En desktop con conexión estable se nota poco. En mobile es permanente: cambiar de WiFi a datos, pasar por un túnel o bloquear la pantalla cortan el socket.
Propuesta
visibilitychangeypagehidepara reconectar al volver del segundo plano, en vez de esperar a que el jugador toque algo.A tener en cuenta
Criterios de aceptación
Archivos relevantes
frontend/components/game/session/useGameSession.ts(ciclo de vida del socket)frontend/app/play/page.tsx(auto-connect yautoConnectKeyRef)