sentinel-backend / src /api /websocket.py
Penguindrum920's picture
Deploy SENTINEL backend to Hugging Face Spaces
6a09e49 verified
Raw
History Blame Contribute Delete
1.38 kB
"""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)