Spaces:
Sleeping
Sleeping
| from typing import Any, Dict, Set | |
| from fastapi import WebSocket | |
| from core.logging import logger | |
| class WebSocketManager: | |
| """Manages active WebSocket client connections for real-time live events.""" | |
| def __init__(self): | |
| self.active_connections: Set[WebSocket] = set() | |
| async def connect(self, websocket: WebSocket): | |
| await websocket.accept() | |
| self.active_connections.add(websocket) | |
| logger.info(f"WebSocket client connected. Total clients: {len(self.active_connections)}") | |
| def disconnect(self, websocket: WebSocket): | |
| self.active_connections.discard(websocket) | |
| logger.info(f"WebSocket client disconnected. Total clients: {len(self.active_connections)}") | |
| async def broadcast(self, payload: Dict[str, Any]): | |
| if not self.active_connections: | |
| return | |
| stale = set() | |
| for conn in list(self.active_connections): | |
| try: | |
| await conn.send_json(payload) | |
| except Exception: | |
| stale.add(conn) | |
| for conn in stale: | |
| self.disconnect(conn) | |