12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- using Model.Enum;
- using Model.Notice;
- using MQTTnet;
- using MQTTnet.Protocol;
- using MQTTnet.Server;
- using ZmajService.Common;
- using ZmajService.Service.BatchJob;
- using ZmajService.Service.Mqtt;
- using ZmajService.User;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
- using TF.Common.Json;
- using TF.Common.Tools;
- using TF.Logger;
- namespace ZmajService.Service
- {
- class PublishSupport
- {
- #region Static
- public delegate Task<bool> MessageSendHanlder(MqttApplicationMessage message);
- public static event MessageSendHanlder OnPublishEvent;
- public static async Task<bool> Publish(MessageModel model)
- {
- string topic;
- switch (model.MessageType)
- {
- case MessageType.Notice:
- case MessageType.Tips:
- topic = $"/sxaj/{model.ReceiveUserId}";
- break;
- case MessageType.Public:
- topic = $"/sxaj/public";
- break;
- default:
- topic = $"/sxaj/{model.ReceiveUserId}";
- break;
- }
- string payload = JsonHelper.SerializeObject(model);
- return await MessagePublish(topic, payload);
- }
- private static async Task<bool> MessagePublish(string topic, string payload)
- {
- if (string.IsNullOrEmpty(topic) || string.IsNullOrEmpty(payload))
- {
- return false;
- }
- if (!MqttService.IsRunning)
- {
- return false;
- }
- try
- {
- var message = new MqttApplicationMessageBuilder()
- .WithTopic(topic)
- .WithPayload(payload)
- .Build();
- await OnPublishEvent?.Invoke(message);
- Log.Info($"Publish({topic}):{payload}");
- return true;
- }
- catch (Exception ex)
- {
- Log.Error($"Publish payload with topic({topic}) failed. {ex.Message}", ex);
- return false;
- }
- }
- #endregion
- }
- }
|