def __init__(self, url=None, ssl_opts=None, connect_immediately=True, max_wait=2): self.ws = None self.url = url or 'ws://127.0.0.1:{}/wsrpc'.format(config['cherrypy']['server.socket_port']) self._lock = RLock() self._callbacks = {} self._counter = count() self.ssl_opts = ssl_opts self._reconnect_attempts = 0 self._last_poll, self._last_reconnect_attempt = None, None self._dispatcher = Caller(self._dispatch, threads=1) self._checker = DaemonTask(self._check, interval=1) if connect_immediately: self.connect(max_wait=max_wait)
pass class WebSocketChecker(WebSocketTool): def __init__(self): cherrypy.Tool.__init__(self, 'before_handler', self.upgrade) def upgrade(self, **kwargs): try: kwargs['handler_cls'].check_authentication() except: raise cherrypy.HTTPError( 401, 'You must be logged in to establish a websocket connection.') else: return WebSocketTool.upgrade(self, **kwargs) cherrypy.tools.websockets = WebSocketChecker() websocket_plugin = WebSocketPlugin(cherrypy.engine) if hasattr(WebSocketPlugin.start, '__func__'): WebSocketPlugin.start.__func__.priority = 66 else: WebSocketPlugin.start.priority = 66 websocket_plugin.subscribe() broadcaster = Caller(WebSocketDispatcher.broadcast) responder = Caller(WebSocketDispatcher.handle_message, threads=config['ws.thread_pool'])