def broadcast(self, clients, msg): """Optimized `broadcast` implementation. Depending on type of the session, will json-encode message once and will call either `send_message` or `send_jsonifed`. `clients` Clients iterable `msg` Message to send """ json_msg = None count = 0 for c in clients: sess = c.session if not sess.is_closed: if sess.send_expects_json: if json_msg is None: json_msg = proto.json_encode(msg) sess.send_jsonified(json_msg, False) else: sess.send_message(msg, stats=False) count += 1 self.stats.on_pack_sent(count)
def send_message(self, msg, stats=True, binary=False): """Send or queue outgoing message `msg` Message to send `stats` If set to True, will update statistics after operation completes """ self.send_jsonified(proto.json_encode(bytes_to_str(msg)), stats)
def get(self): self.preflight() self.disable_cache() self.set_header('Content-Type', 'application/json; charset=UTF-8') options = {"websocket": self.server.websockets_enabled, "cookie_needed": self.server.cookie_needed, "origins": ['*:*'], "entropy": random.randint(0, MAXSIZE)} self.write(json_encode(options))
def get(self): self.preflight() self.disable_cache() self.set_header('Content-Type', 'application/json; charset=UTF-8') options = dict(websocket=self.server.websockets_enabled, cookie_needed=self.server.cookie_needed, origins=['*:*'], entropy=random.randint(0, MAXSIZE)) self.write(json_encode(options))
def send_pack(self, message, binary=False): if binary: raise Exception('binary not supported for HtmlFileTransport') # TODO: Just do escaping msg = '<script>\np(%s);\n</script>\r\n' % proto.json_encode(message) self.active = False try: self.notify_sent(len(message)) self.write(msg) self.flush(callback=self.send_complete) except IOError: # If connection dropped, make sure we close offending session instead # of propagating error all way up. self.session.delayed_close() self._detach()
def send_pack(self, message, binary=False): if binary: raise Exception('binary not supported for JSONPTransport') self.active = False try: # TODO: Just escape msg = '%s(%s);\r\n' % (self.callback, proto.json_encode(message)) self.set_header('Content-Type', 'application/javascript; charset=UTF-8') self.set_header('Content-Length', len(msg)) # TODO: Fix me self.set_header('Etag', 'dummy') self.write(msg) self.flush(callback=self.send_complete) except IOError: # If connection dropped, make sure we close offending session instead # of propagating error all way up. self.session.delayed_close()