MqttClientSubscribeOptionsBuilder.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using MQTTnet.Packets;
  2. using MQTTnet.Protocol;
  3. using System;
  4. using System.Collections.Generic;
  5. namespace MQTTnet.Client.Subscribing
  6. {
  7. public class MqttClientSubscribeOptionsBuilder
  8. {
  9. private readonly MqttClientSubscribeOptions _subscribeOptions = new MqttClientSubscribeOptions();
  10. public MqttClientSubscribeOptionsBuilder WithUserProperty(string name, string value)
  11. {
  12. if (name == null) throw new ArgumentNullException(nameof(name));
  13. if (value == null) throw new ArgumentNullException(nameof(value));
  14. if (_subscribeOptions.UserProperties == null)
  15. {
  16. _subscribeOptions.UserProperties = new List<MqttUserProperty>();
  17. }
  18. _subscribeOptions.UserProperties.Add(new MqttUserProperty(name, value));
  19. return this;
  20. }
  21. public MqttClientSubscribeOptionsBuilder WithSubscriptionIdentifier(uint? subscriptionIdentifier)
  22. {
  23. _subscribeOptions.SubscriptionIdentifier = subscriptionIdentifier;
  24. return this;
  25. }
  26. public MqttClientSubscribeOptionsBuilder WithTopicFilter(
  27. string topic,
  28. MqttQualityOfServiceLevel qualityOfServiceLevel = MqttQualityOfServiceLevel.AtMostOnce,
  29. bool? noLocal = null,
  30. bool? retainAsPublished = null,
  31. MqttRetainHandling? retainHandling = null)
  32. {
  33. return WithTopicFilter(new MqttTopicFilter
  34. {
  35. Topic = topic,
  36. QualityOfServiceLevel = qualityOfServiceLevel,
  37. NoLocal = noLocal,
  38. RetainAsPublished = retainAsPublished,
  39. RetainHandling = retainHandling
  40. });
  41. }
  42. public MqttClientSubscribeOptionsBuilder WithTopicFilter(Action<MqttTopicFilterBuilder> topicFilterBuilder)
  43. {
  44. if (topicFilterBuilder == null) throw new ArgumentNullException(nameof(topicFilterBuilder));
  45. var internalTopicFilterBuilder = new MqttTopicFilterBuilder();
  46. topicFilterBuilder(internalTopicFilterBuilder);
  47. return WithTopicFilter(internalTopicFilterBuilder);
  48. }
  49. public MqttClientSubscribeOptionsBuilder WithTopicFilter(MqttTopicFilterBuilder topicFilterBuilder)
  50. {
  51. if (topicFilterBuilder == null) throw new ArgumentNullException(nameof(topicFilterBuilder));
  52. return WithTopicFilter(topicFilterBuilder.Build());
  53. }
  54. public MqttClientSubscribeOptionsBuilder WithTopicFilter(MqttTopicFilter topicFilter)
  55. {
  56. if (topicFilter == null) throw new ArgumentNullException(nameof(topicFilter));
  57. if (_subscribeOptions.TopicFilters == null)
  58. {
  59. _subscribeOptions.TopicFilters = new List<MqttTopicFilter>();
  60. }
  61. _subscribeOptions.TopicFilters.Add(topicFilter);
  62. return this;
  63. }
  64. public MqttClientSubscribeOptions Build()
  65. {
  66. return _subscribeOptions;
  67. }
  68. }
  69. }