def _on_data(self, data, **kwargs): self.last_recv_timestamp = time.time() frame, data = protocol.unpack_response(data) if frame == protocol.FRAME_TYPE_MESSAGE: self.last_msg_timestamp = time.time() self.in_flight += 1 message = protocol.decode_message(data) message.on(event.FINISH, self._on_message_finish) message.on(event.REQUEUE, self._on_message_requeue) message.on(event.TOUCH, self._on_message_touch) self.trigger(event.MESSAGE, conn=self, message=message) elif frame == protocol.FRAME_TYPE_RESPONSE and data == b'_heartbeat_': self.send(protocol.nop()) self.trigger(event.HEARTBEAT, conn=self) elif frame == protocol.FRAME_TYPE_RESPONSE: self.trigger(event.RESPONSE, conn=self, data=data) elif frame == protocol.FRAME_TYPE_ERROR: self.trigger(event.ERROR, conn=self, error=protocol.Error(data))