This commit is contained in:
cay 2026-04-10 08:31:19 +01:00
parent fd49572d22
commit 0cbb88198d
2 changed files with 30 additions and 16 deletions

View File

@ -334,7 +334,11 @@ function registerArenaHandlers(io, socket) {
socket.on("arena_join", (data) => {
const { matchId, slot, playerName } = data;
if (!matchId || !slot) return;
console.log(`[1v1] arena_join empfangen: matchId=${matchId}, slot=${slot}, name=${playerName}, socketId=${socket.id}`);
if (!matchId || !slot) {
console.warn(`[1v1] arena_join abgewiesen matchId oder slot fehlt`);
return;
}
if (!io._arenaRooms) io._arenaRooms = new Map();
if (!io._arenaRooms.has(matchId)) io._arenaRooms.set(matchId, { sockets: {}, names: {} });
@ -352,12 +356,14 @@ function registerArenaHandlers(io, socket) {
const otherSlot = slot === "player1" ? "player2" : "player1";
if (room.sockets[otherSlot]) {
console.log(`[1v1] Beide Spieler da → arena_ready senden | Match ${matchId}`);
io.to("arena_" + matchId).emit("arena_ready", {
player1: room.names["player1"] || "Spieler 1",
player2: room.names["player2"] || "Spieler 2",
});
startReadyTimer(io, matchId);
} else {
console.log(`[1v1] Erster Spieler joined, warte auf zweiten | Match ${matchId}`);
socket.to("arena_" + matchId).emit("arena_opponent_joined", { name: room.names[slot], slot });
}
});

View File

@ -556,6 +556,7 @@
myIngameName = (me && (me.ingame_name || me.username || me.name || String(me.id))) || "Spieler";
const myNameEl = document.getElementById(amIPlayer1 ? "nameLeft" : "nameRight");
if (myNameEl) myNameEl.textContent = myIngameName;
console.log("[1v1] emitArenaJoin →", { matchId, slot: mySlot, name: myIngameName });
socket.emit("arena_join", {
matchId,
slot: mySlot,
@ -568,25 +569,32 @@
fetch("/arena/me")
.then(r => r.json())
.then(me => emitArenaJoin(me))
.catch(() => emitArenaJoin(null));
.catch(() => {
console.warn("[1v1] /arena/me fehlgeschlagen join ohne Account");
emitArenaJoin(null);
});
}
// Auf Socket-Connect warten sicherster Zeitpunkt für arena_join
socket.on("connect", fetchAndJoin);
// Fallback: Socket war bereits verbunden bevor Event registriert wurde
if (socket.connected) fetchAndJoin();
// Sofort emittieren (socket.io puffert bis verbunden)
fetchAndJoin();
// Fallback: Falls nach 8s kein arena_opponent_joined / arena_ready kommt
// → Bereit-Box trotzdem anzeigen
// Sicherheits-Retry nach 2s falls connect noch aussteht
socket.on("connect", () => {
console.log("[1v1] Socket connected:", socket.id);
fetchAndJoin();
});
socket.on("connect_error", (err) => {
console.error("[1v1] Socket connect_error:", err.message);
});
// Fallback: Falls nach 10s kein arena-Event → Bereit-Box erzwingen
const readyFallbackTimer = setTimeout(() => {
const connecting = document.getElementById("connecting-overlay");
if (connecting) {
console.warn("[Arena] Kein Socket-Event nach 8s zeige Bereit-Box als Fallback");
connecting.remove();
const lockOverlay = document.getElementById("board-lock-overlay");
if (lockOverlay) lockOverlay.style.display = "flex";
}
}, 8000);
console.warn("[1v1] Kein arena-Event nach 10s Bereit-Box erzwingen");
document.getElementById("connecting-overlay")?.remove();
const lockOverlay = document.getElementById("board-lock-overlay");
if (lockOverlay) lockOverlay.style.display = "flex";
}, 10000);
/* ── Gegner verbunden ───────────────────────────────── */
socket.on("arena_opponent_joined", data => {