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)