| from datetime import datetime |
| from flask_socketio import SocketIO, join_room, leave_room, emit |
| from chat.manager import add_user_to_room, remove_user_from_room, get_room_members |
|
|
| |
| socketio = SocketIO(cors_allowed_origins="*") |
|
|
| |
| message_history = {} |
|
|
|
|
| |
| |
| |
| @socketio.on('connect') |
| def on_connect(): |
| from flask import request |
| print(f"[+] Client connected: {request.sid}") |
|
|
|
|
| |
| |
| |
| @socketio.on('join_room') |
| def on_join(data): |
| from flask import request |
| room = data.get('room') |
| if not room: |
| emit('error', {'message': 'Room name is required'}) |
| return |
|
|
| sid = request.sid |
| join_room(room) |
| add_user_to_room(room, sid) |
|
|
| members = len(get_room_members(room)) |
| print(f"[+] {sid} joined room '{room}' ({members} members)") |
|
|
| |
| history = message_history.get(room, []) |
| emit('room_joined', { |
| 'room': room, |
| 'message': f"You joined room '{room}'", |
| 'history': history[-20:] |
| }) |
|
|
| |
| emit('user_joined', { |
| 'message': f"A new user joined '{room}'", |
| 'members': members |
| }, to=room, include_self=False) |
|
|
|
|
| |
| |
| |
| @socketio.on('send_message') |
| def on_message(data): |
| from flask import request |
| room = data.get('room') |
| message = data.get('message', '').strip() |
|
|
| if not room or not message: |
| emit('error', {'message': 'Room and message are required'}) |
| return |
|
|
| payload = { |
| 'message': message, |
| 'timestamp': datetime.now().strftime('%Y-%m-%d %H:%M:%S'), |
| 'sender': request.sid[:8] |
| } |
|
|
| |
| if room not in message_history: |
| message_history[room] = [] |
| message_history[room].append(payload) |
|
|
| |
| emit('receive_message', payload, to=room) |
| print(f"[MSG] room='{room}' | {payload['sender']}: {message}") |
|
|
|
|
| |
| |
| |
| @socketio.on('disconnect') |
| def on_disconnect(): |
| from flask import request |
| sid = request.sid |
| remove_user_from_room(sid) |
| print(f"[-] Client disconnected: {sid}") |
|
|