AppContext.partials.KernelOutputTranslaterViewModels.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. using NTMiner.Core;
  2. using NTMiner.Vms;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. namespace NTMiner {
  7. public partial class AppContext {
  8. public class KernelOutputTranslaterViewModels : ViewModelBase {
  9. public static readonly KernelOutputTranslaterViewModels Instance = new KernelOutputTranslaterViewModels();
  10. private readonly Dictionary<Guid, List<KernelOutputTranslaterViewModel>> _dicByKernelOutputId = new Dictionary<Guid, List<KernelOutputTranslaterViewModel>>();
  11. private readonly Dictionary<Guid, KernelOutputTranslaterViewModel> _dicById = new Dictionary<Guid, KernelOutputTranslaterViewModel>();
  12. private KernelOutputTranslaterViewModels() {
  13. #if DEBUG
  14. Write.Stopwatch.Restart();
  15. #endif
  16. VirtualRoot.BuildEventPath<ServerContextReInitedEvent>("ServerContext刷新后刷新VM内存", LogEnum.DevConsole,
  17. action: message => {
  18. _dicById.Clear();
  19. _dicByKernelOutputId.Clear();
  20. Init();
  21. });
  22. VirtualRoot.BuildEventPath<ServerContextVmsReInitedEvent>("ServerContext的VM集刷新后刷新视图界面", LogEnum.DevConsole,
  23. action: message => {
  24. OnPropertyChanged(nameof(AllKernelOutputTranslaterVms));
  25. });
  26. AppContextEventPath<KernelOutputTranslaterAddedEvent>("添加了内核输出翻译器后刷新VM内存", LogEnum.DevConsole,
  27. action: message => {
  28. KernelOutputViewModel kernelOutputVm;
  29. if (AppContext.Instance.KernelOutputVms.TryGetKernelOutputVm(message.Source.KernelOutputId, out kernelOutputVm)) {
  30. if (!_dicByKernelOutputId.ContainsKey(message.Source.KernelOutputId)) {
  31. _dicByKernelOutputId.Add(message.Source.KernelOutputId, new List<KernelOutputTranslaterViewModel>());
  32. }
  33. var vm = new KernelOutputTranslaterViewModel(message.Source);
  34. _dicByKernelOutputId[message.Source.KernelOutputId].Add(vm);
  35. _dicById.Add(message.Source.GetId(), vm);
  36. kernelOutputVm.OnPropertyChanged(nameof(kernelOutputVm.KernelOutputTranslaters));
  37. }
  38. });
  39. AppContextEventPath<KernelOutputTranslaterUpdatedEvent>("更新了内核输出翻译器后刷新VM内存", LogEnum.DevConsole,
  40. action: message => {
  41. if (_dicByKernelOutputId.ContainsKey(message.Source.KernelOutputId)) {
  42. var item = _dicByKernelOutputId[message.Source.KernelOutputId].FirstOrDefault(a => a.Id == message.Source.GetId());
  43. if (item != null) {
  44. item.Update(message.Source);
  45. }
  46. }
  47. });
  48. AppContextEventPath<KernelOutputTranslaterRemovedEvent>("移除了内核输出翻译器后刷新VM内存", LogEnum.DevConsole,
  49. action: message => {
  50. if (_dicByKernelOutputId.ContainsKey(message.Source.KernelOutputId)) {
  51. var item = _dicByKernelOutputId[message.Source.KernelOutputId].FirstOrDefault(a => a.Id == message.Source.GetId());
  52. if (item != null) {
  53. _dicByKernelOutputId[message.Source.KernelOutputId].Remove(item);
  54. }
  55. }
  56. if (_dicById.ContainsKey(message.Source.GetId())) {
  57. _dicById.Remove(message.Source.GetId());
  58. }
  59. KernelOutputViewModel kernelOutputVm;
  60. if (AppContext.Instance.KernelOutputVms.TryGetKernelOutputVm(message.Source.KernelOutputId, out kernelOutputVm)) {
  61. kernelOutputVm.OnPropertyChanged(nameof(kernelOutputVm.KernelOutputTranslaters));
  62. }
  63. });
  64. Init();
  65. #if DEBUG
  66. Write.DevTimeSpan($"耗时{Write.Stopwatch.ElapsedMilliseconds}毫秒 {this.GetType().Name}.ctor");
  67. #endif
  68. }
  69. private void Init() {
  70. foreach (var item in NTMinerRoot.Instance.KernelOutputTranslaterSet) {
  71. if (!_dicByKernelOutputId.ContainsKey(item.KernelOutputId)) {
  72. _dicByKernelOutputId.Add(item.KernelOutputId, new List<KernelOutputTranslaterViewModel>());
  73. }
  74. var vm = new KernelOutputTranslaterViewModel(item);
  75. _dicByKernelOutputId[item.KernelOutputId].Add(vm);
  76. _dicById.Add(item.GetId(), vm);
  77. }
  78. }
  79. public IEnumerable<KernelOutputTranslaterViewModel> AllKernelOutputTranslaterVms {
  80. get {
  81. return _dicById.Values;
  82. }
  83. }
  84. public IEnumerable<KernelOutputTranslaterViewModel> GetListByKernelId(Guid kernelId) {
  85. if (_dicByKernelOutputId.ContainsKey(kernelId)) {
  86. return _dicByKernelOutputId[kernelId];
  87. }
  88. return new List<KernelOutputTranslaterViewModel>();
  89. }
  90. public KernelOutputTranslaterViewModel GetNextOne(Guid kernelOutputId, int sortNumber) {
  91. return GetListByKernelId(kernelOutputId).OrderBy(a => a.SortNumber).FirstOrDefault(a => a.SortNumber > sortNumber);
  92. }
  93. public KernelOutputTranslaterViewModel GetUpOne(Guid kernelOutputId, int sortNumber) {
  94. return GetListByKernelId(kernelOutputId).OrderByDescending(a => a.SortNumber).FirstOrDefault(a => a.SortNumber < sortNumber);
  95. }
  96. }
  97. }
  98. }