main.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. # app.py
  2. from flask import Flask, render_template, request
  3. from flask_socketio import SocketIO, join_room, leave_room
  4. from flask_cors import CORS
  5. import logging
  6. app = Flask(__name__)
  7. CORS(app, resources={r"/*": {"origins": "*"}})
  8. app.config['SECRET_KEY'] = 'secret!'
  9. socketio = SocketIO(app, cors_allowed_origins="*", logger=True, engineio_logger=True)
  10. # 配置日志
  11. logging.basicConfig(level=logging.DEBUG)
  12. rooms = {}
  13. @socketio.on('connect')
  14. def on_connect():
  15. logging.info(f"Client connected: {request.sid}")
  16. @socketio.on('disconnect')
  17. def on_disconnect():
  18. logging.info(f"Client disconnected: {request.sid}")
  19. @socketio.on('join')
  20. def on_join(data):
  21. room = data['room']
  22. join_room(room)
  23. rooms[request.sid] = room
  24. logging.info(f"User {request.sid} joined room {room}")
  25. socketio.emit('user_joined', request.sid, room=room, skip_sid=request.sid)
  26. socketio.emit('message', {'type': 'system', 'msg': '新用户加入'}, room=room)
  27. @socketio.on('leave')
  28. def on_leave():
  29. room = rooms.get(request.sid)
  30. if room:
  31. leave_room(room)
  32. del rooms[request.sid]
  33. logging.info(f"User {request.sid} left room {room}")
  34. socketio.emit('user_left', request.sid, room=room)
  35. socketio.emit('message', {'type': 'system', 'msg': '用户离开'}, room=room)
  36. @socketio.on('offer')
  37. def handle_offer(data):
  38. data['sender'] = request.sid
  39. logging.info(f"Offer from {request.sid} to {data['target']}")
  40. socketio.emit('offer', data, room=data['target'])
  41. @socketio.on('answer')
  42. def handle_answer(data):
  43. data['sender'] = request.sid
  44. logging.info(f"Answer from {request.sid} to {data['target']}")
  45. socketio.emit('answer', data, room=data['target'])
  46. @socketio.on('candidate')
  47. def handle_candidate(data):
  48. data['sender'] = request.sid
  49. logging.info(f"ICE candidate from {request.sid} to {data['target']}")
  50. socketio.emit('candidate', data, room=data['target'])
  51. @app.route('/room/<room_id>')
  52. def room(room_id):
  53. return render_template('room.html', room_id=room_id)
  54. if __name__ == '__main__':
  55. socketio.run(app, host='0.0.0.0', port=15000, debug=True, allow_unsafe_werkzeug=True)