tornado.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import json
  2. import tornado
  3. import tornado.websocket
  4. from ..framework import WebIOSession
  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 on_coro_msg(self, controller):
  13. while controller.unhandled_server_msgs:
  14. msg = controller.unhandled_server_msgs.pop()
  15. self.write_message(json.dumps(msg))
  16. def open(self):
  17. print("WebSocket opened")
  18. self.set_nodelay(True)
  19. self.controller = WebIOSession(coro_func, on_coro_msg=self.on_coro_msg, 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_msg(data)
  24. def on_close(self):
  25. self.controller.close(no_session_close_callback=True)
  26. print("WebSocket closed")
  27. return WSHandler