WorkAreaViewModel.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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.IO;
  10. namespace AlarmInfoServerSim.ViewModels
  11. {
  12. public partial class WorkAreaViewModel : ObservableObject
  13. {
  14. private readonly IInfoSendingService _infoSendingService;
  15. private readonly Hardwares _hardwares;
  16. [ObservableProperty]
  17. private ConcurrentDictionary<byte, Mini8Data> _mini8;
  18. [ObservableProperty]
  19. private int _selectedMini8Index = -1;
  20. [ObservableProperty]
  21. private ConcurrentDictionary<byte, ChannelData> _mini8Channel;
  22. [ObservableProperty]
  23. private int _selectedChannelIndex = -1;
  24. [ObservableProperty]
  25. private AlarmType[] _alarmTypes;
  26. [ObservableProperty]
  27. private int _selectedAlarmTypeIndex = -1;
  28. [ObservableProperty]
  29. private float _pV;
  30. [ObservableProperty]
  31. private float _caps;
  32. [ObservableProperty]
  33. private float _floor;
  34. public WorkAreaViewModel(IInfoSendingService infoSendingService)
  35. {
  36. _infoSendingService = infoSendingService;
  37. _hardwares = new Hardwares();
  38. HardwareFileLoader hardwareFileLoader = new HardwareFileLoader(_hardwares);
  39. string folderPath = Path.Combine(new DirectoryInfo(Paths.LocalPath!)!.Parent!.Parent!.FullName, "Settings", "Hardwares");
  40. _mini8 = hardwareFileLoader.Load(folderPath) ? _hardwares.Mini8s : [];
  41. _mini8Channel = [];
  42. _alarmTypes = Enum.GetValues<AlarmType>();
  43. }
  44. partial void OnSelectedMini8IndexChanged(int value)
  45. {
  46. SelectedChannelIndex = -1;
  47. SelectedAlarmTypeIndex = -1;
  48. var index = Mini8.ElementAt(value).Key;
  49. Mini8Channel = _hardwares.Mini8Channels[index];
  50. }
  51. partial void OnSelectedChannelIndexChanged(int value)
  52. {
  53. SelectedAlarmTypeIndex = -1;
  54. }
  55. [RelayCommand]
  56. private void SendInfo()
  57. {
  58. if (SelectedMini8Index > -1 && SelectedChannelIndex > -1 && SelectedAlarmTypeIndex > -1)
  59. {
  60. // ChannelAlarmNotify = 1
  61. _infoSendingService.Send(1, new ST_ALARM()
  62. {
  63. Mini8Index = Mini8.ElementAt(SelectedMini8Index).Key,
  64. ChannelIndex = Mini8Channel.ElementAt(SelectedChannelIndex).Key,
  65. PV = PV,
  66. Caps = Caps,
  67. Floor = Floor,
  68. AlarmType = (AlarmType)SelectedAlarmTypeIndex
  69. });
  70. }
  71. }
  72. }
  73. }