12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- # 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="*", 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'])
- @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)
|