def message_received(self, frame, delay=0): tmi = TReadOnlyBuffer(frame) iprot = THeaderProtocol(tmi) (fname, mtype, rseqid) = iprot.readMessageBegin() if delay: yield from asyncio.sleep(delay) else: try: timeout_task = self.pending_tasks.pop(rseqid) except KeyError: # Task doesn't have a timeout or has already been cancelled # and pruned from `pending_tasks`. pass else: timeout_task.cancel() method = getattr(self.client, "recv_" + fname.decode(), None) if method is None: logger.error("Method %r is not supported", fname) self.transport.abort() else: try: method(iprot, mtype, rseqid) except (asyncio.futures.InvalidStateError, asyncio.CancelledError) as e: logger.warning("Method %r cancelled: %s", fname, str(e))
def message_received(self, frame): # Note: we are using a single `prot` for in and out so that # we can support legacy clients that only understand FRAMED. # The discovery of what the client supports happens in iprot's # transport so we have to reuse a single one here. buf = TReadWriteBuffer(frame) prot = THeaderProtocol(buf) try: yield from self.processor.process( prot, prot, self.server_context, ) msg = buf.getvalue() if len(msg) > 0: self.transport.write(msg) except TException as e: logger.warning("TException while processing request: %s", str(e)) msg = buf.getvalue() if len(msg) > 0: self.transport.write(msg) except asyncio.CancelledError: self.transport.close() except BaseException as e: logger.error("Exception while processing request: %s", str(e)) logger.error(traceback.format_exc()) self.transport.close()
def message_received(self, frame, delay=0): tmi = TReadOnlyBuffer(frame) iprot = THeaderProtocol(tmi) (fname, mtype, seqid) = iprot.readMessageBegin() if delay: yield from asyncio.sleep(delay, loop=self.loop) else: try: timeout_task = self.pending_tasks.pop(seqid) except KeyError: # Task doesn't have a timeout or has already been cancelled # and pruned from `pending_tasks`. pass else: timeout_task.cancel() self._handle_message_received(iprot, fname, mtype, seqid)