HubReceiver.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. namespace MinicsUI.Connector;
  2. public partial class HubReceiver
  3. {
  4. public HubReceiver(Hardwares hardwares, TemperatureConfigs configs, AlarmRealtime alarmRealtime, DatabaseCleaner databaseCleaner)
  5. {
  6. _hardwares = hardwares;
  7. _configs = configs;
  8. _alarmRealtime = alarmRealtime;
  9. _dataUpdateQueue ??= new(DataUpdateQueueHandler);
  10. _databaseCleaner = databaseCleaner;
  11. }
  12. private readonly DatabaseCleaner _databaseCleaner;
  13. private readonly Hardwares _hardwares;
  14. private readonly TemperatureConfigs _configs;
  15. private readonly AlarmRealtime _alarmRealtime;
  16. private readonly EventQueue<(byte, byte, ChannelData)> _dataUpdateQueue;
  17. public void UpdateDataBaseInfo(int duration, DateTime dateTime)
  18. {
  19. _databaseCleaner.KeepRange = (uint)duration;
  20. _databaseCleaner.LastCheckDate = dateTime;
  21. }
  22. public void UpdateSingleChannel(byte mini8Index, byte channelIndex, ChannelData channelData)
  23. {
  24. if (!_hardwares.Mini8Channels.TryGetValue(mini8Index, out var channels) || channels is null)
  25. return;
  26. if (!channels.TryGetValue(channelIndex, out Channel? channel) || channel is null)
  27. return;
  28. channelData.Adapt(channel);
  29. }
  30. public void UpdateChannels(byte key, List<ChannelData> value)
  31. {
  32. if (!_hardwares.Mini8s.TryGetValue(key, out Mini8Info? mini8) || mini8 is null || string.IsNullOrEmpty(mini8.Name))
  33. return;
  34. _hardwares.Mini8Channels[key] ??= [];
  35. foreach (ChannelData channelModel in value)
  36. {
  37. if (!_hardwares.Mini8Channels[key].TryGetValue(channelModel.ChannelIndex, out Channel? channel) || channel is null)
  38. {
  39. //channel = new(mini8.Name);
  40. channel = new();
  41. channelModel.Adapt(channel);
  42. _hardwares.Mini8Channels[key][channel.ChannelIndex] = channel;
  43. }
  44. channelModel.Adapt(channel);
  45. }
  46. }
  47. public void ClearFiles()
  48. {
  49. Application.Current.Dispatcher.Invoke(() =>
  50. {
  51. _configs.ConfigFiles?.Clear();
  52. });
  53. }
  54. public void UpdateFiles(TemperatureConfig value)
  55. {
  56. TempConfig tempConfig = new();
  57. value.Adapt(tempConfig);
  58. Application.Current.Dispatcher.Invoke(() =>
  59. {
  60. _configs.ConfigFiles.Add(tempConfig);
  61. });
  62. }
  63. public void UpdateAddress(byte key, Mini8Address address)
  64. {
  65. if (!_hardwares.Mini8s.TryGetValue(key, out Mini8Info? mini8) || mini8 is null)
  66. return;
  67. mini8.Address = address.Address;
  68. mini8.Port = address.Port;
  69. }
  70. public void CurrentFile(TemperatureConfig config)
  71. {
  72. if (config is null)
  73. return;
  74. TempConfig tempConfig = new();
  75. config.Adapt(tempConfig);
  76. CurrentTempConfig currentTempConfig = new()
  77. {
  78. Selector = TempConfigSelector.Manual,
  79. SelectedTime = DateTime.Now,
  80. ConfigFile = tempConfig,
  81. };
  82. _configs.CurrentConfigFile = currentTempConfig;
  83. }
  84. public void Mini8Connect(byte key, bool isConnect)
  85. {
  86. if (!_hardwares.Mini8s.TryGetValue(key, out Mini8Info? mini8) || mini8 is null)
  87. return;
  88. if (!mini8.Enable)
  89. return;
  90. mini8.IsConnected = isConnect;
  91. }
  92. public void AlarmNotify(byte mini8, byte channel, float temperature)
  93. {
  94. _alarmRealtime.InsertAlarm(mini8, channel, temperature);
  95. }
  96. public void AlarmTcBrockenNotify(byte mini8, byte channel)
  97. {
  98. _alarmRealtime.InsertTcBrocken(mini8, channel);
  99. }
  100. public void ChannelDataUpdate(byte mini8Index, byte channelIndex, ChannelData data)
  101. => _dataUpdateQueue.Enqueue(new(mini8Index, channelIndex, data));
  102. private void DataUpdateQueueHandler((byte mini8Index, byte channelIndex, ChannelData data) mini8Input)
  103. {
  104. if (!_hardwares.Mini8s.TryGetValue(mini8Input.mini8Index, out Mini8Info? mini8) || mini8 is null)
  105. return;
  106. if (!mini8.Enable)
  107. return;
  108. if (!_hardwares.Mini8Channels.TryGetValue(mini8Input.mini8Index, out var channels) || channels is null)
  109. return;
  110. if (!channels.TryGetValue(mini8Input.channelIndex, out Channel? channel) || channel is null)
  111. return;
  112. mini8Input.data.Adapt(channel);
  113. //Try Cancel Alarm
  114. if (channel.Status.In(ChannelSuatus.Warning, ChannelSuatus.Normal))
  115. _alarmRealtime.CancelAlarm(mini8.Index, channel.ChannelIndex);
  116. Mini8Status finalStatus = Mini8Status.Normal;
  117. foreach (Channel item in channels.Values)
  118. {
  119. if (item.Inhibit == Inhibit.Disable)
  120. continue;
  121. switch (item.Status)
  122. {
  123. case ChannelSuatus.Error:
  124. mini8.Status = Mini8Status.Error;
  125. return;
  126. case ChannelSuatus.Warning:
  127. finalStatus = Mini8Status.Warning;
  128. continue;
  129. default:
  130. continue;
  131. }
  132. }
  133. mini8.Status = finalStatus;
  134. }
  135. }