Exemple #1
0
 def disconnect(self, sock, packet=None, sendWillMessage=False, reasonCode=None, properties=None):
   logger.info("[MQTT-3.14.4-2] Client must not send any more packets after disconnect")
   me = self.clients[sock]
   me.clearTopicAliases()
   # Session expiry
   if packet and hasattr(packet.properties, "SessionExpiryInterval"):
     if me.sessionExpiryInterval == 0 and packet.properties.SessionExpiryInterval > 0:
       raise MQTTV5.ProtocolError("[MQTT-3.1.0-2] Can't reset SessionExpiryInterval from 0")
     else:
       me.sessionExpiryInterval = packet.properties.SessionExpiryInterval
   if reasonCode:
     resp = MQTTV5.Disconnects(reasonCode=reasonCode) # reasonCode is text
     if properties:
       resp.properties = properties
     respond(sock, resp)
   if sock in self.clients.keys():
     self.broker.disconnect(me.id, willMessage=sendWillMessage,
         sessionExpiryInterval=me.sessionExpiryInterval)
     del self.clients[sock]
   try:
     sock.shutdown(socket.SHUT_RDWR) # must call shutdown to close socket immediately
   except:
     pass # doesn't matter if the socket has been closed at the other end already
   try:
     sock.close()
   except:
     pass # doesn't matter if the socket has been closed at the other end already
Exemple #2
0
 def disconnect(self, properties=None):
     if self.__receiver:
         self.__receiver.stopping = True
         count = 0
         while (len(self.__receiver.inMsgs) > 0
                or len(self.__receiver.outMsgs) > 0
                ) and self.__receiver.paused == False:
             logger.debug("disconnecting %s %s", self.__receiver.inMsgs,
                          self.__receiver.outMsgs)
             time.sleep(.2)
             count += 1
             if count == 20:
                 break
         if self.__receiver and self.__receiver.paused == False:
             assert self.__receiver.inMsgs == {}, self.__receiver.inMsgs
             assert self.__receiver.outMsgs == {}, self.__receiver.outMsgs
     disconnect = MQTTV5.Disconnects()
     if properties:
         disconnect.properties = properties
     sendtosocket(self.sock, disconnect.pack())
     time.sleep(1.1)
     if self.sessionexpiry == 0:
         self.__receiver = None
     else:
         self.__receiver.socket = None
     self.sock.close()
     if self.__receiver:
         while self.__receiver.running:
             time.sleep(0.1)
         self.__receiver.stopping = False