confirmSubscription method
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;
}