AppContext.partials.KernelOutputTranslaterViewModels.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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.Start();
  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. BuildEventPath<KernelOutputTranslaterAddedEvent>("添加了内核输出翻译器后刷新VM内存", LogEnum.DevConsole,
  27. action: message => {
  28. if (AppContext.Instance.KernelOutputVms.TryGetKernelOutputVm(message.Source.KernelOutputId, out KernelOutputViewModel kernelOutputVm)) {
  29. if (!_dicByKernelOutputId.ContainsKey(message.Source.KernelOutputId)) {
  30. _dicByKernelOutputId.Add(message.Source.KernelOutputId, new List<KernelOutputTranslaterViewModel>());
  31. }
  32. var vm = new KernelOutputTranslaterViewModel(message.Source);
  33. _dicByKernelOutputId[message.Source.KernelOutputId].Add(vm);
  34. _dicById.Add(message.Source.GetId(), vm);
  35. kernelOutputVm.OnPropertyChanged(nameof(kernelOutputVm.KernelOutputTranslaters));
  36. }
  37. });
  38. BuildEventPath<KernelOutputTranslaterUpdatedEvent>("更新了内核输出翻译器后刷新VM内存", LogEnum.DevConsole,
  39. action: message => {
  40. if (_dicByKernelOutputId.ContainsKey(message.Source.KernelOutputId)) {
  41. var item = _dicByKernelOutputId[message.Source.KernelOutputId].FirstOrDefault(a => a.Id == message.Source.GetId());
  42. if (item != null) {
  43. item.Update(message.Source);
  44. }
  45. }
  46. });
  47. BuildEventPath<KernelOutputTranslaterRemovedEvent>("移除了内核输出翻译器后刷新VM内存", LogEnum.DevConsole,
  48. action: message => {
  49. if (_dicByKernelOutputId.ContainsKey(message.Source.KernelOutputId)) {
  50. var item = _dicByKernelOutputId[message.Source.KernelOutputId].FirstOrDefault(a => a.Id == message.Source.GetId());
  51. if (item != null) {
  52. _dicByKernelOutputId[message.Source.KernelOutputId].Remove(item);
  53. }
  54. }
  55. if (_dicById.ContainsKey(message.Source.GetId())) {
  56. _dicById.Remove(message.Source.GetId());
  57. }
  58. if (AppContext.Instance.KernelOutputVms.TryGetKernelOutputVm(message.Source.KernelOutputId, out KernelOutputViewModel kernelOutputVm)) {
  59. kernelOutputVm.OnPropertyChanged(nameof(kernelOutputVm.KernelOutputTranslaters));
  60. }
  61. });
  62. Init();
  63. #if DEBUG
  64. var elapsedMilliseconds = Write.Stopwatch.Stop();
  65. if (elapsedMilliseconds.ElapsedMilliseconds > NTStopwatch.ElapsedMilliseconds) {
  66. Write.DevTimeSpan($"耗时{elapsedMilliseconds} {this.GetType().Name}.ctor");
  67. }
  68. #endif
  69. }
  70. private void Init() {
  71. foreach (var item in NTMinerRoot.Instance.ServerContext.KernelOutputTranslaterSet.AsEnumerable()) {
  72. if (!_dicByKernelOutputId.ContainsKey(item.KernelOutputId)) {
  73. _dicByKernelOutputId.Add(item.KernelOutputId, new List<KernelOutputTranslaterViewModel>());
  74. }
  75. var vm = new KernelOutputTranslaterViewModel(item);
  76. _dicByKernelOutputId[item.KernelOutputId].Add(vm);
  77. _dicById.Add(item.GetId(), vm);
  78. }
  79. }
  80. public IEnumerable<KernelOutputTranslaterViewModel> AllKernelOutputTranslaterVms {
  81. get {
  82. return _dicById.Values;
  83. }
  84. }
  85. public IEnumerable<KernelOutputTranslaterViewModel> GetListByKernelId(Guid kernelId) {
  86. if (_dicByKernelOutputId.ContainsKey(kernelId)) {
  87. return _dicByKernelOutputId[kernelId];
  88. }
  89. return new List<KernelOutputTranslaterViewModel>();
  90. }
  91. public KernelOutputTranslaterViewModel GetNextOne(Guid kernelOutputId, int sortNumber) {
  92. return GetListByKernelId(kernelOutputId).OrderBy(a => a.SortNumber).FirstOrDefault(a => a.SortNumber > sortNumber);
  93. }
  94. public KernelOutputTranslaterViewModel GetUpOne(Guid kernelOutputId, int sortNumber) {
  95. return GetListByKernelId(kernelOutputId).OrderByDescending(a => a.SortNumber).FirstOrDefault(a => a.SortNumber < sortNumber);
  96. }
  97. }
  98. }
  99. }