using NTMiner.Core; using NTMiner.Vms; using System; using System.Collections.Generic; using System.Linq; namespace NTMiner { public partial class AppContext { public class KernelOutputTranslaterViewModels : ViewModelBase { public static readonly KernelOutputTranslaterViewModels Instance = new KernelOutputTranslaterViewModels(); private readonly Dictionary> _dicByKernelOutputId = new Dictionary>(); private readonly Dictionary _dicById = new Dictionary(); private KernelOutputTranslaterViewModels() { #if DEBUG Write.Stopwatch.Restart(); #endif VirtualRoot.BuildEventPath("ServerContext刷新后刷新VM内存", LogEnum.DevConsole, action: message => { _dicById.Clear(); _dicByKernelOutputId.Clear(); Init(); }); VirtualRoot.BuildEventPath("ServerContext的VM集刷新后刷新视图界面", LogEnum.DevConsole, action: message => { OnPropertyChanged(nameof(AllKernelOutputTranslaterVms)); }); AppContextEventPath("添加了内核输出翻译器后刷新VM内存", LogEnum.DevConsole, action: message => { KernelOutputViewModel kernelOutputVm; if (AppContext.Instance.KernelOutputVms.TryGetKernelOutputVm(message.Source.KernelOutputId, out kernelOutputVm)) { if (!_dicByKernelOutputId.ContainsKey(message.Source.KernelOutputId)) { _dicByKernelOutputId.Add(message.Source.KernelOutputId, new List()); } var vm = new KernelOutputTranslaterViewModel(message.Source); _dicByKernelOutputId[message.Source.KernelOutputId].Add(vm); _dicById.Add(message.Source.GetId(), vm); kernelOutputVm.OnPropertyChanged(nameof(kernelOutputVm.KernelOutputTranslaters)); } }); AppContextEventPath("更新了内核输出翻译器后刷新VM内存", LogEnum.DevConsole, action: message => { if (_dicByKernelOutputId.ContainsKey(message.Source.KernelOutputId)) { var item = _dicByKernelOutputId[message.Source.KernelOutputId].FirstOrDefault(a => a.Id == message.Source.GetId()); if (item != null) { item.Update(message.Source); } } }); AppContextEventPath("移除了内核输出翻译器后刷新VM内存", LogEnum.DevConsole, action: message => { if (_dicByKernelOutputId.ContainsKey(message.Source.KernelOutputId)) { var item = _dicByKernelOutputId[message.Source.KernelOutputId].FirstOrDefault(a => a.Id == message.Source.GetId()); if (item != null) { _dicByKernelOutputId[message.Source.KernelOutputId].Remove(item); } } if (_dicById.ContainsKey(message.Source.GetId())) { _dicById.Remove(message.Source.GetId()); } KernelOutputViewModel kernelOutputVm; if (AppContext.Instance.KernelOutputVms.TryGetKernelOutputVm(message.Source.KernelOutputId, out kernelOutputVm)) { kernelOutputVm.OnPropertyChanged(nameof(kernelOutputVm.KernelOutputTranslaters)); } }); Init(); #if DEBUG Write.DevTimeSpan($"耗时{Write.Stopwatch.ElapsedMilliseconds}毫秒 {this.GetType().Name}.ctor"); #endif } private void Init() { foreach (var item in NTMinerRoot.Instance.KernelOutputTranslaterSet) { if (!_dicByKernelOutputId.ContainsKey(item.KernelOutputId)) { _dicByKernelOutputId.Add(item.KernelOutputId, new List()); } var vm = new KernelOutputTranslaterViewModel(item); _dicByKernelOutputId[item.KernelOutputId].Add(vm); _dicById.Add(item.GetId(), vm); } } public IEnumerable AllKernelOutputTranslaterVms { get { return _dicById.Values; } } public IEnumerable GetListByKernelId(Guid kernelId) { if (_dicByKernelOutputId.ContainsKey(kernelId)) { return _dicByKernelOutputId[kernelId]; } return new List(); } public KernelOutputTranslaterViewModel GetNextOne(Guid kernelOutputId, int sortNumber) { return GetListByKernelId(kernelOutputId).OrderBy(a => a.SortNumber).FirstOrDefault(a => a.SortNumber > sortNumber); } public KernelOutputTranslaterViewModel GetUpOne(Guid kernelOutputId, int sortNumber) { return GetListByKernelId(kernelOutputId).OrderByDescending(a => a.SortNumber).FirstOrDefault(a => a.SortNumber < sortNumber); } } } }