Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 12 additions & 5 deletions strictdoc/server/routers/main_router.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import asyncio
import copy
import datetime
import os
Expand Down Expand Up @@ -2820,16 +2821,22 @@ async def get_asset(request: Request, url_to_asset: str) -> Response:
class ConnectionManager:
def __init__(self) -> None:
self.active_connections: List[WebSocket] = []
self._lock = asyncio.Lock()

async def connect(self, websocket: WebSocket) -> None:
await websocket.accept()
self.active_connections.append(websocket)
async with self._lock:
self.active_connections.append(websocket)

def disconnect(self, websocket: WebSocket) -> None:
self.active_connections.remove(websocket)
async def disconnect(self, websocket: WebSocket) -> None:
async with self._lock:
if websocket in self.active_connections:
self.active_connections.remove(websocket)

async def broadcast(self, message: str) -> None:
for connection in self.active_connections:
async with self._lock:
connections = list(self.active_connections)
for connection in connections:
await connection.send_text(message)

manager = ConnectionManager()
Expand All @@ -2842,7 +2849,7 @@ async def websocket_endpoint(websocket: WebSocket, client_id: int) -> None:
_ = await websocket.receive_text()
# Do nothing for now.
except WebSocketDisconnect:
manager.disconnect(websocket)
await manager.disconnect(websocket)
await manager.broadcast(
f"Websocket: Client #{client_id} disconnected"
)
Expand Down