def handle_publish(self): """Handle incoming PUBLISH packet.""" self.logger.debug("PUBLISH received") header = self.in_packet.command message = NyamukMsgAll() message.direction = NC.DIRECTION_IN message.dup = (header & 0x08) >> 3 message.msg.qos = (header & 0x06) >> 1 message.msg.retain = (header & 0x01) rc, ba = self.in_packet.read_string() message.msg.topic = ba.decode() if rc != NC.ERR_SUCCESS: return rc #fix_sub_topic TODO if message.msg.qos > 0: rc, word = self.in_packet.read_uint16() message.msg.mid = word if rc != NC.ERR_SUCCESS: return rc message.msg.payloadlen = self.in_packet.remaining_length - self.in_packet.pos if message.msg.payloadlen > 0: rc, message.msg.payload = self.in_packet.read_bytes(message.msg.payloadlen) if rc != NC.ERR_SUCCESS: return rc self.logger.debug("Received PUBLISH(dup = %d,qos=%d,retain=%s",message.dup, message.msg.qos, message.msg.retain) self.logger.debug("\tmid=%d, topic=%s, payloadlen=%d", message.msg.mid, message.msg.topic, message.msg.payloadlen) message.timestamp = time.time() qos = message.msg.qos if qos == 0: if self.on_message is not None: self.in_callback = True self.on_message(self, message.msg) self.in_callback = False else: self.in_pub_msg.append(message.msg) return NC.ERR_SUCCESS elif qos == 1 or qos == 2: self.logger.error("handle_publish. Unsupported QoS = 1 or QoS = 2") sys.exit(-1) else: return NC.ERR_PROTOCOL return NC.ERR_SUCCESS
def handle_publish(self): """Handle incoming PUBLISH packet.""" self.logger.debug("PUBLISH received") header = self.in_packet.command message = NyamukMsgAll() message.direction = NC.DIRECTION_IN message.dup = (header & 0x08) >> 3 message.msg.qos = (header & 0x06) >> 1 message.msg.retain = (header & 0x01) ret, ba_data = self.in_packet.read_string() message.msg.topic = ba_data.decode() if ret != NC.ERR_SUCCESS: return ret #fix_sub_topic TODO if message.msg.qos > 0: ret, word = self.in_packet.read_uint16() message.msg.mid = word if ret != NC.ERR_SUCCESS: return ret message.msg.payloadlen = self.in_packet.remaining_length - self.in_packet.pos if message.msg.payloadlen > 0: ret, message.msg.payload = self.in_packet.read_bytes( message.msg.payloadlen) if ret != NC.ERR_SUCCESS: return ret self.logger.debug("Received PUBLISH(dup = %d,qos=%d,retain=%s", message.dup, message.msg.qos, message.msg.retain) self.logger.debug("\tmid=%d, topic=%s, payloadlen=%d", message.msg.mid, message.msg.topic, message.msg.payloadlen) message.timestamp = time.time() qos = message.msg.qos if qos == 0: evt = event.EventPublish(message.msg) self.push_event(evt) return NC.ERR_SUCCESS elif qos == 1 or qos == 2: self.logger.error("handle_publish. Unsupported QoS = 1 or QoS = 2") sys.exit(-1) else: return NC.ERR_PROTOCOL return NC.ERR_SUCCESS
def handle_publish(self): """Handle incoming PUBLISH packet.""" self.logger.debug("PUBLISH received") header = self.in_packet.command message = NyamukMsgAll() message.direction = NC.DIRECTION_IN message.dup = (header & 0x08) >> 3 message.msg.qos = (header & 0x06) >> 1 message.msg.retain = (header & 0x01) ret, ba_data = self.in_packet.read_string() message.msg.topic = ba_data.decode() if ret != NC.ERR_SUCCESS: return ret #fix_sub_topic TODO if message.msg.qos > 0: ret, word = self.in_packet.read_uint16() message.msg.mid = word if ret != NC.ERR_SUCCESS: return ret message.msg.payloadlen = self.in_packet.remaining_length - self.in_packet.pos if message.msg.payloadlen > 0: ret, message.msg.payload = self.in_packet.read_bytes(message.msg.payloadlen) if ret != NC.ERR_SUCCESS: return ret self.logger.debug("Received PUBLISH(dup = %d,qos=%d,retain=%s", message.dup, message.msg.qos, message.msg.retain) self.logger.debug("\tmid=%d, topic=%s, payloadlen=%d", message.msg.mid, message.msg.topic, message.msg.payloadlen) message.timestamp = time.time() qos = message.msg.qos if qos == 0: evt = event.EventPublish(message.msg) self.push_event(evt) return NC.ERR_SUCCESS elif qos == 1 or qos == 2: self.logger.error("handle_publish. Unsupported QoS = 1 or QoS = 2") sys.exit(-1) else: return NC.ERR_PROTOCOL return NC.ERR_SUCCESS