Files
brackets/backend/app/core/websocket_manager.py
T
2026-02-11 23:54:42 +01:00

41 lines
1.0 KiB
Python

# backend/app/core/websocket_manager.py
import asyncio
from fastapi import WebSocket
class ConnectionManager:
def __init__(self):
self.active_connections: set[WebSocket] = set()
async def connect(self, websocket: WebSocket):
await websocket.accept()
self.active_connections.add(websocket)
def disconnect(self, websocket: WebSocket):
self.active_connections.discard(websocket)
async def broadcast(self, message: dict):
if not self.active_connections:
return
connections_snapshot = list(self.active_connections)
async def send_safe(ws: WebSocket):
try:
await ws.send_json(message)
except Exception:
self.disconnect(ws)
await asyncio.gather(*(send_safe(ws) for ws in connections_snapshot))
manager = ConnectionManager()
async def send_ws_update(id: str):
await asyncio.gather(
manager.broadcast({"type": "dashboard_update"}),
manager.broadcast({"type": "tournament_update", "id": id}),
)