AppRoot.partials.CoinKernelViewModels.cs 5.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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 CoinKernelViewModels : ViewModelBase {
  8. public static CoinKernelViewModels Instance { get; private set; } = new CoinKernelViewModels();
  9. private readonly Dictionary<Guid, CoinKernelViewModel> _dicById = new Dictionary<Guid, CoinKernelViewModel>();
  10. private CoinKernelViewModels() {
  11. if (WpfUtil.IsInDesignMode) {
  12. return;
  13. }
  14. VirtualRoot.BuildEventPath<ServerContextReInitedEvent>("ServerContext刷新后刷新VM内存", LogEnum.DevConsole,
  15. path: message => {
  16. _dicById.Clear();
  17. Init();
  18. }, location: this.GetType());
  19. VirtualRoot.BuildEventPath<ServerContextReInitedEventHandledEvent>("ServerContext的VM集刷新后刷新视图界面", LogEnum.DevConsole,
  20. path: message => {
  21. OnPropertyChanged(nameof(AllCoinKernels));
  22. }, location: this.GetType());
  23. BuildEventPath<CoinKernelAddedEvent>("添加了币种内核后刷新VM内存", LogEnum.DevConsole,
  24. path: (message) => {
  25. var coinKernelVm = new CoinKernelViewModel(message.Source);
  26. _dicById.Add(message.Source.GetId(), coinKernelVm);
  27. OnPropertyChanged(nameof(AllCoinKernels));
  28. var kernelVm = coinKernelVm.Kernel;
  29. if (kernelVm != null) {
  30. kernelVm.OnPropertyChanged(nameof(kernelVm.CoinKernels));
  31. kernelVm.OnPropertyChanged(nameof(kernelVm.CoinVms));
  32. kernelVm.OnPropertyChanged(nameof(kernelVm.SupportedCoinVms));
  33. kernelVm.OnPropertyChanged(nameof(kernelVm.SupportedCoins));
  34. }
  35. VirtualRoot.RaiseEvent(new CoinKernelVmAddedEvent(message));
  36. }, location: this.GetType());
  37. BuildEventPath<CoinKernelUpdatedEvent>("更新了币种内核后刷新VM内存", LogEnum.DevConsole,
  38. path: (message) => {
  39. if (_dicById.TryGetValue(message.Source.GetId(), out CoinKernelViewModel vm)) {
  40. var supportedGpu = vm.SupportedGpu;
  41. Guid dualCoinGroupId = vm.DualCoinGroupId;
  42. vm.Update(message.Source);
  43. if (supportedGpu != vm.SupportedGpu) {
  44. var coinKernels = AllCoinKernels.Where(a => a.KernelId == vm.Id);
  45. foreach (var coinKernel in coinKernels) {
  46. if (CoinVms.TryGetCoinVm(coinKernel.CoinId, out CoinViewModel coinVm)) {
  47. coinVm.OnPropertyChanged(nameof(coinVm.IsSupported));
  48. coinVm.OnPropertyChanged(nameof(coinVm.CoinKernels));
  49. }
  50. }
  51. var kernelVm = vm.Kernel;
  52. kernelVm.OnPropertyChanged(nameof(kernelVm.CoinKernels));
  53. }
  54. }
  55. }, location: this.GetType());
  56. BuildEventPath<CoinKernelRemovedEvent>("移除了币种内核后刷新VM内存", LogEnum.DevConsole,
  57. path: (message) => {
  58. if (_dicById.TryGetValue(message.Source.GetId(), out CoinKernelViewModel coinKernelVm)) {
  59. _dicById.Remove(message.Source.GetId());
  60. OnPropertyChanged(nameof(AllCoinKernels));
  61. var kernelVm = coinKernelVm.Kernel;
  62. kernelVm.OnPropertyChanged(nameof(kernelVm.CoinKernels));
  63. kernelVm.OnPropertyChanged(nameof(kernelVm.CoinVms));
  64. kernelVm.OnPropertyChanged(nameof(kernelVm.SupportedCoinVms));
  65. kernelVm.OnPropertyChanged(nameof(kernelVm.SupportedCoins));
  66. VirtualRoot.RaiseEvent(new CoinKernelVmRemovedEvent(message));
  67. }
  68. }, location: this.GetType());
  69. Init();
  70. }
  71. private void Init() {
  72. foreach (var item in NTMinerContext.Instance.ServerContext.CoinKernelSet.AsEnumerable()) {
  73. _dicById.Add(item.GetId(), new CoinKernelViewModel(item));
  74. }
  75. }
  76. public bool TryGetCoinKernelVm(Guid id, out CoinKernelViewModel vm) {
  77. return _dicById.TryGetValue(id, out vm);
  78. }
  79. public List<CoinKernelViewModel> AllCoinKernels {
  80. get {
  81. return _dicById.Values.ToList();
  82. }
  83. }
  84. }
  85. }
  86. }