diff --git a/lobby.js b/lobby.js index 0448b0c..eb35ed1 100644 --- a/lobby.js +++ b/lobby.js @@ -38,7 +38,7 @@ app.get("/lobby/join", async (req, res) => { const users = get_data(); const user = users.find(u => u.username === username); if (!user) { - return res.status(401).json({ error: "User doesn't exist" }); + return res.status(401).json({error: "User doesn't exist"}); } await joinLobby(lobbyId, user.username); @@ -51,13 +51,13 @@ app.get("/lobby/join", async (req, res) => { playerMap[lobbyId].push(username); } - res.json({ lobbyId, username }); + res.json({lobbyId, username}); }); app.get("/lobby/players", async (req, res) => { let lobbyId = req.query.lobbyId; let players = playerMap[lobbyId] || []; - res.json({ players }); + res.json({players}); }); function get_data() { diff --git a/public/frontend_home.js b/public/frontend_home.js index 1ba360a..5f3013a 100644 --- a/public/frontend_home.js +++ b/public/frontend_home.js @@ -2,10 +2,15 @@ document.addEventListener("DOMContentLoaded", async () => { const logoutButton = document.getElementById("logout"); const balance = document.getElementById("balance"); const hostButton = document.getElementById("host"); + const joinButton = document.getElementById("join"); + const joinForm = document.getElementById("join-form"); + const joinCodeInput = document.getElementById("join-code"); + const joinSubmit = document.getElementById("submit-join"); + const getUsernameFromToken = async () => { try { - const res = await fetch("/verify", { method: "POST" }); + const res = await fetch("/verify", {method: "POST"}); const data = await res.json(); return data.user?.username; } catch (err) { @@ -13,10 +18,8 @@ document.addEventListener("DOMContentLoaded", async () => { return null; } }; - - // Get and display user balance try { - const balanceRes = await fetch('/balance', { method: "GET" }); + const balanceRes = await fetch('/balance', {method: "GET"}); if (balanceRes.ok) { const balanceData = await balanceRes.json(); balance.innerHTML = balanceData.balance; @@ -29,7 +32,7 @@ document.addEventListener("DOMContentLoaded", async () => { logoutButton.addEventListener("click", async (e) => { e.preventDefault(); try { - const logoutRes = await fetch('/logout', { method: "DELETE" }); + const logoutRes = await fetch('/logout', {method: "DELETE"}); if (logoutRes.ok) { document.cookie = "authorization=; Max-Age=0; path=/;"; window.location.href = "/login"; @@ -49,12 +52,10 @@ document.addEventListener("DOMContentLoaded", async () => { try { const res = await fetch(`/lobby/create?username=${username}`); if (res.redirected) { - // If server redirects to join, follow the URL manually const joinURL = new URL(res.url); const lobbyId = joinURL.searchParams.get("lobbyId"); - const joinRes = await fetch(joinURL.href); - const { lobbyId: finalLobbyId } = await joinRes.json(); + const {lobbyId: finalLobbyId} = await joinRes.json(); document.getElementById("lobby-id").textContent = finalLobbyId; document.getElementById("lobby-room").classList.remove("hidden"); @@ -70,4 +71,44 @@ document.addEventListener("DOMContentLoaded", async () => { console.error("Lobby create/join error:", err); } }); + joinButton.addEventListener("click", (e) => { + e.preventDefault(); + if (joinForm.classList.contains("hidden")) { + joinForm.classList.remove("hidden"); + joinCodeInput.focus(); + } else { + joinForm.classList.add("hidden"); + } + }); + joinSubmit.addEventListener("click", async (e) => { + e.preventDefault(); + const lobbyId = joinCodeInput.value.trim(); + if (!lobbyId) return alert("Please enter a lobby ID"); + const username = await getUsernameFromToken(); + if (!username) return alert("User not authenticated"); + + try { + const joinRes = await fetch(`/lobby/join?lobbyId=${lobbyId}&username=${username}`); + if (joinRes.ok) { + const {lobbyId: finalLobbyId} = await joinRes.json(); + + document.getElementById("lobby-id").textContent = finalLobbyId; + document.getElementById("lobby-room").classList.remove("hidden"); + joinForm.classList.add("hidden"); + + setInterval(async () => { + const res = await fetch(`/lobby/players?lobbyId=${finalLobbyId}`); + const data = await res.json(); + const playerList = document.getElementById("player-list"); + playerList.innerHTML = data.players.map(p => `
${p}
`).join("") || "No players yet
"; + }, 3000); + } else { + const error = await joinRes.json(); + alert("Failed to join lobby: " + (error.error || "Unknown error")); + } + } catch (err) { + console.error("Join lobby error:", err); + alert("Could not join lobby."); + } + }); }); \ No newline at end of file diff --git a/public/home.html b/public/home.html index dadeb1d..bc1e87c 100644 --- a/public/home.html +++ b/public/home.html @@ -14,6 +14,10 @@ +