31 lines
761 B
Python
31 lines
761 B
Python
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)
|