mike23415 commited on
Commit
e3e8104
·
verified ·
1 Parent(s): e460795

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +29 -23
app.py CHANGED
@@ -874,6 +874,7 @@ def handle_join_chat(data):
874
  "role": role,
875
  "receiver_number": data.get('receiver_number'),
876
  "public_key": public_key,
 
877
  "joined_at": time.time(),
878
  "last_seen": time.time()
879
  }
@@ -986,21 +987,22 @@ def handle_leave_chat(data):
986
 
987
  if room_id in CHAT_ROOMS and session_id in CHAT_ROOMS[room_id]["active_sessions"]:
988
  session = CHAT_ROOMS[room_id]["active_sessions"][session_id]
989
- del CHAT_ROOMS[room_id]["active_sessions"][session_id]
990
 
991
  # If admin left and burn_on_admin_exit is true
992
  if session["role"] == "admin" and CHAT_ROOMS[room_id]["settings"]["burn_on_admin_exit"]:
993
  emit('room_closing', {'reason': 'Admin left the room'}, room=room_id)
994
  del CHAT_ROOMS[room_id]
995
  else:
996
- # Notify everyone in the room (including self, so they see the message before leaving)
997
  emit('user_left', {
998
  'session_id': session_id, # NEW: Include session_id
999
  'role': session["role"],
1000
  'receiver_number': session.get("receiver_number"),
1001
- 'active_count': len(CHAT_ROOMS[room_id]["active_sessions"])
1002
- }, room=room_id) # Send to everyone including sender
1003
 
 
 
1004
  leave_room(room_id)
1005
 
1006
  @app.route("/api/auth/signup", methods=["POST"])
@@ -1505,26 +1507,30 @@ def handle_disconnect():
1505
  print(f"👤 User disconnected: {username_hash[:8]}...")
1506
 
1507
  # Remove from chat rooms
 
1508
  for room_id, room in list(CHAT_ROOMS.items()):
1509
- if username_hash in [s for s_id, s in room['active_sessions'].items()]:
1510
- # Find and remove session
1511
- for session_id, session in list(room['active_sessions'].items()):
1512
- if session.get('username_hash') == username_hash or \
1513
- (session['role'] == 'admin' and room['admin_session'] == session_id):
1514
-
1515
- # If admin left, close room
1516
- if session['role'] == 'admin' and room['settings'].get('burn_on_admin_exit', True):
1517
- socketio.emit('room_closing', {'reason': 'Admin disconnected'}, room=room_id)
1518
- if room_id in CHAT_MESSAGES:
1519
- del CHAT_MESSAGES[room_id]
1520
- del CHAT_ROOMS[room_id]
1521
- else:
1522
- del room['active_sessions'][session_id]
1523
- socketio.emit('user_left', {
1524
- 'role': session['role'],
1525
- 'receiver_number': session.get('receiver_number'),
1526
- 'active_count': len(room['active_sessions'])
1527
- }, room=room_id)
 
 
 
1528
 
1529
  # Remove from screen share rooms
1530
  for room_id, room in list(SCREEN_SHARE_ROOMS.items()):
 
874
  "role": role,
875
  "receiver_number": data.get('receiver_number'),
876
  "public_key": public_key,
877
+ "socket_id": request.sid, # NEW: Store socket ID
878
  "joined_at": time.time(),
879
  "last_seen": time.time()
880
  }
 
987
 
988
  if room_id in CHAT_ROOMS and session_id in CHAT_ROOMS[room_id]["active_sessions"]:
989
  session = CHAT_ROOMS[room_id]["active_sessions"][session_id]
 
990
 
991
  # If admin left and burn_on_admin_exit is true
992
  if session["role"] == "admin" and CHAT_ROOMS[room_id]["settings"]["burn_on_admin_exit"]:
993
  emit('room_closing', {'reason': 'Admin left the room'}, room=room_id)
994
  del CHAT_ROOMS[room_id]
995
  else:
996
+ # CRITICAL: Emit BEFORE deleting and leaving
997
  emit('user_left', {
998
  'session_id': session_id, # NEW: Include session_id
999
  'role': session["role"],
1000
  'receiver_number': session.get("receiver_number"),
1001
+ 'active_count': len(CHAT_ROOMS[room_id]["active_sessions"]) - 1 # Count after this person leaves
1002
+ }, room=room_id) # Send to ENTIRE room (including sender)
1003
 
1004
+ # Delete AFTER emitting
1005
+ del CHAT_ROOMS[room_id]["active_sessions"][session_id]
1006
  leave_room(room_id)
1007
 
1008
  @app.route("/api/auth/signup", methods=["POST"])
 
1507
  print(f"👤 User disconnected: {username_hash[:8]}...")
1508
 
1509
  # Remove from chat rooms
1510
+ # Remove from chat rooms and notify others
1511
  for room_id, room in list(CHAT_ROOMS.items()):
1512
+ for session_id, session in list(room['active_sessions'].items()):
1513
+ # Check if this session matches the disconnected socket
1514
+ if session.get('socket_id') == request.sid:
1515
+ print(f"[Disconnect] User {session_id} disconnected from room {room_id}")
1516
+
1517
+ # CRITICAL: Notify BEFORE deleting
1518
+ socketio.emit('user_left', {
1519
+ 'session_id': session_id,
1520
+ 'role': session['role'],
1521
+ 'receiver_number': session.get('receiver_number'),
1522
+ 'active_count': len(room['active_sessions']) - 1
1523
+ }, room=room_id)
1524
+
1525
+ # If admin disconnected, close room
1526
+ if session['role'] == 'admin' and room['settings'].get('burn_on_admin_exit', True):
1527
+ print(f"[Disconnect] Admin disconnected, closing room {room_id}")
1528
+ socketio.emit('room_closing', {'reason': 'Admin disconnected'}, room=room_id)
1529
+ del CHAT_ROOMS[room_id]
1530
+ else:
1531
+ del room['active_sessions'][session_id]
1532
+
1533
+ break
1534
 
1535
  # Remove from screen share rooms
1536
  for room_id, room in list(SCREEN_SHARE_ROOMS.items()):