import { IncomingMessage, Server, ServerResponse } from 'http'; import { WebSocketServer, WebSocket } from 'ws'; import { v4 as uuidv4 } from 'uuid'; import { connectedUsers } from './state'; import { broadcastToServer } from './broadcast'; import { handleWebSocketMessage } from './handler'; export function setupWebSocket(server: Server): void { const wss = new WebSocketServer({ server }); wss.on('connection', (ws: WebSocket) => { const connectionId = uuidv4(); connectedUsers.set(connectionId, { oderId: connectionId, ws, serverIds: new Set() }); ws.on('message', (data) => { try { const message = JSON.parse(data.toString()); handleWebSocketMessage(connectionId, message); } catch (err) { console.error('Invalid WebSocket message:', err); } }); ws.on('close', () => { const user = connectedUsers.get(connectionId); if (user) { user.serverIds.forEach((sid) => { broadcastToServer(sid, { type: 'user_left', oderId: user.oderId, displayName: user.displayName, serverId: sid }, user.oderId); }); } connectedUsers.delete(connectionId); }); ws.send(JSON.stringify({ type: 'connected', connectionId, serverTime: Date.now() })); }); }