tornado.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import json
  2. import tornado
  3. import tornado.websocket
  4. from .. import project_dir
  5. from ..framework import WebIOSession
  6. STATIC_PATH = '%s/html' % project_dir
  7. def ws_handler(coro_func, debug=True):
  8. class WSHandler(tornado.websocket.WebSocketHandler):
  9. def check_origin(self, origin):
  10. return True
  11. def get_compression_options(self):
  12. # Non-None enables compression with default options.
  13. return {}
  14. def on_coro_msg(self, controller):
  15. while controller.unhandled_server_msgs:
  16. msg = controller.unhandled_server_msgs.pop()
  17. self.write_message(json.dumps(msg))
  18. def open(self):
  19. print("WebSocket opened")
  20. self.set_nodelay(True)
  21. self.controller = WebIOSession(coro_func, on_coro_msg=self.on_coro_msg, on_session_close=self.close)
  22. def on_message(self, message):
  23. # print('on_message', message)
  24. data = json.loads(message)
  25. self.controller.send_client_msg(data)
  26. def on_close(self):
  27. self.controller.close(no_session_close_callback=True)
  28. print("WebSocket closed")
  29. return WSHandler