From 8a14be321e62091ef6ed9d6a95fc301988b4de13 Mon Sep 17 00:00:00 2001 From: Aidan Haas Date: Thu, 10 Jul 2025 15:19:28 -0400 Subject: [PATCH] add logic for screensaver --- backend/server.py | 4 +- frontend/app/live/page.tsx | 80 +++++++++++++++++++++++++++----------- 2 files changed, 61 insertions(+), 23 deletions(-) diff --git a/backend/server.py b/backend/server.py index dea552d..84138d6 100644 --- a/backend/server.py +++ b/backend/server.py @@ -51,8 +51,10 @@ def status(): @app.route("/start", methods=["GET"]) def start_game(): + players = game_state["players"] game_state["gameActive"] = True - socketio.emit("player_update", {"players": game_state["players"]}) + current_player = players[game_state["playerTurn"]] + socketio.emit("player_update", {"nextPlayer": current_player}) return jsonify(game_state) diff --git a/frontend/app/live/page.tsx b/frontend/app/live/page.tsx index df37ef7..b1ed4b8 100644 --- a/frontend/app/live/page.tsx +++ b/frontend/app/live/page.tsx @@ -3,11 +3,26 @@ import { useEffect, useState } from 'react'; import io from 'socket.io-client'; -const socket = io('http://localhost:8080'); + + export default function HomePage() { + let baseUrl = ""; + if (typeof window !== "undefined") { + baseUrl = `${window.location.protocol}//${window.location.hostname}`; + } + const backendUrl = `${baseUrl}:${process.env.NEXT_PUBLIC_API_BASE}`; + const socket = io(`${backendUrl}`); + + const [time, setTime] = useState(new Date()); + const [currentPlayer, setCurrentPlayer] = useState(null); + const [gameStatus, setGameStatus] = useState<{ gameActive: boolean, players: any[] }>({ + gameActive: false, + players: [], + }); + useEffect(() => { socket.on('connect', () => { console.log('Connected to Socket.IO server'); @@ -15,6 +30,7 @@ export default function HomePage() { socket.on('player_update', (data: { nextPlayer: string }) => { setCurrentPlayer(data.nextPlayer); + fetchStatus(); }); return () => { @@ -23,29 +39,49 @@ export default function HomePage() { }, []); const advanceTurn = async () => { - await fetch('http://localhost:8080/next'); // triggers backend to emit event + await fetch(`${baseUrl}/next`); // triggers backend to emit event }; - return ( -
-

Game Turn Tracker

+ const fetchStatus = async () => { + try { + const res = await fetch(`${backendUrl}/status`); + const data = await res.json(); + setGameStatus(data); + } catch (err) { + console.error("Failed to fetch status", err); + } + }; -
- {currentPlayer ? ( -

- 🎯 Current Player: {currentPlayer.name} ({currentPlayer.group}) -

- ) : ( -

Waiting for turn to start…

- )} -
+ if (gameStatus.gameActive) { + return ( +
+

Game Turn Tracker

+ +
+ {currentPlayer ? ( +

+ 🎯 Current Player: {currentPlayer.name} ({currentPlayer.group}) +

+ ) : ( +

Waiting for turn to start…

+ )} +
+ + +
+ ); + } else { + return ( +
+ {time.getTime()} + This will show the time +
+ ); + } - -
- ); }