예제 #1
0
    def mqtt_unsubscribe(self, topics, packet_id):
        """

        :param topics: array of topics ['/a/b', ...]
        :return:
        """
        unsubscribe = UnsubscribePacket.build(topics, packet_id)
        yield from self._send_packet(unsubscribe)
        waiter = futures.Future(loop=self._loop)
        self._unsubscriptions_waiter[unsubscribe.variable_header.packet_id] = waiter
        yield from waiter
        del self._unsubscriptions_waiter[unsubscribe.variable_header.packet_id]
예제 #2
0
    def mqtt_unsubscribe(self, topics, packet_id):
        """

        :param topics: array of topics ['/a/b', ...]
        :return:
        """
        unsubscribe = UnsubscribePacket.build(topics, packet_id)
        yield from self._send_packet(unsubscribe)
        waiter = futures.Future(loop=self._loop)
        self._unsubscriptions_waiter[unsubscribe.variable_header.packet_id] = waiter
        yield from waiter
        del self._unsubscriptions_waiter[unsubscribe.variable_header.packet_id]
예제 #3
0
    async def mqtt_unsubscribe(self, topics, packet_id):
        """

        :param topics: array of topics ['/a/b', ...]
        :return:
        """
        waiter = Future()
        self._unsubscriptions_waiter[packet_id] = waiter
        try:
            unsubscribe = UnsubscribePacket.build(topics, packet_id)
            await self._send_packet(unsubscribe)

            await waiter.get()
        finally:
            del self._unsubscriptions_waiter[packet_id]
예제 #4
0
    def mqtt_unsubscribe(self, topics, packet_id):
        """

        :param topics: array of topics ['/a/b', ...]
        :return:
        """

        def acknowledged_predicate():
            if self.subscriptions[unsubscribe.variable_header.packet_id].state == "acknowledged":
                return True
            else:
                return False

        unsubscribe = UnsubscribePacket.build(topics, packet_id)
        yield from self.outgoing_queue.put(unsubscribe)
        subscription = UnSubscription(unsubscribe.variable_header.packet_id, topics)
        subscription.unsubscribe()
        self.subscriptions[unsubscribe.variable_header.packet_id] = subscription
        self.subscriptions[unsubscribe.variable_header.packet_id] = subscription
        yield from self._subscriptions_changed.acquire()
        yield from self._subscriptions_changed.wait_for(acknowledged_predicate)
        subscription = self.subscriptions.pop(unsubscribe.variable_header.packet_id)
        self._subscriptions_changed.release()
        return subscription