Fix: Update socket ID refs on reconnect (leader buttons bug)
Some checks failed
CI/CD - Francia Ocupada (La Resistencia) / build-and-deploy (push) Failing after 6s

This commit is contained in:
Resistencia Dev
2025-12-27 22:45:17 +01:00
parent 800db837bb
commit b68f4e9ff5
2 changed files with 42 additions and 2 deletions

View File

@@ -405,8 +405,8 @@ io.on('connection', (socket) => {
const existingPlayer = game.state.players.find(p => p.name === playerName);
if (existingPlayer) {
// Actualizar el socket ID del jugador
existingPlayer.id = socket.id;
// Actualizar el socket ID del jugador y referencias
game.updatePlayerSocket(existingPlayer.id, socket.id);
// Unir al socket a la sala
socket.join(roomId);

View File

@@ -415,4 +415,44 @@ export class Game {
// Mantener solo los últimos 50 mensajes
if (this.state.history.length > 50) this.state.history.shift();
}
updatePlayerSocket(oldId: string, newId: string) {
const player = this.state.players.find(p => p.id === oldId);
if (!player) return;
// Actualizar ID del jugador
player.id = newId;
// Actualizar referencias en el estado
// 1. Host
if (this.hostId === oldId) {
this.hostId = newId;
this.state.hostId = newId;
}
// 2. Líder actual
if (this.state.currentLeaderId === oldId) {
this.state.currentLeaderId = newId;
}
// 3. Votos de Líder (leaderVotes)
if (this.state.leaderVotes && this.state.leaderVotes[oldId] !== undefined) {
this.state.leaderVotes[newId] = this.state.leaderVotes[oldId];
delete this.state.leaderVotes[oldId];
}
// 4. Votos de Equipo (teamVotes)
if (this.state.teamVotes && this.state.teamVotes[oldId] !== undefined) {
this.state.teamVotes[newId] = this.state.teamVotes[oldId];
delete this.state.teamVotes[oldId];
}
// 5. Equipo Propuesto (proposedTeam)
if (this.state.proposedTeam && this.state.proposedTeam.includes(oldId)) {
this.state.proposedTeam = this.state.proposedTeam.map(id => id === oldId ? newId : id);
}
this.log(`Jugador ${player.name} reconectado. ID actualizado.`);
}
}