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