From 540977dc62970e7314b516958991658e820974e1 Mon Sep 17 00:00:00 2001 From: DIKER0K Date: Fri, 2 Jan 2026 16:34:43 +0500 Subject: [PATCH] fix voice rooms --- app/api/voice_ws.py | 15 ++++++++++++--- app/realtime/voice_hub.py | 13 ++++++++++++- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/app/api/voice_ws.py b/app/api/voice_ws.py index 4989a1a..f164be6 100644 --- a/app/api/voice_ws.py +++ b/app/api/voice_ws.py @@ -9,18 +9,27 @@ async def voice_ws( room_id: str = Query(...), username: str = Query(...) ): + if username in voice_hub.rooms.get(room_id, {}): + await ws.close(code=4001) + return + await voice_hub.connect(room_id, username, ws) - # уведомим остальных - await voice_hub.broadcast( + users = list(voice_hub.rooms.get(room_id, {}).keys()) + await ws.send_json({ + "type": "users", + "users": users + }) + + await voice_hub.broadcast_except( room_id, + username, {"type": "join", "user": username} ) try: while True: msg = await ws.receive_json() - if msg["type"] == "signal": await voice_hub.send_to( room_id, diff --git a/app/realtime/voice_hub.py b/app/realtime/voice_hub.py index 563d405..66e0fd6 100644 --- a/app/realtime/voice_hub.py +++ b/app/realtime/voice_hub.py @@ -25,6 +25,17 @@ class VoiceHub: async def broadcast(self, room_id: str, payload: dict): for ws in self.rooms.get(room_id, {}).values(): - await ws.send_json(payload) + try: + await ws.send_json(payload) + except: + pass + + async def broadcast_except(self, room_id: str, except_user: str, payload: dict): + for user, ws in self.rooms.get(room_id, {}).items(): + if user != except_user: + try: + await ws.send_json(payload) + except: + pass voice_hub = VoiceHub()