Skip to content

Reconexión sin código de sala: recordar última sala + endpoint de salas activas #29

Description

@Zenxlk

¿Qué problema resuelve esta funcionalidad?

Reportado por el usuario: si un jugador pierde la conexión (cierra la app, se le corta la red) y no anotó el código de sala, no tiene forma de volver a entrar — el código no queda visible en ningún lado después de unirse, y hoy no existe ningún camino para reconectar sin volver a escribirlo a mano.

WsClient ya reconecta solo ante una caída de red mientras el proceso de la app sigue vivo (back-off exponencial, ver docs/ARCHITECTURE.md sección "Reconexión"), pero eso no cubre el caso real que describió el usuario: cerrar la app y volver a abrirla más tarde, con la partida todavía en curso.

Solución propuesta

Dos mitades, encontradas al momento de realizar pruebas y casos de uso:

  1. Cliente — recordar la última sala activa (LAN y online): persistir localmente (mismo patrón que playerIdProvider/_playerIdPrefsKey en lobby_providers.dart, vía shared_preferences) el código de sala / hostAddress, el LobbyMode (lan/online) y el playerId de la última sala en la que el jugador estuvo. En Home, si hay una sala guardada, mostrar un botón "Volver a mi partida" que intenta reconectar directo con esos datos, sin pedir el código de nuevo. Limpiar el dato guardado cuando el jugador sale de la sala explícitamente (leaveRoom()) o cuando la partida termina normal (GameOverScreen).
    • Para LAN, esto solo funciona si el host sigue corriendo en la misma IP — no hay nada centralizado que lo confirme de antemano, así que el intento de reconexión puede fallar (mostrar el error normal de conexión en ese caso, igual que hoy).
  2. Backend — endpoint de salas activas por jugador (solo aplica a modo online, cards_game_service, repo separado): algo como GET /players/{id}/rooms que devuelva las salas donde ese playerId sigue conectado o dentro del grace period de reconexión, para que el cliente pueda confirmar que la sala sigue viva antes de intentar reconectar (evita un intento de conexión directo a ciegas, y permite mostrar "tu partida en AB12CD sigue activa" en vez de solo un botón genérico). Requiere autenticación igual que PATCH /players/{id}/nickname (el JWT tiene que corresponder al id de la ruta).

Fase del proyecto a la que pertenece

  • Futuro — Bots / modo online

Alternativas consideradas

Ninguna todavía — se identificó directamente al recibir el reporte del usuario, jugando en modo online real.

Metadata

Metadata

Assignees

Labels

✨ enhancementNueva funcionalidad o mejora🌐 networknetwork/ — WebSocket, mDNS, HTTP🧩 featuresfeatures/ — UI y providers por feature

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions