confirmUnsubscribe method

bool confirmUnsubscribe(
  1. MqttMessage msg
)

Confirms an unsubscription has been made with the broker. Removes the subscription. Returns true on successful unsubscription confirm, false on fail. The active subscription is not removed if the unsubscription for the topic fails.

Implementation

bool confirmUnsubscribe(MqttMessage msg) {
  final unSubAck = msg as MqttUnsubscribeAckMessage;
  final reasonCodes = unSubAck.reasonCodes;
  var ok = true;
  var reasonCodeIndex = 0;
  final messageIdentifier = unSubAck.variableHeader!.messageIdentifier;
  if (pendingUnsubscriptions.containsKey(messageIdentifier)) {
    for (final pendingTopic in pendingUnsubscriptions[messageIdentifier]!) {
      final topic = pendingTopic.topic.rawTopic;
      pendingTopic.reasonCode = unSubAck.reasonCodes[reasonCodeIndex];
      pendingTopic.userProperties = unSubAck.userProperty;
      // Check for a successful unsubscribe
      if (!MqttReasonCodeUtilities.isError(
          mqttSubscribeReasonCode.asInt(reasonCodes[reasonCodeIndex])!)) {
        if (onUnsubscribed != null) {
          onUnsubscribed!(pendingTopic);
        }
        subscriptions.remove(topic);
      } else {
        ok = false;
      }
      reasonCodeIndex++;
    }
    pendingUnsubscriptions.remove(messageIdentifier);
  } else {
    MqttLogger.log(
        'MqttSubscriptionManager::confirmUnsubscription - message identifier $messageIdentifier has no pending unsubscriptions');
    return false;
  }

  return ok;
}