confirmSubscription method

bool confirmSubscription(
  1. MqttMessage msg
)

Confirms a subscription has been made with the broker. Marks the subscription as confirmed. Returns true on successful subscription confirm, false on fail. Note if any subscriptions fail a fail will be returned.

Implementation

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

  return ok;
}