"""WebSocket connection manager for real-time market data streaming.""" from typing import List from fastapi import WebSocket from ..utils.logger import get_logger logger = get_logger("websocket") class ConnectionManager: """Manages active WebSocket connections and broadcasts market updates.""" def __init__(self) -> None: self.active_connections: List[WebSocket] = [] async def connect(self, websocket: WebSocket) -> None: await websocket.accept() self.active_connections.append(websocket) logger.info(f"Client connected. Total: {len(self.active_connections)}") def disconnect(self, websocket: WebSocket) -> None: if websocket in self.active_connections: self.active_connections.remove(websocket) logger.info(f"Client disconnected. Total: {len(self.active_connections)}") async def broadcast(self, data: dict) -> None: """Send data to all connected clients.""" disconnected = [] for connection in self.active_connections: try: await connection.send_json(data) except Exception: disconnected.append(connection) for conn in disconnected: self.disconnect(conn) @property def client_count(self) -> int: return len(self.active_connections)