¿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:
- 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).
- 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
Alternativas consideradas
Ninguna todavía — se identificó directamente al recibir el reporte del usuario, jugando en modo online real.
¿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.
WsClientya reconecta solo ante una caída de red mientras el proceso de la app sigue vivo (back-off exponencial, verdocs/ARCHITECTURE.mdsecció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:
playerIdProvider/_playerIdPrefsKeyenlobby_providers.dart, víashared_preferences) el código de sala /hostAddress, elLobbyMode(lan/online) y elplayerIdde 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).cards_game_service, repo separado): algo comoGET /players/{id}/roomsque devuelva las salas donde eseplayerIdsigue 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 quePATCH /players/{id}/nickname(el JWT tiene que corresponder alidde la ruta).Fase del proyecto a la que pertenece
Alternativas consideradas
Ninguna todavía — se identificó directamente al recibir el reporte del usuario, jugando en modo online real.