def reply_client(client: websocket.WebSocketHandler, data: Union[bytes, str]) -> None: try: client.write_message( data if isinstance(data, bytes) else data.encode("utf-8")) except websocket.WebSocketClosedError as e: logger.warning("Tried to reply to a closed connection")
def unlocked(): """ Context manager which unlocks a Document and dispatches ModelChangedEvents triggered in the context body to all sockets on current sessions. """ curdoc = state.curdoc if curdoc is None or curdoc.session_context is None or curdoc.session_context.session is None: yield return from tornado.websocket import WebSocketHandler connections = curdoc.session_context.session._subscribed_connections hold = curdoc.callbacks.hold_value if hold: old_events = list(curdoc.callbacks._held_events) else: old_events = [] curdoc.hold() try: yield locked = False for conn in connections: socket = conn._socket if hasattr(socket, 'write_lock') and socket.write_lock._block._value == 0: locked = True break events = [] for event in curdoc.callbacks._held_events: if not isinstance( event, ModelChangedEvent) or event in old_events or locked: events.append(event) continue for conn in connections: socket = conn._socket ws_conn = getattr(socket, 'ws_connection', False) if (not hasattr(socket, 'write_message') or ws_conn is None or (ws_conn and ws_conn.is_closing())): continue msg = conn.protocol.create('PATCH-DOC', [event]) WebSocketHandler.write_message(socket, msg.header_json) WebSocketHandler.write_message(socket, msg.metadata_json) WebSocketHandler.write_message(socket, msg.content_json) for header, payload in msg._buffers: WebSocketHandler.write_message(socket, header) WebSocketHandler.write_message(socket, payload, binary=True) curdoc.callbacks._held_events = events finally: if hold: return try: curdoc.unhold() except RuntimeError: curdoc.add_next_tick_callback( partial(_dispatch_events, curdoc, events))
def _execute(self, transforms, *args, **kwargs): ''' select base handler for self ''' with LogicContext(): if isinstance(self, WebSocketHandler): WebSocketHandler._execute(self, transforms, *args, **kwargs) elif isinstance(self, RequestHandler): RequestHandler._execute(self, transforms, *args, **kwargs)
def __init__(self, *args, **kw): print 'Presence handler created' WebSocketHandler.__init__(self, *args, **kw) self._user = None self._closed = False IOLoop.instance().add_timeout(time.time() + 5, self._check_notifications)
def __init__(self, application, request): WebSocketHandler.__init__(self, application, request) self._current_user = None self.middleware_manager = MiddlewareManager(self) self.db = Mongo.db.ui #@UndefinedVariable #run all middleware request hooks self.middleware_manager.run_request_hooks()
def __init__(self, *args, **kwds): #--------------------------------- WebSocketHandler.__init__(self, *args, **kwds) ## Can't use super() as class is not ## correctly initialised. self._parser = stream.BlockParser(self.got_block, check=stream.Checksum.CHECK) self._repo = options.repository self._capabilities = [ ]
def _execute(self, transforms, *args, **kwargs): ''' select base handler for self ''' with LogicContext(): get_context().handler = self if isinstance(self, WebSocketHandler): WebSocketHandler._execute(self, transforms, *args, **kwargs) elif isinstance(self, RequestHandler): RequestHandler._execute(self, transforms, *args, **kwargs)
def __init__(self, application, request, **kwargs): WebSocketHandler.__init__(self, application, request, **kwargs) self.active_game = None self.player_number = None self.ping_interval = 10 self.message_handlers = { 'move': self.handle_move, 'chat': self.handle_chat, 'flee': self.handle_flee }
def _execute(self, *args, **kwargs): """Does the exact same thing like WebSocketHandler._execute() for GET requests. Otherwise, acts like RequestHandler. """ if self.request.method == 'GET': # dispatch to WebSocketHandler WebSocketHandler._execute(self, *args, **kwargs) else: # remap unsupported WebSocketHandler methods back to RequestHandler # the __get__(self, DualHandler) trick is used to bind the methods # back to the object, otherwise it's unbound for method in ["write", "redirect", "set_header", "send_error", "set_cookie", "set_status", "flush", "finish"]: setattr(self, method, getattr(RequestHandler, method).__get__( self, DualHandler)) # dispatch to RequestHandler RequestHandler._execute(self, *args, **kwargs)
def __init__(self, application, request): WebSocketHandler.__init__(self, application, request) HTTPHandler.__init__(self, application, request)
def close(self): """ Remove my player and close socket. """ self._player = None WebSocketHandler.close(self)
def __init__(self, *args, **kw): WebSocketHandler.__init__(self, *args, **kw) self.application = None
def _execute(self, transforms, *args, **kwargs): with LogicContext(): if isinstance(self, WebSocketHandler): WebSocketHandler._execute(self, transforms, *args, **kwargs) elif isinstance(self, RequestHandler): RequestHandler._execute(self, transforms, *args, **kwargs)
def __init__(self, *args, **kwargs): self.ioloop = IOLoop.instance() WebSocketHandler.__init__(self, *args,**kwargs)
def close(self, *args): try: WebSocketHandler.close(self, *args) except TypeError: WebSocketHandler.close(self) # older Tornado
def __init__(self, rpc_handler, *args, **kwargs): if not issubclass(rpc_handler, RpcHandler): raise Exception("Argument rpc_handler must be a subclass of " + "RpcHandler") self.rpc_handler = rpc_handler() WebSocketHandler.__init__(self, *args, **kwargs)
def __init__(self, *args, **kwargs): print('>>> create new handler instance') return WebSocketHandler.__init__(self, *args, **kwargs)
def close(self, *args): #---------------------- if self.ws_connection is not None: WebSocketHandler.close(self, *args)
def get(self, *args, **kwargs): WebSocketHandler.get(self, *args, **kwargs)
def __init__(self, application, request, **kwargs): WebSocketHandler.__init__(self, application, request, **kwargs) self.io_loop = IOLoop.instance() self.pub = MQPub(zmq.Context(), 'admin')
def log_exception(self, typ, value, tb): """Logs uncaught exceptions. This overrides the method in WebSocketHandler not to log exceptions derived from Ret. """ if not isinstance(value, Ret): WebSocketHandler.log_exception(self, typ, value, tb)
def __init__(self, application, request, **kwargs): WebSocketHandler.__init__(self, application, request, **kwargs) self.io_loop = IOLoop.instance()
def __init__(self, application, request, **kwds): ControllerAddon.__init__(self, application, request, **kwds) WebSocketHandler.__init__(self, application, request, **kwds) self.io_loop = IOLoop.current(False)
def __init__(self, application, request, **kwargs): WebSocketHandler.__init__(self, application, request, **kwargs) self._player = None
def __init__(self, application, request, **kwargs): WebSocketHandler.__init__(self, application, request, **kwargs) self.io_loop = IOLoop.current() self.logger = logging.getLogger('tornado.application') self.user_id = None
def __init__(self, *args, **kwargs): self.ioloop = IOLoop.instance() WebSocketHandler.__init__(self, *args, **kwargs)
def close(self): WebSocketHandler.close(self)
def __init__(self, *args, **kwargs): BaseWebSocket.__init__(self, *args, **kwargs) self._session = None self._channel_table[self.__hash__()] = self
def __init__(self, application, request, **kwargs): WebSocketHandler.__init__(self, application, request, **kwargs)
def initialize(self, worker=True): WebSocketHandler.initialize(self) self.worker = worker self.callbacks = {} self.requests = [] self.closing = False
def __init__(self, application, request, **kwargs): WebSocketHandler.__init__(self, application, request, **kwargs) self.login = False
def __init__(self, server, *args): WebSocketHandler.__init__(self, *args) self.server = server
def _execute(self, transforms, *args, **kwargs): with LogicContext(handler=self): if isinstance(self,WebSocketHandler): WebSocketHandler._execute(self,transforms, *args, **kwargs) elif isinstance(self,RequestHandler): RequestHandler._execute(self,transforms, *args, **kwargs)
def __init__(self, application, request): WebSocketHandler.__init__(self, application, request) self.id = str(random.random())[2:]