---
description: Implementación de sesiones persistentes y botones de salida
---

# Implementación de Sesiones y Botones de Salida

## Objetivo
Implementar tres mejoras principales:
1. Sistema de sesiones persistentes
2. Botón de salir de la partida (en todas las pantallas de juego)
3. Botón de salir del juego (solo en lobby)

## Tareas

### 1. Sistema de Sesiones Persistentes

**Cliente:**
- Crear hook `useSessionStorage` para manejar sesiones
- Guardar en localStorage:
  - `playerName` y `fullPlayerName`
  - `currentView` (login/lobby/game)
  - `roomId` si está en una partida
- Al cargar la app, verificar si hay sesión activa
- Si hay sesión, reconectar al servidor y recuperar estado

**Servidor:**
- Implementar evento `reconnect_session` para validar y recuperar estado
- Mantener mapping de `socketId` a `playerId` persistente
- Al reconectar, actualizar el socketId del jugador en la partida

### 2. Botón de Salir de la Partida

**Cliente:**
- Crear componente `ExitGameButton` con icono de flecha
- Posicionar arriba a la izquierda
- Mostrar en todas las fases del juego (no en lobby)
- Al hacer clic, emitir evento `leave_game`

**Servidor:**
- Implementar evento `leave_game`
- Notificar a todos los jugadores que alguien salió
- Eliminar la partida de la BD
- Devolver a todos al lobby

### 3. Botón de Salir del Juego

**Cliente:**
- Crear componente `LogoutButton` con icono de apagar
- Posicionar arriba a la izquierda solo en lobby
- Al hacer clic:
  - Limpiar localStorage
  - Volver a vista de login
  - Desconectar socket si está en partida

## Orden de Implementación

1. Crear hooks y utilidades para sesiones
2. Implementar botón de salir del juego (logout)
3. Implementar botón de salir de la partida
4. Implementar lógica de reconexión en servidor
5. Integrar sistema de sesiones en el cliente
6. Pruebas
