终端一体化运控平台
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 

76 Zeilen
2.4 KiB

  1. using BPA.Message;
  2. using BPASmartClient.Helper;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. namespace BPASmartClient.Business
  9. {
  10. /// <summary>
  11. /// 状态管理器
  12. /// </summary>
  13. public class StatusMgr : IPlugin
  14. {
  15. //运行标识
  16. private bool running = false;
  17. //设备管理
  18. private DeviceMgr deviceMgr;
  19. private MQTTMgr mqttMgr;
  20. DeviceStatus deviceStatus = new DeviceStatus();
  21. private bool wholeDeviceHealth;
  22. private Dictionary<int, Dictionary<string, object>> wholeDeviceStatus = new Dictionary<int, Dictionary<string, object>>();
  23. public void Initialize()
  24. {
  25. deviceMgr = Plugin.GetInstance().GetPlugin<DeviceMgr>();
  26. mqttMgr = Plugin.GetInstance().GetPlugin<MQTTMgr>();
  27. }
  28. public void Start()
  29. {
  30. running = true;
  31. ThreadManage.GetInstance().Start(() =>
  32. {
  33. while (running)
  34. {
  35. wholeDeviceHealth = true;
  36. foreach (var device in deviceMgr.GetDevices())
  37. {
  38. wholeDeviceStatus[device.DeviceId] = device.Status.GetStatus();
  39. }
  40. Thread.Sleep(50);
  41. }
  42. }, "设备状态收集");
  43. deviceStatus.BatchingInfo = new List<BPA.Models.BatchingInfo>();
  44. ThreadManage.GetInstance().Start(() =>
  45. {
  46. while (running)
  47. {
  48. wholeDeviceHealth = true;
  49. foreach (var device in deviceMgr.GetDevices())
  50. {
  51. wholeDeviceStatus[device.DeviceId] = device.Status.GetStatus();
  52. deviceStatus.Healthy = device.IsHealth ? BPA.Message.Enum.DeviceHealthy.Health : BPA.Message.Enum.DeviceHealthy.UnHealth;
  53. var msg = BPAPackage.Make(deviceStatus, device.DeviceId, device.DeviceType);
  54. mqttMgr.Publish(TopicDefine.GetInstance().PushHeartbeatTopics[device.DeviceType], msg.Serialize());
  55. }
  56. Thread.Sleep(1000);
  57. }
  58. }, "设备心跳上报");
  59. }
  60. public void Dispose()
  61. {
  62. running = false;
  63. }
  64. }
  65. }