Improve application responsiveness and background processing
This commit is contained in:
@@ -17,6 +17,7 @@ export interface RconEndpoint {
|
||||
}
|
||||
|
||||
export interface ServerStatus {
|
||||
receivedAt?: number;
|
||||
server: string;
|
||||
containerState?: string | null;
|
||||
containerCheckedAt?: string | null;
|
||||
@@ -91,17 +92,17 @@ export function startServerStream(): (() => void) | undefined {
|
||||
});
|
||||
});
|
||||
source.addEventListener('server-status', (evt) => {
|
||||
const data = JSON.parse((evt as MessageEvent).data) as { entries: ServerStatus[]; serverNow?: number };
|
||||
const data = JSON.parse((evt as MessageEvent).data) as { entries: ServerStatus[]; serverNow?: number; delta?: boolean };
|
||||
syncServerTime(data.serverNow);
|
||||
statusByServer.update(() => {
|
||||
const m = new Map<string, ServerStatus>();
|
||||
for (const e of data.entries) m.set(e.server, e);
|
||||
statusByServer.update(previous => {
|
||||
const m = data.delta ? new Map(previous) : new Map<string, ServerStatus>();
|
||||
for (const e of data.entries) m.set(e.server, { ...e, receivedAt: Date.now() });
|
||||
return m;
|
||||
});
|
||||
statusReceivedAt.set(Date.now());
|
||||
});
|
||||
if (tickInterval === null) {
|
||||
tickInterval = setInterval(() => _uiNow.set(serverTimeNow()), 1000);
|
||||
tickInterval = setInterval(() => { if (typeof document === 'undefined' || document.visibilityState !== 'hidden') _uiNow.set(serverTimeNow()); }, 1000);
|
||||
}
|
||||
return () => { source?.close(); source = null; if (tickInterval) clearInterval(tickInterval); tickInterval = null; };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user