MqttServerExtensions.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. using MQTTnet.Client.Publishing;
  2. using MQTTnet.Client.Receiving;
  3. using MQTTnet.Protocol;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Threading;
  7. using System.Threading.Tasks;
  8. namespace MQTTnet.Server
  9. {
  10. public static class MqttServerExtensions
  11. {
  12. public static IMqttServer UseClientConnectedHandler(this IMqttServer server, Func<MqttServerClientConnectedEventArgs, Task> handler)
  13. {
  14. if (server == null) throw new ArgumentNullException(nameof(server));
  15. if (handler == null)
  16. {
  17. return server.UseClientConnectedHandler((IMqttServerClientConnectedHandler)null);
  18. }
  19. return server.UseClientConnectedHandler(new MqttServerClientConnectedHandlerDelegate(handler));
  20. }
  21. public static IMqttServer UseClientConnectedHandler(this IMqttServer server, Action<MqttServerClientConnectedEventArgs> handler)
  22. {
  23. if (server == null) throw new ArgumentNullException(nameof(server));
  24. if (handler == null)
  25. {
  26. return server.UseClientConnectedHandler((IMqttServerClientConnectedHandler)null);
  27. }
  28. return server.UseClientConnectedHandler(new MqttServerClientConnectedHandlerDelegate(handler));
  29. }
  30. public static IMqttServer UseClientConnectedHandler(this IMqttServer server, IMqttServerClientConnectedHandler handler)
  31. {
  32. if (server == null) throw new ArgumentNullException(nameof(server));
  33. server.ClientConnectedHandler = handler;
  34. return server;
  35. }
  36. public static IMqttServer UseClientDisconnectedHandler(this IMqttServer server, Func<MqttServerClientDisconnectedEventArgs, Task> handler)
  37. {
  38. if (server == null) throw new ArgumentNullException(nameof(server));
  39. if (handler == null)
  40. {
  41. return server.UseClientDisconnectedHandler((IMqttServerClientDisconnectedHandler)null);
  42. }
  43. return server.UseClientDisconnectedHandler(new MqttServerClientDisconnectedHandlerDelegate(handler));
  44. }
  45. public static IMqttServer UseClientDisconnectedHandler(this IMqttServer server, Action<MqttServerClientDisconnectedEventArgs> handler)
  46. {
  47. if (server == null) throw new ArgumentNullException(nameof(server));
  48. if (handler == null)
  49. {
  50. return server.UseClientDisconnectedHandler((IMqttServerClientDisconnectedHandler)null);
  51. }
  52. return server.UseClientDisconnectedHandler(new MqttServerClientDisconnectedHandlerDelegate(handler));
  53. }
  54. public static IMqttServer UseClientDisconnectedHandler(this IMqttServer server, IMqttServerClientDisconnectedHandler handler)
  55. {
  56. if (server == null) throw new ArgumentNullException(nameof(server));
  57. server.ClientDisconnectedHandler = handler;
  58. return server;
  59. }
  60. public static IMqttServer UseApplicationMessageReceivedHandler(this IMqttServer server, Func<MqttApplicationMessageReceivedEventArgs, Task> handler)
  61. {
  62. if (server == null) throw new ArgumentNullException(nameof(server));
  63. if (handler == null)
  64. {
  65. return server.UseApplicationMessageReceivedHandler((IMqttApplicationMessageReceivedHandler)null);
  66. }
  67. return server.UseApplicationMessageReceivedHandler(new MqttApplicationMessageReceivedHandlerDelegate(handler));
  68. }
  69. public static IMqttServer UseApplicationMessageReceivedHandler(this IMqttServer server, Action<MqttApplicationMessageReceivedEventArgs> handler)
  70. {
  71. if (server == null) throw new ArgumentNullException(nameof(server));
  72. if (handler == null)
  73. {
  74. return server.UseApplicationMessageReceivedHandler((IMqttApplicationMessageReceivedHandler)null);
  75. }
  76. return server.UseApplicationMessageReceivedHandler(new MqttApplicationMessageReceivedHandlerDelegate(handler));
  77. }
  78. public static IMqttServer UseApplicationMessageReceivedHandler(this IMqttServer server, IMqttApplicationMessageReceivedHandler handler)
  79. {
  80. if (server == null) throw new ArgumentNullException(nameof(server));
  81. server.ApplicationMessageReceivedHandler = handler;
  82. return server;
  83. }
  84. public static Task SubscribeAsync(this IMqttServer server, string clientId, params MqttTopicFilter[] topicFilters)
  85. {
  86. if (server == null) throw new ArgumentNullException(nameof(server));
  87. if (clientId == null) throw new ArgumentNullException(nameof(clientId));
  88. if (topicFilters == null) throw new ArgumentNullException(nameof(topicFilters));
  89. return server.SubscribeAsync(clientId, topicFilters);
  90. }
  91. public static Task SubscribeAsync(this IMqttServer server, string clientId, string topic, MqttQualityOfServiceLevel qualityOfServiceLevel)
  92. {
  93. if (server == null) throw new ArgumentNullException(nameof(server));
  94. if (clientId == null) throw new ArgumentNullException(nameof(clientId));
  95. if (topic == null) throw new ArgumentNullException(nameof(topic));
  96. return server.SubscribeAsync(clientId, new MqttTopicFilterBuilder().WithTopic(topic).WithQualityOfServiceLevel(qualityOfServiceLevel).Build());
  97. }
  98. public static Task SubscribeAsync(this IMqttServer server, string clientId, string topic)
  99. {
  100. if (server == null) throw new ArgumentNullException(nameof(server));
  101. if (clientId == null) throw new ArgumentNullException(nameof(clientId));
  102. if (topic == null) throw new ArgumentNullException(nameof(topic));
  103. return server.SubscribeAsync(clientId, new MqttTopicFilterBuilder().WithTopic(topic).Build());
  104. }
  105. public static Task UnsubscribeAsync(this IMqttServer server, string clientId, params string[] topicFilters)
  106. {
  107. if (server == null) throw new ArgumentNullException(nameof(server));
  108. if (clientId == null) throw new ArgumentNullException(nameof(clientId));
  109. if (topicFilters == null) throw new ArgumentNullException(nameof(topicFilters));
  110. return server.UnsubscribeAsync(clientId, topicFilters);
  111. }
  112. public static async Task PublishAsync(this IMqttServer server, IEnumerable<MqttApplicationMessage> applicationMessages)
  113. {
  114. if (server == null) throw new ArgumentNullException(nameof(server));
  115. if (applicationMessages == null) throw new ArgumentNullException(nameof(applicationMessages));
  116. foreach (var applicationMessage in applicationMessages)
  117. {
  118. await server.PublishAsync(applicationMessage).ConfigureAwait(false);
  119. }
  120. }
  121. public static Task<MqttClientPublishResult> PublishAsync(this IMqttServer server, MqttApplicationMessage applicationMessage)
  122. {
  123. if (server == null) throw new ArgumentNullException(nameof(server));
  124. if (applicationMessage == null) throw new ArgumentNullException(nameof(applicationMessage));
  125. return server.PublishAsync(applicationMessage, CancellationToken.None);
  126. }
  127. public static async Task PublishAsync(this IMqttServer server, params MqttApplicationMessage[] applicationMessages)
  128. {
  129. if (server == null) throw new ArgumentNullException(nameof(server));
  130. if (applicationMessages == null) throw new ArgumentNullException(nameof(applicationMessages));
  131. foreach (var applicationMessage in applicationMessages)
  132. {
  133. await server.PublishAsync(applicationMessage, CancellationToken.None).ConfigureAwait(false);
  134. }
  135. }
  136. public static Task<MqttClientPublishResult> PublishAsync(this IMqttServer server, string topic)
  137. {
  138. if (server == null) throw new ArgumentNullException(nameof(server));
  139. if (topic == null) throw new ArgumentNullException(nameof(topic));
  140. return server.PublishAsync(builder => builder
  141. .WithTopic(topic));
  142. }
  143. public static Task<MqttClientPublishResult> PublishAsync(this IMqttServer server, string topic, string payload)
  144. {
  145. if (server == null) throw new ArgumentNullException(nameof(server));
  146. if (topic == null) throw new ArgumentNullException(nameof(topic));
  147. return server.PublishAsync(builder => builder
  148. .WithTopic(topic)
  149. .WithPayload(payload));
  150. }
  151. public static Task<MqttClientPublishResult> PublishAsync(this IMqttServer server, string topic, string payload, MqttQualityOfServiceLevel qualityOfServiceLevel)
  152. {
  153. if (server == null) throw new ArgumentNullException(nameof(server));
  154. if (topic == null) throw new ArgumentNullException(nameof(topic));
  155. return server.PublishAsync(builder => builder
  156. .WithTopic(topic)
  157. .WithPayload(payload)
  158. .WithQualityOfServiceLevel(qualityOfServiceLevel));
  159. }
  160. public static Task<MqttClientPublishResult> PublishAsync(this IMqttServer server, string topic, string payload, MqttQualityOfServiceLevel qualityOfServiceLevel, bool retain)
  161. {
  162. if (server == null) throw new ArgumentNullException(nameof(server));
  163. if (topic == null) throw new ArgumentNullException(nameof(topic));
  164. return server.PublishAsync(builder => builder
  165. .WithTopic(topic)
  166. .WithPayload(payload)
  167. .WithQualityOfServiceLevel(qualityOfServiceLevel)
  168. .WithRetainFlag(retain));
  169. }
  170. public static Task<MqttClientPublishResult> PublishAsync(this IMqttServer server, Func<MqttApplicationMessageBuilder, MqttApplicationMessageBuilder> builder, CancellationToken cancellationToken)
  171. {
  172. if (server == null) throw new ArgumentNullException(nameof(server));
  173. var message = builder(new MqttApplicationMessageBuilder()).Build();
  174. return server.PublishAsync(message, cancellationToken);
  175. }
  176. public static Task<MqttClientPublishResult> PublishAsync(this IMqttServer server, Func<MqttApplicationMessageBuilder, MqttApplicationMessageBuilder> builder)
  177. {
  178. if (server == null) throw new ArgumentNullException(nameof(server));
  179. var message = builder(new MqttApplicationMessageBuilder()).Build();
  180. return server.PublishAsync(message, CancellationToken.None);
  181. }
  182. }
  183. }