def send_jsonified(self, msg, stats=True): """Send JSON-encoded message `msg` JSON encoded string to send `stats` If set to True, will update statistics after operation completes """ msg = bytes_to_str(msg) if self._immediate_flush: if self.handler and self.handler.active and not self.send_queue: # Send message right away self.handler.send_pack('a[%s]' % msg) else: if self.send_queue: self.send_queue += ',' self.send_queue += msg self.flush() else: if self.send_queue: self.send_queue += ',' self.send_queue += msg if not self._pending_flush: self.server.io_loop.add_callback(self.flush) self._pending_flush = True if stats: self.stats.on_pack_sent(1)
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 post(self, session_id): self.preflight() self.handle_session_cookie() self.disable_cache() session = self._get_session(session_id) if session is None or session.is_closed: self.set_status(404) return data = bytes_to_str(self.request.body) ctype = self.request.headers.get('Content-Type', '').lower() if ctype == 'application/x-www-form-urlencoded': if not data.startswith('d='): LOG.exception('jsonp_send: Invalid payload.') self.write("Payload expected.") self.set_status(500) return data = unquote_plus(data[2:]) if not data: LOG.debug('jsonp_send: Payload expected.') self.write("Payload expected.") self.set_status(500) return try: messages = proto.json_decode(data) except Exception: # TODO: Proper error handling LOG.debug('jsonp_send: Invalid json encoding') self.write("Broken JSON encoding.") self.set_status(500) return try: session.on_messages(messages) except Exception: LOG.exception('jsonp_send: on_message() failed') session.close() self.write('Message handler failed.') self.set_status(500) return self.write('ok') self.set_header('Content-Type', 'text/plain; charset=UTF-8') self.set_status(200)
def on_message(self, message): # SockJS requires that empty messages should be ignored if not message or not self.session: return try: msg = proto.json_decode(bytes_to_str(message)) if isinstance(msg, list): self.session.on_messages(msg) else: self.session.on_messages((msg, )) except Exception: LOG.exception('WebSocket') # Close session on exception #self.session.close() # Close running connection self.abort_connection()
def on_message(self, message): # SockJS requires that empty messages should be ignored if not message or not self.session: return try: msg = proto.json_decode(bytes_to_str(message)) if isinstance(msg, list): self.session.on_messages(msg) else: self.session.on_messages((msg,)) except Exception: LOG.exception('WebSocket') # Close session on exception #self.session.close() # Close running connection self.abort_connection()
def post(self, session_id): self.preflight() self.handle_session_cookie() self.disable_cache() session = self._get_session(session_id) if session is None or session.is_closed: self.set_status(404) return data = self.request.body if not data: self.write("Payload expected.") self.set_status(500) return try: messages = proto.json_decode(bytes_to_str(data)) except: # TODO: Proper error handling self.write("Broken JSON encoding.") self.set_status(500) return try: session.on_messages(messages) except Exception: LOG.exception('XHR incoming') session.close() self.set_status(500) return self.set_status(204) self.set_header('Content-Type', 'text/plain; charset=UTF-8')
def post(self, session_id): self.preflight() self.handle_session_cookie() self.disable_cache() session = self._get_session(session_id) if session is None or session.is_closed: self.set_status(404) return data = self.request.body if not data: self.write("Payload expected.") self.set_status(500) return try: messages = proto.json_decode(bytes_to_str(data)) except Exception: # TODO: Proper error handling self.write("Broken JSON encoding.") self.set_status(500) return try: session.on_messages(messages) except Exception: LOG.exception('XHR incoming') session.close() self.set_status(500) return self.set_status(204) self.set_header('Content-Type', 'text/plain; charset=UTF-8')