2024-07-26 22:34:44 +01:00
|
|
|
import asyncio
|
|
|
|
from fastapi import WebSocket
|
|
|
|
|
|
|
|
|
|
|
|
class WebSocketConnectionManager:
|
|
|
|
def __init__(self) -> None:
|
|
|
|
self.__active_connections: list[WebSocket] = []
|
|
|
|
|
|
|
|
async def connect(self, ws: WebSocket):
|
|
|
|
await ws.accept()
|
|
|
|
self.__active_connections.append(ws)
|
|
|
|
|
|
|
|
def disconnect(self, ws: WebSocket):
|
|
|
|
self.__active_connections.remove(ws)
|
|
|
|
|
2024-07-29 13:27:40 +01:00
|
|
|
async def send_text(self, ws: WebSocket, msg: str):
|
|
|
|
try:
|
|
|
|
await ws.send_text(msg)
|
|
|
|
except:
|
|
|
|
self.__active_connections.remove(ws)
|
|
|
|
|
2024-07-26 22:34:44 +01:00
|
|
|
async def broadcast(self, msg: str):
|
|
|
|
await asyncio.gather(
|
2024-07-29 13:27:40 +01:00
|
|
|
*[self.send_text(conn, msg) for conn in self.__active_connections]
|
2024-07-26 22:34:44 +01:00
|
|
|
)
|