sse typing

This commit is contained in:
Darius
2026-02-04 21:52:32 +01:00
parent b55e1dd0a6
commit ada7268062
8 changed files with 89 additions and 1 deletions

43
src/sse.ts Normal file
View File

@@ -0,0 +1,43 @@
import { logInfo } from "./logger";
export interface SseClient {
id: number;
send: (data: SseEvent) => void;
}
export interface SseEvent {
type: string;
data?: unknown;
message?: string;
}
export class SseService {
private clients = new Set<SseClient>();
addClient(client: SseClient): void {
this.clients.add(client);
logInfo(
`SSE client connected: ${client.id}. Total clients: ${this.clients.size}`,
);
}
removeClient(clientId: number): void {
const client = [...this.clients].find((c) => c.id === clientId);
if (client) {
this.clients.delete(client);
logInfo(
`SSE client disconnected: ${clientId}. Total clients: ${this.clients.size}`,
);
}
}
notifyClients(event: SseEvent): void {
this.clients.forEach((client) => {
client.send(event);
});
}
getClientCount(): number {
return this.clients.size;
}
}