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)
Beispiel #2
0
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
Beispiel #3
0
 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