MqttJob.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using Host.Common;
  2. using Host.IJobs.Model;
  3. using Host.Managers;
  4. using MQTTnet.Client.Publishing;
  5. using Newtonsoft.Json;
  6. using Quartz;
  7. using System.Threading.Tasks;
  8. namespace Host.IJobs
  9. {
  10. public class MqttJob : JobBase<LogMqttModel>, IJob
  11. {
  12. private MqttManager mqttManager;
  13. public MqttJob() : base(new LogMqttModel())
  14. {
  15. mqttManager = MqttManager.Instance;
  16. }
  17. public override async Task NextExecute(IJobExecutionContext context)
  18. {
  19. var topic = context.JobDetail.JobDataMap.GetString(Constant.Topic);
  20. var payload = context.JobDetail.JobDataMap.GetString(Constant.Payload);
  21. LogInfo.Topic = topic;
  22. LogInfo.Payload = payload;
  23. var mqttSet = await FileConfig.GetMqttSetAsync();
  24. if (string.IsNullOrWhiteSpace(mqttSet.Host) || string.IsNullOrWhiteSpace(mqttSet.Port))
  25. LogInfo.ErrorMsg = $"<span class='error'>请先在 [/seting] 页面配置MQTT设置。</span>";
  26. else if (!mqttManager.MqttClient.IsConnected)
  27. LogInfo.ErrorMsg = $"<span class='error'>Mqtt服务连接失败</span>";
  28. else if (!mqttManager.MqttClient.IsStarted)
  29. LogInfo.ErrorMsg = $"<span class='error'>Mqtt服务启动失败</span>";
  30. else
  31. {
  32. var detectionrResult = await mqttManager.PublishAsync(topic, payload);
  33. if (detectionrResult.ReasonCode != MqttClientPublishReasonCode.Success)
  34. LogInfo.ErrorMsg = $"<span class='error'>topic:{topic} reason:{detectionrResult.ReasonString} {detectionrResult.ReasonCode}</span>";
  35. }
  36. if (!string.IsNullOrWhiteSpace(LogInfo.ErrorMsg))
  37. context.JobDetail.JobDataMap[Constant.EXCEPTION] = $"<div class='err-time'>{LogInfo.BeginTime}</div>{JsonConvert.SerializeObject(LogInfo)}";
  38. else
  39. LogInfo.Result = "发送成功!";
  40. }
  41. }
  42. }