# Copyright (c) 2015 Nicolas JOUANIN # # See the file license.txt for copying permission. from hbmqtt.mqtt.packet import MQTTPacket, MQTTFixedHeader, PacketType, PacketIdVariableHeader, MQTTPayload, MQTTVariableHeader from hbmqtt.errors import HBMQTTException from hbmqtt.codecs import * class UnubscribePayload(MQTTPayload): def __init__(self, topics=[]): super().__init__() self.topics = topics def to_bytes(self, fixed_header: MQTTFixedHeader, variable_header: MQTTVariableHeader): out = b'' for topic in self.topics: out += encode_string(topic) return out @classmethod @asyncio.coroutine def from_stream(cls, reader: asyncio.StreamReader, fixed_header: MQTTFixedHeader, variable_header: MQTTVariableHeader): topics = [] while True: try: topic = yield from decode_string(reader) topics.append(topic) except NoDataException: break return cls(topics) class UnsubscribePacket(MQTTPacket): VARIABLE_HEADER = PacketIdVariableHeader PAYLOAD = UnubscribePayload def __init__(self, fixed: MQTTFixedHeader=None, variable_header: PacketIdVariableHeader=None, payload=None): if fixed is None: header = MQTTFixedHeader(PacketType.UNSUBSCRIBE, 0x00) else: if fixed.packet_type is not PacketType.UNSUBSCRIBE: raise HBMQTTException("Invalid fixed packet type %s for UnsubscribePacket init" % fixed.packet_type) header = fixed super().__init__(header) self.variable_header = variable_header self.payload = payload