diff --git a/app/room.py b/app/room.py index b20c1b0..09afe24 100644 --- a/app/room.py +++ b/app/room.py @@ -84,7 +84,14 @@ class RoomManager: try: await self.send_student_snapshot(websocket, sid, identity) while True: - data = await websocket.receive_json() + try: + data = await websocket.receive_json() + except json.JSONDecodeError: + try: + await websocket.send_json({"type": "error", "code": "bad_message", "message": "Invalid JSON"}) + except (WebSocketDisconnect, RuntimeError): + break + continue msg_type = data.get("type") if msg_type == "ping": await websocket.send_json({"type": "pong"}) @@ -93,7 +100,7 @@ class RoomManager: await websocket.send_json(ack) else: await websocket.send_json({"type": "error", "code": "bad_message", "message": "Unknown message type"}) - except WebSocketDisconnect: + except (WebSocketDisconnect, RuntimeError): pass finally: self.student_clients[sid].pop(websocket, None) @@ -104,7 +111,14 @@ class RoomManager: try: await self.send_instructor_snapshot(websocket, sid) while True: - data = await websocket.receive_json() + try: + data = await websocket.receive_json() + except json.JSONDecodeError: + try: + await websocket.send_json({"type": "error", "code": "bad_message", "message": "Invalid JSON"}) + except (WebSocketDisconnect, RuntimeError): + break + continue msg_type = data.get("type") if msg_type == "ping": await websocket.send_json({"type": "pong"}) @@ -118,7 +132,7 @@ class RoomManager: await self.end_session(sid) else: await websocket.send_json({"type": "error", "code": "bad_message", "message": "Unknown message type"}) - except WebSocketDisconnect: + except (WebSocketDisconnect, RuntimeError): pass finally: self.instructor_clients[sid].discard(websocket)