|
@@ -1,64 +1,67 @@
|
|
|
# app.py
|
|
|
from flask import Flask, render_template, request
|
|
|
from flask_socketio import SocketIO, join_room, leave_room
|
|
|
+from flask_cors import CORS
|
|
|
+import logging
|
|
|
|
|
|
app = Flask(__name__)
|
|
|
+CORS(app, resources={r"/*": {"origins": "*"}})
|
|
|
app.config['SECRET_KEY'] = 'secret!'
|
|
|
-socketio = SocketIO(app, cors_allowed_origins="*")
|
|
|
+socketio = SocketIO(app, cors_allowed_origins="*", logger=True, engineio_logger=True)
|
|
|
+
|
|
|
+# 配置日志
|
|
|
+logging.basicConfig(level=logging.DEBUG)
|
|
|
|
|
|
rooms = {}
|
|
|
|
|
|
+@socketio.on('connect')
|
|
|
+def on_connect():
|
|
|
+ logging.info(f"Client connected: {request.sid}")
|
|
|
+
|
|
|
+@socketio.on('disconnect')
|
|
|
+def on_disconnect():
|
|
|
+ logging.info(f"Client disconnected: {request.sid}")
|
|
|
|
|
|
@socketio.on('join')
|
|
|
def on_join(data):
|
|
|
room = data['room']
|
|
|
join_room(room)
|
|
|
rooms[request.sid] = room
|
|
|
+ logging.info(f"User {request.sid} joined room {room}")
|
|
|
socketio.emit('user_joined', request.sid, room=room, skip_sid=request.sid)
|
|
|
socketio.emit('message', {'type': 'system', 'msg': '新用户加入'}, room=room)
|
|
|
|
|
|
-
|
|
|
@socketio.on('leave')
|
|
|
def on_leave():
|
|
|
room = rooms.get(request.sid)
|
|
|
if room:
|
|
|
leave_room(room)
|
|
|
del rooms[request.sid]
|
|
|
+ logging.info(f"User {request.sid} left room {room}")
|
|
|
socketio.emit('user_left', request.sid, room=room)
|
|
|
socketio.emit('message', {'type': 'system', 'msg': '用户离开'}, room=room)
|
|
|
|
|
|
-
|
|
|
@socketio.on('offer')
|
|
|
def handle_offer(data):
|
|
|
data['sender'] = request.sid
|
|
|
+ logging.info(f"Offer from {request.sid} to {data['target']}")
|
|
|
socketio.emit('offer', data, room=data['target'])
|
|
|
|
|
|
@socketio.on('answer')
|
|
|
def handle_answer(data):
|
|
|
data['sender'] = request.sid
|
|
|
+ logging.info(f"Answer from {request.sid} to {data['target']}")
|
|
|
socketio.emit('answer', data, room=data['target'])
|
|
|
|
|
|
@socketio.on('candidate')
|
|
|
def handle_candidate(data):
|
|
|
data['sender'] = request.sid
|
|
|
+ logging.info(f"ICE candidate from {request.sid} to {data['target']}")
|
|
|
socketio.emit('candidate', data, room=data['target'])
|
|
|
|
|
|
-@socketio.on('answer')
|
|
|
-def handle_answer(data):
|
|
|
- data['sender'] = request.sid
|
|
|
- # 发送给指定用户
|
|
|
- socketio.emit('answer', data, room=data['target'])
|
|
|
-
|
|
|
-@socketio.on('candidate')
|
|
|
-def handle_candidate(data):
|
|
|
- data['sender'] = request.sid
|
|
|
- socketio.emit('candidate', data, room=data['target'])
|
|
|
-
|
|
|
-
|
|
|
@app.route('/room/<room_id>')
|
|
|
def room(room_id):
|
|
|
return render_template('room.html', room_id=room_id)
|
|
|
|
|
|
-
|
|
|
if __name__ == '__main__':
|
|
|
socketio.run(app, host='0.0.0.0', port=15000, debug=True, allow_unsafe_werkzeug=True)
|