← back to Dw Boardroom Governance
src/ws/broadcast.ts
54 lines
import { WebSocketServer, WebSocket } from 'ws';
import { Server } from 'http';
import { WSEvent, WSEventType } from '../types';
let wss: WebSocketServer | null = null;
export function initWebSocket(server: Server): void {
wss = new WebSocketServer({ server, path: '/ws' });
wss.on('connection', (ws) => {
console.log('[Governance WS] Client connected');
ws.send(JSON.stringify({
type: 'connected',
payload: { message: 'DW Governance WebSocket connected' },
timestamp: new Date().toISOString()
}));
});
console.log('[Governance WS] WebSocket server ready on /ws');
}
export function broadcast(type: WSEventType, payload: any): void {
if (!wss) return;
const event: WSEvent = {
type,
payload,
timestamp: new Date().toISOString()
};
const data = JSON.stringify(event);
let sent = 0;
wss.clients.forEach((client) => {
if (client.readyState === WebSocket.OPEN) {
client.send(data);
sent++;
}
});
if (sent > 0) {
console.log(`[Governance WS] Broadcast ${type} to ${sent} client(s)`);
}
}
export function getConnectionCount(): number {
if (!wss) return 0;
let count = 0;
wss.clients.forEach((client) => {
if (client.readyState === WebSocket.OPEN) count++;
});
return count;
}