WorkAreaViewModel.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. using AlarmInfoServerSim.Services;
  2. using CommunityToolkit.Mvvm.ComponentModel;
  3. using CommunityToolkit.Mvvm.Input;
  4. using ConfigOperator;
  5. using HardwareData;
  6. using RealtimeData;
  7. using RTCommunicatorBase;
  8. using System.Collections.Concurrent;
  9. using System.Collections.ObjectModel;
  10. using System.IO;
  11. namespace AlarmInfoServerSim.ViewModels
  12. {
  13. public partial class WorkAreaViewModel : ObservableObject
  14. {
  15. private readonly IInfoSendingService _infoSendingService;
  16. private readonly Hardwares _hardwares;
  17. [ObservableProperty]
  18. private ConcurrentDictionary<byte, Mini8Data> _mini8;
  19. [ObservableProperty]
  20. private int _selectedMini8Index = -1;
  21. [ObservableProperty]
  22. private ConcurrentDictionary<byte, ChannelData> _mini8Channel;
  23. [ObservableProperty]
  24. private int _selectedChannelIndex = -1;
  25. [ObservableProperty]
  26. private AlarmType[] _alarmTypes;
  27. [ObservableProperty]
  28. private int _selectedAlarmTypeIndex = -1;
  29. [ObservableProperty]
  30. private float _pV;
  31. [ObservableProperty]
  32. private float _caps;
  33. [ObservableProperty]
  34. private float _floor;
  35. [ObservableProperty]
  36. private ObservableCollection<string> _receivingTime;
  37. [ObservableProperty]
  38. [NotifyCanExecuteChangedFor(nameof(SendInfoCommand))]
  39. private bool _hasConnection;
  40. public WorkAreaViewModel(IInfoSendingService infoSendingService)
  41. {
  42. _infoSendingService = infoSendingService;
  43. _infoSendingService.ConnectionStatusChanged += OnConnectionStatusChanged;
  44. _infoSendingService.DataReceived += OnDataReceived;
  45. _hardwares = new Hardwares();
  46. HardwareFileLoader hardwareFileLoader = new HardwareFileLoader(_hardwares);
  47. string folderPath = Path.Combine(new DirectoryInfo(Paths.LocalPath!)!.Parent!.Parent!.FullName, "Settings", "Hardwares");
  48. _mini8 = hardwareFileLoader.Load(folderPath) ? _hardwares.Mini8s : [];
  49. _mini8Channel = [];
  50. _alarmTypes = Enum.GetValues<AlarmType>();
  51. _receivingTime = [];
  52. }
  53. partial void OnSelectedMini8IndexChanged(int value)
  54. {
  55. SelectedChannelIndex = -1;
  56. SelectedAlarmTypeIndex = -1;
  57. var index = Mini8.ElementAt(value).Key;
  58. Mini8Channel = _hardwares.Mini8Channels[index];
  59. }
  60. partial void OnSelectedChannelIndexChanged(int value)
  61. {
  62. SelectedAlarmTypeIndex = -1;
  63. }
  64. [RelayCommand(CanExecute = nameof(HasConnection))]
  65. private void SendInfo()
  66. {
  67. if (SelectedMini8Index > -1 && SelectedChannelIndex > -1 && SelectedAlarmTypeIndex > -1)
  68. {
  69. // ChannelAlarmNotify = 1
  70. _infoSendingService.Send(1, new ST_ALARM()
  71. {
  72. Mini8Index = Mini8.ElementAt(SelectedMini8Index).Key,
  73. ChannelIndex = Mini8Channel.ElementAt(SelectedChannelIndex).Key,
  74. PV = PV,
  75. Caps = Caps,
  76. Floor = Floor,
  77. AlarmType = (AlarmType)SelectedAlarmTypeIndex
  78. });
  79. }
  80. }
  81. private void OnConnectionStatusChanged(object? sender, bool e)
  82. {
  83. App.Current.Dispatcher.Invoke(() =>
  84. {
  85. HasConnection = e;
  86. });
  87. }
  88. private void OnDataReceived(object? sender, (ushort, TLVProtocal.TlvData) e)
  89. {
  90. ReceivingTime.Add(e.Item2.DateTime.ToString());
  91. }
  92. }
  93. }