Skip to content

Commit 84f7ce7

Browse files
committed
fix(collab): fix disconnect message not showing
1 parent 3ac64a4 commit 84f7ce7

File tree

3 files changed

+23
-16
lines changed

3 files changed

+23
-16
lines changed

services/collaboration-service/app/core/connection_manager.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from fastapi import WebSocket, WebSocketDisconnect
33
import uuid
44
import asyncio
5-
from app.schemas.messages import ConnectMessage, DisconnectMessage, DisplayMessage
5+
from app.schemas.messages import CollaboratorConnectMessage, CollaboratorDisconnectMessage, DisplayMessage
66

77
class ConnectionManager:
88
def __init__(self):
@@ -40,7 +40,11 @@ async def on_connect(self, session_id: str, user_id: str, out_q: asyncio.Queue):
4040
if collaborator_q is None:
4141
return None
4242

43-
await collaborator_q.put(ConnectMessage())
43+
## Notify collaborator that this user has connected
44+
await collaborator_q.put(CollaboratorConnectMessage())
45+
46+
## Notify this user that the other user has already connected
47+
await out_q.put(CollaboratorConnectMessage())
4448

4549
async def on_disconnect(self, session_id: str, user_id: str):
4650
if session_id not in self.active_connections:
@@ -56,7 +60,7 @@ async def on_disconnect(self, session_id: str, user_id: str):
5660
if collaborator_q is None:
5761
return None
5862

59-
await collaborator_q.put(DisconnectMessage())
63+
await collaborator_q.put(CollaboratorDisconnectMessage())
6064

6165
async def on_message(self, session_id: str, user_id: str, msg: str):
6266
collaborator_q = self._get_collaborator_q(session_id, user_id)

services/collaboration-service/app/schemas/messages.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
class Message(BaseModel):
55
pass
66

7-
class ConnectMessage(Message):
7+
class CollaboratorConnectMessage(Message):
88
pass
99

10-
class DisconnectMessage(Message):
10+
class CollaboratorDisconnectMessage(Message):
1111
pass
1212

1313
class DisplayMessage(Message):

services/collaboration-service/app/ws/sessions.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from fastapi import APIRouter, Query, WebSocket, WebSocketDisconnect
33
from app.core.connection_manager import connection_manager
44
from app.core.users import UserState
5-
from app.schemas.messages import Message, ConnectMessage, DisconnectMessage, DisplayMessage
5+
from app.schemas.messages import Message, CollaboratorConnectMessage, CollaboratorDisconnectMessage, DisplayMessage
66

77
from datetime import datetime
88
import asyncio
@@ -36,19 +36,22 @@ async def receiver():
3636
msg = await ws.receive_text()
3737
await connection_manager.on_message(session_id, user_id, msg)
3838
except WebSocketDisconnect:
39-
print("aandle disconnect")
40-
pass ##
39+
try:
40+
print("handle disconnect")
41+
await connection_manager.on_disconnect(session_id, user_id)
42+
except ValueError as e:
43+
print(f"Error handling disconnect: {e}")
4144

4245
receiver_task = asyncio.create_task(receiver())
4346

4447
try:
4548
while True:
4649
msg = await in_q.get()
4750

48-
if isinstance(msg, ConnectMessage):
51+
if isinstance(msg, CollaboratorConnectMessage):
4952
user_status = UserState.AWAIT_POLLING
5053
await ws.send_text(f"Connected to session {session_id} as user {user_id}. You can start collaborating!")
51-
elif isinstance(msg, DisconnectMessage):
54+
elif isinstance(msg, CollaboratorDisconnectMessage):
5255
user_status = UserState.AWAIT_CONNECT
5356
await ws.send_text(f"Collaborator disconnected, awaiting reconnection...")
5457
elif isinstance(msg, DisplayMessage):
@@ -58,12 +61,12 @@ async def receiver():
5861

5962
await asyncio.sleep(0.1)
6063

61-
except WebSocketDisconnect as e:
62-
try:
63-
print("handle disconnect")
64-
await connection_manager.on_disconnect(session_id, user_id)
65-
except ValueError as e:
66-
print(f"Error handling disconnect: {e}")
64+
# except WebSocketDisconnect as e:
65+
# try:
66+
# print("handle disconnect")
67+
# await connection_manager.on_disconnect(session_id, user_id)
68+
# except ValueError as e:
69+
# print(f"Error handling disconnect: {e}")
6770
finally:
6871
receiver_task.cancel()
6972

0 commit comments

Comments
 (0)