AppContext.partials.PoolKernelViewModels.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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 PoolKernelViewModels : ViewModelBase {
  9. public static readonly PoolKernelViewModels Instance = new PoolKernelViewModels();
  10. private readonly Dictionary<Guid, PoolKernelViewModel> _dicById = new Dictionary<Guid, PoolKernelViewModel>();
  11. private PoolKernelViewModels() {
  12. #if DEBUG
  13. Write.Stopwatch.Start();
  14. #endif
  15. BuildEventPath<PoolKernelAddedEvent>("新添了矿池内核后刷新矿池内核VM内存", LogEnum.DevConsole,
  16. action: (message) => {
  17. if (!_dicById.ContainsKey(message.Source.GetId())) {
  18. PoolViewModel poolVm;
  19. if (AppContext.Instance.PoolVms.TryGetPoolVm(message.Source.PoolId, out poolVm)) {
  20. _dicById.Add(message.Source.GetId(), new PoolKernelViewModel(message.Source));
  21. poolVm.OnPropertyChanged(nameof(poolVm.PoolKernels));
  22. }
  23. }
  24. });
  25. BuildEventPath<PoolKernelRemovedEvent>("移除了币种内核后刷新矿池内核VM内存", LogEnum.DevConsole,
  26. action: (message) => {
  27. if (_dicById.ContainsKey(message.Source.GetId())) {
  28. var vm = _dicById[message.Source.GetId()];
  29. _dicById.Remove(message.Source.GetId());
  30. PoolViewModel poolVm;
  31. if (AppContext.Instance.PoolVms.TryGetPoolVm(vm.PoolId, out poolVm)) {
  32. poolVm.OnPropertyChanged(nameof(poolVm.PoolKernels));
  33. }
  34. }
  35. });
  36. BuildEventPath<PoolKernelUpdatedEvent>("更新了矿池内核后刷新VM内存", LogEnum.DevConsole,
  37. action: (message) => {
  38. if (_dicById.ContainsKey(message.Source.GetId())) {
  39. _dicById[message.Source.GetId()].Update(message.Source);
  40. }
  41. });
  42. Init();
  43. #if DEBUG
  44. var elapsedMilliseconds = Write.Stopwatch.Stop();
  45. Write.DevTimeSpan($"耗时{elapsedMilliseconds} {this.GetType().Name}.ctor");
  46. #endif
  47. }
  48. private void Init() {
  49. foreach (IPoolKernel item in NTMinerRoot.Instance.ServerContext.PoolKernelSet) {
  50. _dicById.Add(item.GetId(), new PoolKernelViewModel(item));
  51. }
  52. }
  53. public List<PoolKernelViewModel> AllPoolKernels {
  54. get {
  55. return _dicById.Values.ToList();
  56. }
  57. }
  58. }
  59. }
  60. }