From 0cbb88198dd5b486d104f2103e451d8ba0226451 Mon Sep 17 00:00:00 2001 From: cay Date: Fri, 10 Apr 2026 08:31:19 +0100 Subject: [PATCH] srtj --- sockets/arena_socket.js | 8 +++++++- views/1v1-battlefield.ejs | 38 +++++++++++++++++++++++--------------- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/sockets/arena_socket.js b/sockets/arena_socket.js index 864e518..020de9e 100644 --- a/sockets/arena_socket.js +++ b/sockets/arena_socket.js @@ -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 }); } }); diff --git a/views/1v1-battlefield.ejs b/views/1v1-battlefield.ejs index 87702a2..eb6b408 100644 --- a/views/1v1-battlefield.ejs +++ b/views/1v1-battlefield.ejs @@ -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 => {