subscribeSubscriptionList method

List<MqttSubscription>? subscribeSubscriptionList(
  1. List<MqttSubscription>? subscriptions
)

Registers a new subscription with the subscription manager from a list of subscriptions. Note that user properties are set on a per message basis not a per subscription basis, if you wish to send user properties then set them on the first subscription in the list. Returns the actual subscriptions subscribed to or null if none.

Implementation

List<MqttSubscription>? subscribeSubscriptionList(
    List<MqttSubscription>? subscriptions) {
  if (subscriptions == null) {
    throw ArgumentError(
        'MqttSubscriptionManager::subscribeSubscriptionList - subscription list is null');
  }
  // Don't recreate a subscription we already have.
  final subscriptionsToCreate = <MqttSubscription>[];
  for (final subscription in subscriptions) {
    var cn = _tryGetExistingSubscription(subscription.topic.rawTopic);
    if (cn == null) {
      subscriptionsToCreate.add(subscription);
    }
  }
  if (subscriptionsToCreate.isEmpty) {
    // No subscriptions created.
    MqttLogger.log(
        'MqttSubscriptionManager::registerSubscriptionList - no subscriptions are valid');
    return null;
  }
  // Build a subscription message and send it.
  try {
    final msgId = messageIdentifierDispenser.nextMessageIdentifier;
    pendingSubscriptions[msgId] = subscriptionsToCreate;
    final msg = MqttSubscribeMessage()
        .toSubscriptionList(subscriptionsToCreate)
        .withUserProperties(subscriptionsToCreate.first.userProperties);
    msg.messageIdentifier = msgId;
    _connectionHandler.sendMessage(msg);
    return subscriptionsToCreate;
  } on Exception catch (e) {
    MqttLogger.log('MqttSubscriptionManager::registerSubscriptionList'
        'exception raised, text is $e');
    return null;
  }
}