diff --git a/hbmqtt/client/_client.py b/hbmqtt/client/_client.py index 6987627..7a2e2cb 100644 --- a/hbmqtt/client/_client.py +++ b/hbmqtt/client/_client.py @@ -242,7 +242,7 @@ class MQTTClient: self._session.local_address, self._session.local_port = self._session.writer.get_extra_info('sockname') # Send CONNECT packet and wait for CONNACK - packet = ConnectPacket.build_request_from_session(self._session) + packet = self._session.build_connect_packet() yield from packet.to_stream(self._session.writer) self.logger.debug(" -out-> " + repr(packet)) diff --git a/hbmqtt/mqtt/connect.py b/hbmqtt/mqtt/connect.py index ec8febe..f9410b7 100644 --- a/hbmqtt/mqtt/connect.py +++ b/hbmqtt/mqtt/connect.py @@ -4,7 +4,6 @@ from hbmqtt.mqtt.packet import MQTTPacket, MQTTFixedHeader, PacketType, MQTTVariableHeader, MQTTPayload from hbmqtt.codecs import * from hbmqtt.errors import MQTTException, CodecException, HBMQTTException, NoDataException -from hbmqtt.session import Session class ConnectVariableHeader(MQTTVariableHeader): @@ -209,36 +208,3 @@ class ConnectPacket(MQTTPacket): super().__init__(header) self.variable_header = vh self.payload = payload - - @classmethod - def build_request_from_session(cls, session: Session): - vh = ConnectVariableHeader() - payload = ConnectPayload() - - vh.keep_alive = session.keep_alive - vh.clean_session_flag = session.clean_session - vh.will_retain_flag = session.will_retain - payload.client_id = session.client_id - - if session.username: - vh.username_flag = True - payload.username = session.username - else: - vh.username_flag = False - - if session.password: - vh.password_flag = True - payload.password = session.password - else: - vh.password_flag = False - if session.will_flag: - vh.will_flag = True - vh.will_qos = session.will_qos - payload.will_message = session.will_message - payload.will_topic = session.will_topic - else: - vh.will_flag = False - - header = MQTTFixedHeader(PacketType.CONNECT, 0x00) - packet = cls(header, vh, payload) - return packet diff --git a/hbmqtt/session.py b/hbmqtt/session.py index 91fd813..9764864 100644 --- a/hbmqtt/session.py +++ b/hbmqtt/session.py @@ -6,6 +6,7 @@ import logging from enum import Enum from hbmqtt.mqtt.packet import PacketType from hbmqtt.mqtt.packet import MQTTFixedHeader +from hbmqtt.mqtt.connect import ConnectVariableHeader, ConnectPacket, ConnectPayload from hbmqtt.mqtt import packet_class from hbmqtt.errors import NoDataException @@ -48,6 +49,39 @@ class Session: self.incoming_queues[p] = asyncio.Queue() self.outgoing_queue = asyncio.Queue() + def build_connect_packet(self): + vh = ConnectVariableHeader() + payload = ConnectPayload() + + vh.keep_alive = self.keep_alive + vh.clean_session_flag = self.clean_session + vh.will_retain_flag = self.will_retain + payload.client_id = self.client_id + + if self.username: + vh.username_flag = True + payload.username = self.username + else: + vh.username_flag = False + + if self.password: + vh.password_flag = True + payload.password = self.password + else: + vh.password_flag = False + if self.will_flag: + vh.will_flag = True + vh.will_qos = self.will_qos + payload.will_message = self.will_message + payload.will_topic = self.will_topic + else: + vh.will_flag = False + + header = MQTTFixedHeader(PacketType.CONNECT, 0x00) + packet = ConnectPacket(header, vh, payload) + return packet + + @property def next_packet_id(self): self._packet_id += 1