diff --git a/backend/routers/ws.py b/backend/routers/ws.py new file mode 100644 index 0000000..7a629f9 --- /dev/null +++ b/backend/routers/ws.py @@ -0,0 +1,30 @@ +import asyncio +import json +from fastapi import APIRouter, WebSocket, WebSocketDisconnect + +router = APIRouter() + +connected_clients: list[WebSocket] = [] + + +@router.websocket("/ws") +async def websocket_endpoint(ws: WebSocket): + await ws.accept() + connected_clients.append(ws) + try: + while True: + await ws.receive_text() + except WebSocketDisconnect: + connected_clients.remove(ws) + + +async def broadcast(event_type: str, data: dict): + message = json.dumps({"type": event_type, "data": data}) + disconnected = [] + for ws in connected_clients: + try: + await ws.send_text(message) + except Exception: + disconnected.append(ws) + for ws in disconnected: + connected_clients.remove(ws)