def connect( sockid: "socket", clientid: "clientids", cleansession: "boolean", #willmsg : "willmsgs", # username : "******", password : "******" ) -> "connackrc": sock = state.sockets[sockid] connect = MQTTV3.Connects() connect.ClientIdentifier = clientid connect.CleanSession = cleansession connect.KeepAliveTimer = 60 #if username: # connect.usernameFlag = True # connect.username = username #if password: # connect.passwordFlag = True # connect.password = password #if willmsg: # connect.willFlag = True # connect.WillQoS = 0 # connect.WillRETAIN = 0 # connect.WillTopic = None # UTF-8 # connect.WillMessage = None # binary sock.send(connect.pack()) time.sleep(0.5) checksocket(sockid) response = state.clientlist[sockid].packets.pop( 0) #MQTTV3.unpackPacket(MQTTV3.getPacket(sock)) logger.debug("+++connect response", response) if response == None or response.returnCode not in [0, 2]: raise Exception("Return code " + str(response.returnCode) + " in connack") return response.returnCode
def connect2(self, host, port, cleansession, keepalive, newsocket, protocolName, willFlag, willTopic, willMessage, willQoS, willRetain, username, password): if newsocket: try: self.sock.close() except: pass self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.settimeout(.5) self.sock.connect((host, port)) connect = MQTTV3.Connects() #mqtt login connect.ClientIdentifier = self.clientid connect.CleanSession = cleansession connect.KeepAliveTimer = keepalive if protocolName: connect.ProtocolName = protocolName if willFlag: connect.WillFlag = True connect.WillTopic = willTopic connect.WillMessage = willMessage connect.WillQoS = willQoS connect.WillRETAIN = willRetain if username: connect.usernameFlag = True connect.username = username if password: connect.passwordFlag = True connect.password = password sendtosocket(self.sock, connect.pack()) response = MQTTV3.unpackPacket(MQTTV3.getPacket(self.sock)) if not response: raise MQTTV3.MQTTException( "connect failed - socket closed, no connack") assert response.fh.MessageType == MQTTV3.CONNACK self.cleansession = cleansession assert response.returnCode == 0, "connect was %s" % str(response) if self.cleansession or self.__receiver == None: self.__receiver = internal.Receivers(self.sock) else: self.__receiver.socket = self.sock if self.callback: id = _thread.start_new_thread(self.__receiver, (self.callback, )) return response