def publishArrived(self, topic, msg, qos, retained=False): pub = MQTTV3.Publishes() logger.info("[MQTT-3.2.3-3] topic name must match the subscription's topic filter") pub.topicName = topic pub.data = msg pub.fh.QoS = qos pub.fh.RETAIN = retained if retained: logger.info("[MQTT-2.1.2-7] Last retained message on matching topics sent on subscribe") if pub.fh.RETAIN: logger.info("[MQTT-2.1.2-9] Set retained flag on retained messages") if qos == 2: pub.qos2state = "PUBREC" if qos in [1, 2]: pub.messageIdentifier = self.msgid logger.debug("client id: %d msgid: %d", self.id, self.msgid) if self.msgid == 65535: self.msgid = 1 else: self.msgid += 1 self.outbound.append(pub) self.outmsgs[pub.messageIdentifier] = pub logger.info("[MQTT-4.6.0-6] publish packets must be sent in order of receipt from any given client") if self.connected: respond(self.socket, pub) else: if qos == 0 and not self.broker.dropQoS0: self.outbound.append(pub) if qos in [1, 2]: logger.info("[MQTT-3.1.2-5] storing of QoS 1 and 2 messages for disconnected client %s", self.id)
def publish(sockid : "socket", packetid : "packetids", topic : "topics", payload : "payloads", qos : "QoSs", retained : "boolean"): sock = state.sockets[sockid] publish = MQTTV3.Publishes() publish.fh.QoS = qos publish.fh.RETAIN = retained publish.messageIdentifier = packetid publish.topicName = topic publish.data = payload sock.send(publish.pack()) checksocket(sockid) return publish.messageIdentifier
def publish(self, topic, payload, qos=0, retained=False): publish = MQTTV3.Publishes() publish.fh.QoS = qos publish.fh.RETAIN = retained if qos == 0: publish.messageIdentifier = 0 else: publish.messageIdentifier = self.__nextMsgid() if publish.fh.QoS == 2: publish.pubrec_received = False self.__receiver.outMsgs[publish.messageIdentifier] = publish publish.topicName = topic publish.data = payload sendtosocket(self.sock, publish.pack()) return publish.messageIdentifier