AppRoot.partials.KernelViewModels.cs 4.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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 static partial class AppRoot {
  8. public class KernelViewModels : ViewModelBase {
  9. public static KernelViewModels Instance { get; private set; } = new KernelViewModels();
  10. private readonly Dictionary<Guid, KernelViewModel> _dicById = new Dictionary<Guid, KernelViewModel>();
  11. public event Action<KernelViewModel> IsDownloadingChanged;
  12. public void OnIsDownloadingChanged(KernelViewModel kernelVm) {
  13. IsDownloadingChanged?.Invoke(kernelVm);
  14. }
  15. private KernelViewModels() {
  16. if (WpfUtil.IsInDesignMode) {
  17. return;
  18. }
  19. VirtualRoot.BuildEventPath<ServerContextReInitedEvent>("ServerContext刷新后刷新VM内存", LogEnum.DevConsole,
  20. path: message => {
  21. _dicById.Clear();
  22. Init();
  23. }, location: this.GetType());
  24. VirtualRoot.BuildEventPath<ServerContextReInitedEventHandledEvent>("ServerContext的VM集刷新后刷新视图界面", LogEnum.DevConsole,
  25. path: message => {
  26. OnPropertyChanged(nameof(AllKernels));
  27. }, location: this.GetType());
  28. BuildEventPath<KernelAddedEvent>("添加了内核后调整VM内存", LogEnum.DevConsole,
  29. path: (message) => {
  30. _dicById.Add(message.Source.GetId(), new KernelViewModel(message.Source));
  31. OnPropertyChanged(nameof(AllKernels));
  32. foreach (var coinKernelVm in CoinKernelVms.AllCoinKernels.Where(a => a.KernelId == message.Source.GetId())) {
  33. coinKernelVm.OnPropertyChanged(nameof(coinKernelVm.IsSupportDualMine));
  34. }
  35. }, location: this.GetType());
  36. BuildEventPath<KernelRemovedEvent>("删除了内核后调整VM内存", LogEnum.DevConsole,
  37. path: message => {
  38. _dicById.Remove(message.Source.GetId());
  39. OnPropertyChanged(nameof(AllKernels));
  40. foreach (var coinKernelVm in CoinKernelVms.AllCoinKernels.Where(a => a.KernelId == message.Source.GetId())) {
  41. coinKernelVm.OnPropertyChanged(nameof(coinKernelVm.IsSupportDualMine));
  42. }
  43. }, location: this.GetType());
  44. BuildEventPath<KernelUpdatedEvent>("更新了内核后调整VM内存", LogEnum.DevConsole,
  45. path: message => {
  46. if (_dicById.TryGetValue(message.Source.GetId(), out KernelViewModel vm)) {
  47. PublishStatus publishStatus = vm.PublishState;
  48. Guid kernelInputId = vm.KernelInputId;
  49. vm.Update(message.Source);
  50. if (publishStatus != vm.PublishState) {
  51. foreach (var coinKernelVm in CoinKernelVms.AllCoinKernels.Where(a => a.KernelId == vm.Id)) {
  52. foreach (var coinVm in CoinVms.AllCoins.Where(a => a.Id == coinKernelVm.CoinId)) {
  53. coinVm.OnPropertyChanged(nameof(coinVm.CoinKernels));
  54. }
  55. }
  56. }
  57. if (kernelInputId != vm.KernelInputId) {
  58. CoinViewModel coinVm = MinerProfileVm.CoinVm;
  59. if (coinVm != null && coinVm.CoinKernel != null && coinVm.CoinKernel.Kernel.Id == vm.Id) {
  60. NTMinerContext.RefreshArgsAssembly.Invoke("当前选用的内核切换了引用的内核输入");
  61. }
  62. }
  63. }
  64. }, location: this.GetType());
  65. Init();
  66. }
  67. private void Init() {
  68. foreach (var item in NTMinerContext.Instance.ServerContext.KernelSet.AsEnumerable()) {
  69. _dicById.Add(item.GetId(), new KernelViewModel(item));
  70. }
  71. }
  72. public bool TryGetKernelVm(Guid kernelId, out KernelViewModel kernelVm) {
  73. return _dicById.TryGetValue(kernelId, out kernelVm);
  74. }
  75. public List<KernelViewModel> AllKernels {
  76. get {
  77. return _dicById.Values.ToList();
  78. }
  79. }
  80. }
  81. }
  82. }