MQTTEvents.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. using Microsoft.Extensions.Options;
  2. using MQTTnet.Protocol;
  3. using MQTTnet.Server;
  4. using System.Text;
  5. namespace HTEX.Complex.Services.MQTT
  6. {
  7. public class MQTTEvents
  8. {
  9. public MQTTEvents()
  10. {
  11. }
  12. /// <summary>
  13. /// 客户端订阅主题事件
  14. /// </summary>
  15. /// <param name="arg"></param>
  16. /// <returns></returns>
  17. public Task _mqttServer_ClientSubscribedTopicAsync(ClientSubscribedTopicEventArgs arg)
  18. {
  19. Console.WriteLine($"ClientSubscribedTopicAsync:客户端ID=【{arg.ClientId}】订阅的主题=【{arg.TopicFilter}】 ");
  20. return Task.CompletedTask;
  21. }
  22. /// <summary>
  23. /// 关闭后事件
  24. /// </summary>
  25. /// <param name="arg"></param>
  26. /// <returns></returns>
  27. public Task _mqttServer_StoppedAsync(EventArgs arg)
  28. {
  29. Console.WriteLine($"StoppedAsync:MQTT服务已关闭……");
  30. return Task.CompletedTask;
  31. }
  32. /// <summary>
  33. /// 用户名和密码验证有关
  34. /// </summary>
  35. /// <param name="arg"></param>
  36. /// <returns></returns>
  37. public Task _mqttServer_ValidatingConnectionAsync(ValidatingConnectionEventArgs arg)
  38. {
  39. arg.ReasonCode = MqttConnectReasonCode.Success;
  40. //if ((arg.UserName ?? string.Empty) != _mqttOption.UserName || (arg.Password ?? String.Empty) != _mqttOption.Password)
  41. //{
  42. // arg.ReasonCode = MqttConnectReasonCode.Banned;
  43. // Console.WriteLine($"ValidatingConnectionAsync:客户端ID=【{arg.ClientId}】用户名或密码验证错误 ");
  44. //}
  45. return Task.CompletedTask;
  46. }
  47. /// <summary>
  48. /// 消息接收事件
  49. /// </summary>
  50. /// <param name="arg"></param>
  51. /// <returns></returns>
  52. public Task _mqttServer_InterceptingPublishAsync(InterceptingPublishEventArgs arg)
  53. {
  54. //if (string.Equals(arg.ClientId,_mqttOption. ServerClientId))
  55. //{
  56. // return Task.CompletedTask;
  57. //}
  58. Console.WriteLine($"InterceptingPublishAsync:客户端ID=【{arg.ClientId}】 Topic主题=【{arg.ApplicationMessage.Topic}】 消息=【{Encoding.UTF8.GetString(arg.ApplicationMessage.PayloadSegment)}】 qos等级=【{arg.ApplicationMessage.QualityOfServiceLevel}】");
  59. return Task.CompletedTask;
  60. }
  61. /// <summary>
  62. /// 启动后事件
  63. /// </summary>
  64. /// <param name="arg"></param>
  65. /// <returns></returns>
  66. public Task _mqttServer_StartedAsync(EventArgs arg)
  67. {
  68. Console.WriteLine($"StartedAsync:MQTT服务已启动……");
  69. return Task.CompletedTask;
  70. }
  71. /// <summary>
  72. /// 客户端取消订阅事件
  73. /// </summary>
  74. /// <param name="arg"></param>
  75. /// <returns></returns>
  76. public Task _mqttServer_ClientUnsubscribedTopicAsync(ClientUnsubscribedTopicEventArgs arg)
  77. {
  78. Console.WriteLine($"ClientUnsubscribedTopicAsync:客户端ID=【{arg.ClientId}】已取消订阅的主题=【{arg.TopicFilter}】 ");
  79. return Task.CompletedTask;
  80. }
  81. public Task _mqttServer_ApplicationMessageNotConsumedAsync(ApplicationMessageNotConsumedEventArgs arg)
  82. {
  83. Console.WriteLine($"ApplicationMessageNotConsumedAsync:发送端ID=【{arg.SenderId}】 Topic主题=【{arg.ApplicationMessage.Topic}】 消息=【{Encoding.UTF8.GetString(arg.ApplicationMessage.PayloadSegment)}】 qos等级=【{arg.ApplicationMessage.QualityOfServiceLevel}】");
  84. return Task.CompletedTask;
  85. }
  86. /// <summary>
  87. /// 客户端断开时候触发
  88. /// </summary>
  89. /// <param name="arg"></param>
  90. /// <returns></returns>
  91. /// <exception cref="NotImplementedException"></exception>
  92. public Task _mqttServer_ClientDisconnectedAsync(ClientDisconnectedEventArgs arg)
  93. {
  94. Console.WriteLine($"ClientDisconnectedAsync:客户端ID=【{arg.ClientId}】已断开, 地址=【{arg.Endpoint}】 ");
  95. return Task.CompletedTask;
  96. }
  97. /// <summary>
  98. /// 客户端连接时候触发
  99. /// </summary>
  100. /// <param name="arg"></param>
  101. /// <returns></returns>
  102. public Task _mqttServer_ClientConnectedAsync(ClientConnectedEventArgs arg)
  103. {
  104. Console.WriteLine($"ClientConnectedAsync:客户端ID=【{arg.ClientId}】已连接, 用户名=【{arg.UserName}】地址=【{arg.Endpoint}】 ");
  105. return Task.CompletedTask;
  106. }
  107. //public async Task _mqttServer_InterceptingClientEnqueueAsync(InterceptingClientApplicationMessageEnqueueEventArgs args)
  108. //{
  109. // throw new NotImplementedException();
  110. //}
  111. //public async Task _mqttServer_ClientAcknowledgedPublishPacketAsync(ClientAcknowledgedPublishPacketEventArgs args)
  112. //{
  113. // throw new NotImplementedException();
  114. //}
  115. }
  116. }