PublishSupport.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using Model.Enum;
  2. using Model.Notice;
  3. using MQTTnet;
  4. using MQTTnet.Protocol;
  5. using MQTTnet.Server;
  6. using ZmajService.Common;
  7. using ZmajService.Service.BatchJob;
  8. using ZmajService.Service.Mqtt;
  9. using ZmajService.User;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Linq;
  13. using System.Threading.Tasks;
  14. using TF.Common.Json;
  15. using TF.Common.Tools;
  16. using TF.Logger;
  17. namespace ZmajService.Service
  18. {
  19. class PublishSupport
  20. {
  21. #region Static
  22. public delegate Task<bool> MessageSendHanlder(MqttApplicationMessage message);
  23. public static event MessageSendHanlder OnPublishEvent;
  24. public static async Task<bool> Publish(MessageModel model)
  25. {
  26. string topic;
  27. switch (model.MessageType)
  28. {
  29. case MessageType.Notice:
  30. case MessageType.Tips:
  31. topic = $"/sxaj/{model.ReceiveUserId}";
  32. break;
  33. case MessageType.Public:
  34. topic = $"/sxaj/public";
  35. break;
  36. default:
  37. topic = $"/sxaj/{model.ReceiveUserId}";
  38. break;
  39. }
  40. string payload = JsonHelper.SerializeObject(model);
  41. return await MessagePublish(topic, payload);
  42. }
  43. private static async Task<bool> MessagePublish(string topic, string payload)
  44. {
  45. if (string.IsNullOrEmpty(topic) || string.IsNullOrEmpty(payload))
  46. {
  47. return false;
  48. }
  49. if (!MqttService.IsRunning)
  50. {
  51. return false;
  52. }
  53. try
  54. {
  55. var message = new MqttApplicationMessageBuilder()
  56. .WithTopic(topic)
  57. .WithPayload(payload)
  58. .Build();
  59. await OnPublishEvent?.Invoke(message);
  60. Log.Info($"Publish({topic}):{payload}");
  61. return true;
  62. }
  63. catch (Exception ex)
  64. {
  65. Log.Error($"Publish payload with topic({topic}) failed. {ex.Message}", ex);
  66. return false;
  67. }
  68. }
  69. #endregion
  70. }
  71. }