Files
dpu-shared/dist/ws.js
2026-02-06 11:08:26 +01:00

35 lines
963 B
JavaScript

import { logInfo } from "./logger.js";
export class WsService {
clients = new Set();
listeners = [];
onClientChange(callback) {
this.listeners.push(callback);
return () => {
this.listeners = this.listeners.filter((cb) => cb !== callback);
};
}
emitClientChange() {
for (const callback of this.listeners) {
callback(this.clients.size);
}
}
addClient(ws) {
this.clients.add(ws);
logInfo(`Socket connected. Total clients: ${this.clients.size}`);
this.emitClientChange();
}
removeClient(ws) {
this.clients.delete(ws);
logInfo(`Socket disconnected. Total clients: ${this.clients.size}`);
this.emitClientChange();
}
broadcast(message) {
this.clients.forEach((socket) => {
socket.send(JSON.stringify(message));
});
}
getClientCount() {
return this.clients.size;
}
}