feat: add WebSocket router for real-time broadcast updates
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
30
backend/routers/ws.py
Normal file
30
backend/routers/ws.py
Normal file
@@ -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)
|
||||
Reference in New Issue
Block a user