main.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. # app.py
  2. from flask import Flask, render_template, request
  3. from flask_socketio import SocketIO, join_room, leave_room
  4. app = Flask(__name__)
  5. app.config['SECRET_KEY'] = 'secret!'
  6. socketio = SocketIO(app, cors_allowed_origins="*")
  7. rooms = {}
  8. @socketio.on('join')
  9. def on_join(data):
  10. room = data['room']
  11. join_room(room)
  12. rooms[request.sid] = room
  13. socketio.emit('message', {'type': 'system', 'msg': '新用户加入'}, room=room)
  14. @socketio.on('leave')
  15. def on_leave():
  16. room = rooms.get(request.sid)
  17. if room:
  18. leave_room(room)
  19. del rooms[request.sid]
  20. socketio.emit('message', {'type': 'system', 'msg': '用户离开'}, room=room)
  21. @socketio.on('offer')
  22. def handle_offer(data):
  23. # 添加发送者标识
  24. data['sender'] = request.sid
  25. # 广播给房间内其他用户
  26. socketio.emit('offer', data, room=data['room'], skip_sid=request.sid)
  27. @socketio.on('answer')
  28. def handle_answer(data):
  29. data['sender'] = request.sid
  30. # 发送给指定用户
  31. socketio.emit('answer', data, room=data['target'])
  32. @socketio.on('candidate')
  33. def handle_candidate(data):
  34. data['sender'] = request.sid
  35. socketio.emit('candidate', data, room=data['target'])
  36. @socketio.on('answer')
  37. def handle_answer(data):
  38. data['sender'] = request.sid
  39. # 发送给指定用户
  40. socketio.emit('answer', data, room=data['target'])
  41. @socketio.on('candidate')
  42. def handle_candidate(data):
  43. data['sender'] = request.sid
  44. socketio.emit('candidate', data, room=data['target'])
  45. @app.route('/room/<room_id>')
  46. def room(room_id):
  47. return render_template('room.html', room_id=room_id)
  48. if __name__ == '__main__':
  49. socketio.run(app, host='0.0.0.0', port=15000, debug=True, allow_unsafe_werkzeug=True)