tornado.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import json
  2. import tornado
  3. import tornado.websocket
  4. from ..session import AsyncBasedSession
  5. def webio_handler(coro_func, debug=True):
  6. class WSHandler(tornado.websocket.WebSocketHandler):
  7. def check_origin(self, origin):
  8. return True
  9. def get_compression_options(self):
  10. # Non-None enables compression with default options.
  11. return {}
  12. def send_msg_to_client(self, controller: AsyncBasedSession):
  13. for msg in controller.get_task_messages():
  14. self.write_message(json.dumps(msg))
  15. def open(self):
  16. print("WebSocket opened")
  17. self.set_nodelay(True)
  18. self.controller = AsyncBasedSession(coro_func, on_task_message=self.send_msg_to_client,
  19. on_session_close=self.close)
  20. def on_message(self, message):
  21. # print('on_message', message)
  22. data = json.loads(message)
  23. self.controller.send_client_event(data)
  24. def on_close(self):
  25. self.controller.close(no_session_close_callback=True)
  26. print("WebSocket closed")
  27. return WSHandler