main.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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('user_joined', request.sid, room=room, skip_sid=request.sid)
  14. socketio.emit('message', {'type': 'system', 'msg': '新用户加入'}, room=room)
  15. @socketio.on('leave')
  16. def on_leave():
  17. room = rooms.get(request.sid)
  18. if room:
  19. leave_room(room)
  20. del rooms[request.sid]
  21. socketio.emit('user_left', request.sid, room=room)
  22. socketio.emit('message', {'type': 'system', 'msg': '用户离开'}, room=room)
  23. @socketio.on('offer')
  24. def handle_offer(data):
  25. data['sender'] = request.sid
  26. socketio.emit('offer', data, room=data['target'])
  27. @socketio.on('answer')
  28. def handle_answer(data):
  29. data['sender'] = request.sid
  30. socketio.emit('answer', data, room=data['target'])
  31. @socketio.on('candidate')
  32. def handle_candidate(data):
  33. data['sender'] = request.sid
  34. socketio.emit('candidate', data, room=data['target'])
  35. @socketio.on('answer')
  36. def handle_answer(data):
  37. data['sender'] = request.sid
  38. # 发送给指定用户
  39. socketio.emit('answer', data, room=data['target'])
  40. @socketio.on('candidate')
  41. def handle_candidate(data):
  42. data['sender'] = request.sid
  43. socketio.emit('candidate', data, room=data['target'])
  44. @app.route('/room/<room_id>')
  45. def room(room_id):
  46. return render_template('room.html', room_id=room_id)
  47. if __name__ == '__main__':
  48. socketio.run(app, host='0.0.0.0', port=15000, debug=True, allow_unsafe_werkzeug=True)