From deeeeae8f70b649540a3f9bbe43af18674e9ee0a Mon Sep 17 00:00:00 2001 From: Theo Browne Date: Sun, 22 Feb 2026 03:12:44 -0800 Subject: [PATCH] auto refresh --- broadcast.ts | 6 ++++++ frontend.tsx | 6 ++++++ server.ts | 3 +++ 3 files changed, 15 insertions(+) diff --git a/broadcast.ts b/broadcast.ts index 6b9d440..27883f1 100644 --- a/broadcast.ts +++ b/broadcast.ts @@ -38,6 +38,7 @@ type ServerMessage = { data: GameState; totalRounds: number; viewerCount: number; + version?: string; }; const MODEL_COLORS: Record = { @@ -73,6 +74,7 @@ let connected = false; let ws: WebSocket | null = null; let reconnectTimer: number | null = null; let lastMessageAt = 0; +let knownVersion: string | null = null; function getColor(name: string): string { return MODEL_COLORS[name] ?? "#aeb6d6"; @@ -128,6 +130,10 @@ function setupWebSocket() { try { const msg = JSON.parse(String(e.data)) as ServerMessage; if (msg.type === "state") { + if (msg.version) { + if (!knownVersion) knownVersion = msg.version; + else if (knownVersion !== msg.version) return location.reload(); + } state = msg.data; totalRounds = Number.isFinite(msg.totalRounds) && msg.totalRounds >= 0 diff --git a/frontend.tsx b/frontend.tsx index e51531f..d8a9ce8 100644 --- a/frontend.tsx +++ b/frontend.tsx @@ -44,6 +44,7 @@ type ServerMessage = { data: GameState; totalRounds: number; viewerCount: number; + version?: string; }; // ── Model colors & logos ───────────────────────────────────────────────────── @@ -410,6 +411,7 @@ function App() { let ws: WebSocket; let reconnectTimer: ReturnType; + let knownVersion: string | null = null; function connect() { ws = new WebSocket(wsUrl); ws.onopen = () => setConnected(true); @@ -420,6 +422,10 @@ function App() { ws.onmessage = (e) => { const msg: ServerMessage = JSON.parse(e.data); if (msg.type === "state") { + if (msg.version) { + if (!knownVersion) knownVersion = msg.version; + else if (knownVersion !== msg.version) return location.reload(); + } setState(msg.data); setTotalRounds(msg.totalRounds); setViewerCount(msg.viewerCount); diff --git a/server.ts b/server.ts index 39e514c..f8f19db 100644 --- a/server.ts +++ b/server.ts @@ -14,6 +14,8 @@ import { type RoundState, } from "./game.ts"; +const VERSION = crypto.randomUUID().slice(0, 8); + // ── Game state ────────────────────────────────────────────────────────────── const runsArg = process.argv.find((a) => a.startsWith("runs=")); @@ -225,6 +227,7 @@ function broadcast() { data: gameState, totalRounds: runs, viewerCount: clients.size, + version: VERSION, }); for (const ws of clients) { ws.send(msg);