AppRoot.partials.KernelOutputKeywordViewModels.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. using NTMiner.Vms;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. namespace NTMiner {
  6. public static partial class AppRoot {
  7. public class KernelOutputKeywordViewModels : ViewModelBase {
  8. public static KernelOutputKeywordViewModels Instance { get; private set; } = new KernelOutputKeywordViewModels();
  9. private readonly Dictionary<Guid, List<KernelOutputKeywordViewModel>> _dicByKernelOutputId = new Dictionary<Guid, List<KernelOutputKeywordViewModel>>();
  10. private readonly Dictionary<Guid, KernelOutputKeywordViewModel> _dicById = new Dictionary<Guid, KernelOutputKeywordViewModel>();
  11. private KernelOutputKeywordViewModels() {
  12. if (WpfUtil.IsInDesignMode) {
  13. return;
  14. }
  15. BuildEventPath<KernelOutputKeywordLoadedEvent>("从服务器加载了内核输入关键字后刷新Vm集", LogEnum.DevConsole,
  16. path: message => {
  17. KernelOutputKeywordViewModel[] toRemoves = _dicById.Where(a => a.Value.GetDataLevel() == DataLevel.Global).Select(a => a.Value).ToArray();
  18. foreach (var item in toRemoves) {
  19. _dicById.Remove(item.Id);
  20. }
  21. foreach (var kv in _dicByKernelOutputId) {
  22. foreach (var toRemove in toRemoves.Where(a=>a.KernelOutputId == kv.Key)) {
  23. kv.Value.Remove(toRemove);
  24. }
  25. }
  26. if (message.Data != null && message.Data.Count != 0) {
  27. foreach (var item in message.Data) {
  28. var vm = new KernelOutputKeywordViewModel(item);
  29. if (!_dicById.ContainsKey(item.Id)) {
  30. _dicById.Add(item.Id, vm);
  31. }
  32. if (!_dicByKernelOutputId.ContainsKey(item.KernelOutputId)) {
  33. _dicByKernelOutputId.Add(item.KernelOutputId, new List<KernelOutputKeywordViewModel>());
  34. }
  35. _dicByKernelOutputId[item.KernelOutputId].Add(vm);
  36. }
  37. }
  38. if (NTMinerContext.Instance.CurrentMineContext != null) {
  39. if (KernelOutputVms.TryGetKernelOutputVm(NTMinerContext.Instance.CurrentMineContext.KernelOutput.GetId(), out KernelOutputViewModel kernelOutputVm)) {
  40. kernelOutputVm.OnPropertyChanged(nameof(kernelOutputVm.KernelOutputKeywords));
  41. }
  42. }
  43. }, location: this.GetType());
  44. BuildEventPath<UserKernelOutputKeywordAddedEvent>("添加了内核输出过滤器后刷新VM内存", LogEnum.DevConsole,
  45. path: message => {
  46. if (!_dicById.ContainsKey(message.Source.GetId())) {
  47. KernelOutputKeywordViewModel vm = new KernelOutputKeywordViewModel(message.Source);
  48. _dicById.Add(vm.Id, vm);
  49. if (KernelOutputVms.TryGetKernelOutputVm(vm.KernelOutputId, out KernelOutputViewModel kernelOutputVm)) {
  50. if (!_dicByKernelOutputId.ContainsKey(vm.KernelOutputId)) {
  51. _dicByKernelOutputId.Add(vm.KernelOutputId, new List<KernelOutputKeywordViewModel>());
  52. }
  53. _dicByKernelOutputId[vm.KernelOutputId].Add(vm);
  54. kernelOutputVm.OnPropertyChanged(nameof(kernelOutputVm.KernelOutputKeywords));
  55. }
  56. }
  57. }, location: this.GetType());
  58. BuildEventPath<UserKernelOutputKeywordUpdatedEvent>("更新了内核输出过滤器后刷新VM内存", LogEnum.DevConsole,
  59. path: message => {
  60. if (_dicById.TryGetValue(message.Source.GetId(), out KernelOutputKeywordViewModel vm)) {
  61. vm.Update(message.Source);
  62. }
  63. }, location: this.GetType());
  64. BuildEventPath<UserKernelOutputKeywordRemovedEvent>("删除了内核输出过滤器后刷新VM内存", LogEnum.DevConsole,
  65. path: message => {
  66. if (_dicById.TryGetValue(message.Source.GetId(), out KernelOutputKeywordViewModel vm)) {
  67. _dicById.Remove(vm.Id);
  68. _dicByKernelOutputId[vm.KernelOutputId].Remove(vm);
  69. if (KernelOutputVms.TryGetKernelOutputVm(vm.KernelOutputId, out KernelOutputViewModel kernelOutputVm)) {
  70. kernelOutputVm.OnPropertyChanged(nameof(kernelOutputVm.KernelOutputKeywords));
  71. }
  72. }
  73. }, location: this.GetType());
  74. Init();
  75. }
  76. private void Init() {
  77. foreach (var item in NTMinerContext.Instance.KernelOutputKeywordSet.AsEnumerable()) {
  78. var vm = new KernelOutputKeywordViewModel(item);
  79. if (!_dicById.ContainsKey(item.GetId())) {
  80. _dicById.Add(item.GetId(), vm);
  81. }
  82. if (!_dicByKernelOutputId.ContainsKey(item.KernelOutputId)) {
  83. _dicByKernelOutputId.Add(item.KernelOutputId, new List<KernelOutputKeywordViewModel>());
  84. }
  85. _dicByKernelOutputId[item.KernelOutputId].Add(vm);
  86. }
  87. }
  88. public IEnumerable<KernelOutputKeywordViewModel> GetListByKernelId(Guid kernelOutputId) {
  89. if (_dicByKernelOutputId.ContainsKey(kernelOutputId)) {
  90. return _dicByKernelOutputId[kernelOutputId];
  91. }
  92. return new List<KernelOutputKeywordViewModel>();
  93. }
  94. }
  95. }
  96. }