Spaces:
Sleeping
Sleeping
Update server.js
Browse files
server.js
CHANGED
|
@@ -22,6 +22,9 @@ let running = false;
|
|
| 22 |
let startNs = 0n;
|
| 23 |
let accumulatedNs = 0n;
|
| 24 |
|
|
|
|
|
|
|
|
|
|
| 25 |
const nowNs = () => process.hrtime.bigint();
|
| 26 |
const nsToMillis = (ns) => Number(ns) / 1e6;
|
| 27 |
|
|
@@ -34,7 +37,8 @@ function broadcastState() {
|
|
| 34 |
const payload = {
|
| 35 |
running,
|
| 36 |
elapsedMs: nsToMillis(currentElapsedNs()),
|
| 37 |
-
serverSentAtMs: Date.now()
|
|
|
|
| 38 |
};
|
| 39 |
io.emit("state", payload);
|
| 40 |
}
|
|
@@ -78,10 +82,11 @@ io.on("connection", (socket) => {
|
|
| 78 |
socket.emit("state", {
|
| 79 |
running,
|
| 80 |
elapsedMs: nsToMillis(currentElapsedNs()),
|
| 81 |
-
serverSentAtMs: Date.now()
|
|
|
|
| 82 |
});
|
| 83 |
|
| 84 |
-
// --- Admin joins a room to receive client
|
| 85 |
socket.on("admin:join", () => {
|
| 86 |
socket.join("admins");
|
| 87 |
broadcastClients();
|
|
@@ -137,6 +142,15 @@ io.on("connection", (socket) => {
|
|
| 137 |
broadcastState();
|
| 138 |
});
|
| 139 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 140 |
socket.on("disconnect", () => {
|
| 141 |
stopLatencyProbe(socket);
|
| 142 |
clients.delete(socket.id);
|
|
|
|
| 22 |
let startNs = 0n;
|
| 23 |
let accumulatedNs = 0n;
|
| 24 |
|
| 25 |
+
// NEW: shared color for all clients (default matches your theme)
|
| 26 |
+
let color = "#E8EEF8"; // hex only
|
| 27 |
+
|
| 28 |
const nowNs = () => process.hrtime.bigint();
|
| 29 |
const nsToMillis = (ns) => Number(ns) / 1e6;
|
| 30 |
|
|
|
|
| 37 |
const payload = {
|
| 38 |
running,
|
| 39 |
elapsedMs: nsToMillis(currentElapsedNs()),
|
| 40 |
+
serverSentAtMs: Date.now(),
|
| 41 |
+
color, // <-- include color in every state
|
| 42 |
};
|
| 43 |
io.emit("state", payload);
|
| 44 |
}
|
|
|
|
| 82 |
socket.emit("state", {
|
| 83 |
running,
|
| 84 |
elapsedMs: nsToMillis(currentElapsedNs()),
|
| 85 |
+
serverSentAtMs: Date.now(),
|
| 86 |
+
color,
|
| 87 |
});
|
| 88 |
|
| 89 |
+
// --- Admin joins a room to receive client list updates
|
| 90 |
socket.on("admin:join", () => {
|
| 91 |
socket.join("admins");
|
| 92 |
broadcastClients();
|
|
|
|
| 142 |
broadcastState();
|
| 143 |
});
|
| 144 |
|
| 145 |
+
// NEW: Admin sets color (hex only)
|
| 146 |
+
socket.on("cmd:color", (hex) => {
|
| 147 |
+
if (typeof hex !== "string") return;
|
| 148 |
+
const ok = /^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$/.test(hex.trim());
|
| 149 |
+
if (!ok) return;
|
| 150 |
+
color = hex.trim();
|
| 151 |
+
broadcastState(); // push new color to everyone
|
| 152 |
+
});
|
| 153 |
+
|
| 154 |
socket.on("disconnect", () => {
|
| 155 |
stopLatencyProbe(socket);
|
| 156 |
clients.delete(socket.id);
|