feat: implement right-click context menu for style customization and enhance real-time stats tracking

This commit is contained in:
arussac
2026-05-31 14:47:40 +02:00
parent ccacd16edb
commit 1a76e9076c
9 changed files with 389 additions and 35 deletions

View File

@@ -55,8 +55,10 @@ async function flushStats(): Promise<void> {
broadcastScheduled = false;
lastBroadcastAt = Date.now();
if (clients.size === 0) return;
const distinctIps = new Set<string>();
for (const s of clients.values()) distinctIps.add(s.ip);
const snapshot = await buildSnapshot({
connectedTabs: clients.size,
connectedTabs: distinctIps.size,
typingNow: countTyping(Date.now()),
});
const payload = JSON.stringify({ type: "stats", data: snapshot });
@@ -78,6 +80,15 @@ setInterval(() => {
if (clients.size > 0) void flushStats();
}, 1000);
// Periodic console log of connected IPs (every 10 s).
setInterval(() => {
if (clients.size === 0) return;
const ips = new Set<string>();
for (const s of clients.values()) ips.add(s.ip);
const lines = [...ips].map((ip) => ` ${ip}`).join("\n");
console.log(`[connectés] ${ips.size} IP(s):\n${lines}`);
}, 10_000);
/** Send an arbitrary frame to every connected tab. */
export function broadcast(payload: object): void {
const str = JSON.stringify(payload);