private void CoinOverClock(INTMinerContext root, Guid coinId) { try { if (IsOverClockGpuAll(coinId)) { GpuProfileData overClockData = _data.GpuProfiles.FirstOrDefault(a => a.CoinId == coinId && a.Index == NTMinerContext.GpuAllId); if (overClockData != null) { OverClock(root, overClockData); } } else { foreach (var overClockData in _data.GpuProfiles.Where(a => a.CoinId == coinId)) { if (overClockData.Index != NTMinerContext.GpuAllId) { OverClock(root, overClockData); } } } } catch (Exception e) { Logger.ErrorDebugLine(e); } }
public GpuProfileSet(INTMinerRoot root) { VirtualRoot.Window <AddOrUpdateGpuProfileCommand>("处理添加或更新Gpu超频数据命令", LogEnum.DevConsole, action: message => { GpuProfileData data = _data.GpuProfiles.FirstOrDefault(a => a.CoinId == message.Input.CoinId && a.Index == message.Input.Index); if (data != null) { data.Update(message.Input); Save(); } else { data = new GpuProfileData(message.Input); _data.GpuProfiles.Add(data); Save(); } VirtualRoot.Happened(new GpuProfileAddedOrUpdatedEvent(data)); }); VirtualRoot.Window <CoinOverClockCommand>("处理币种超频命令", LogEnum.DevConsole, action: message => { Task.Factory.StartNew(() => { CoinOverClock(root, message.CoinId); VirtualRoot.Happened(new CoinOverClockDoneEvent(message.Id)); }); }); }
public GpuProfileSet(INTMinerContext ntminerContext) { VirtualRoot.BuildCmdPath <AddOrUpdateGpuProfileCommand>(path: message => { GpuProfileData data = _data.GpuProfiles.FirstOrDefault(a => a.CoinId == message.Input.CoinId && a.Index == message.Input.Index); if (data != null) { data.Update(message.Input); Save(); } else { data = new GpuProfileData().Update(message.Input); _data.GpuProfiles.Add(data); Save(); } VirtualRoot.RaiseEvent(new GpuProfileAddedOrUpdatedEvent(message.MessageId, data)); }, location: this.GetType()); // 注意:这个命令处理程序不能放在展示层注册。修复通过群控超频不生效的BUG:这是一个难以发现的老BUG,以前的版本也存 // 在这个BUG,BUG具体表现是当没有点击过挖矿端主界面上的算力Tab页时通过群控超频无效。感谢矿友发现问题,已经修复。 VirtualRoot.BuildCmdPath <CoinOverClockCommand>(path: message => { Task.Factory.StartNew(() => { CoinOverClock(ntminerContext, message.CoinId); VirtualRoot.RaiseEvent(new CoinOverClockDoneEvent(targetPathId: message.MessageId)); }); }, location: this.GetType()); }
public IGpuProfile GetGpuProfile(Guid coinId, int index) { InitOnece(); GpuProfileData data = _data.GpuProfiles.FirstOrDefault(a => a.CoinId == coinId && a.Index == index); if (data == null) { return(new GpuProfileData(coinId, index)); } return(data); }
public void Register(INTMinerRoot root) { VirtualRoot.Window <AddOrUpdateGpuProfileCommand>("处理添加或更新Gpu超频数据命令", LogEnum.DevConsole, action: message => { GpuProfileData data = _data.GpuProfiles.FirstOrDefault(a => a.CoinId == message.Input.CoinId && a.Index == message.Input.Index); if (data != null) { data.Update(message.Input); Save(); } else { data = new GpuProfileData(message.Input); _data.GpuProfiles.Add(data); Save(); } VirtualRoot.Happened(new GpuProfileAddedOrUpdatedEvent(data)); }); VirtualRoot.Window <OverClockCommand>("处理超频命令", LogEnum.DevConsole, action: message => { if (root.GpuSet.TryGetGpu(message.Input.Index, out IGpu gpu)) { message.Input.OverClock(gpu.OverClock); } }); VirtualRoot.Window <CoinOverClockCommand>("处理币种超频命令", LogEnum.DevConsole, action: message => { if (IsOverClockGpuAll(message.CoinId)) { GpuProfileData overClockData = _data.GpuProfiles.FirstOrDefault(a => a.CoinId == message.CoinId && a.Index == NTMinerRoot.GpuAllId); if (overClockData != null) { VirtualRoot.Execute(new OverClockCommand(overClockData)); } } else { foreach (var overClockData in _data.GpuProfiles.Where(a => a.CoinId == message.CoinId)) { if (overClockData.Index != NTMinerRoot.GpuAllId) { VirtualRoot.Execute(new OverClockCommand(overClockData)); } } } }); }
public GpuProfileSet(INTMinerContext root) { VirtualRoot.AddCmdPath <AddOrUpdateGpuProfileCommand>(action: message => { GpuProfileData data = _data.GpuProfiles.FirstOrDefault(a => a.CoinId == message.Input.CoinId && a.Index == message.Input.Index); if (data != null) { data.Update(message.Input); Save(); } else { data = new GpuProfileData().Update(message.Input); _data.GpuProfiles.Add(data); Save(); } VirtualRoot.RaiseEvent(new GpuProfileAddedOrUpdatedEvent(message.MessageId, data)); }, location: this.GetType()); VirtualRoot.AddCmdPath <CoinOverClockCommand>(action: message => { Task.Factory.StartNew(() => { CoinOverClock(root, message.CoinId); VirtualRoot.RaiseEvent(new CoinOverClockDoneEvent(targetPathId: message.MessageId)); }); }, location: this.GetType()); }
public void SetData(GpuProfilesJsonDb data) { _data = data; if (data != null) { string iconName; GpuType gpuType = _minerClientVm.GpuType; if (gpuType == GpuType.Empty) { gpuType = data.GpuType; } IsEnabled = data.Gpus != null && data.Gpus.Length != 0; RedText = "超频有风险,操作需谨慎"; switch (_minerClientVm.GpuType) { case GpuType.NVIDIA: iconName = "Icon_Nvidia"; GpuIconFill = "Red"; break; case GpuType.AMD: iconName = "Icon_Amd"; GpuIconFill = "Green"; break; case GpuType.Empty: default: iconName = "Icon_GpuEmpty"; GpuIconFill = "Gray"; break; } GpuIcon = AppUtil.GetResource <Geometry>(iconName); foreach (var coinVm in AppRoot.CoinVms.MainCoins) { var coinOverClock = data.CoinOverClocks.FirstOrDefault(a => a.CoinId == coinVm.Id); var gpuProfiles = data.GpuProfiles.Where(a => a.CoinId == coinVm.Id).ToArray(); if (coinOverClock == null) { coinOverClock = new CoinOverClockData() { CoinId = coinVm.Id, IsOverClockEnabled = false, IsOverClockGpuAll = true }; } coinVm.IsOverClockEnabled = coinOverClock.IsOverClockEnabled; coinVm.IsOverClockGpuAll = coinOverClock.IsOverClockGpuAll; List <GpuProfileViewModel> gpuProfileVms = new List <GpuProfileViewModel>(); GpuProfileViewModel gpuAllProfileVm = null; #region foreach (var gpu in data.Gpus.OrderBy(a => a.Index)) { var gpuProfile = gpuProfiles.FirstOrDefault(a => a.Index == gpu.Index); if (gpuProfile == null) { gpuProfile = new GpuProfileData(coinVm.Id, gpu.Index); } var gpuVm = new GpuViewModel(gpu, data.Gpus); if (gpu.Index == NTMinerContext.GpuAllId) { gpuAllProfileVm = new GpuProfileViewModel(gpuProfile, gpuVm); } else { gpuProfileVms.Add(new GpuProfileViewModel(gpuProfile, gpuVm)); } } if (gpuAllProfileVm == null) { gpuAllProfileVm = new GpuProfileViewModel( new GpuProfileData(coinVm.Id, NTMinerContext.GpuAllId), new GpuViewModel(new GpuData { GpuType = gpuType, Index = NTMinerContext.GpuAllId, Name = "All" }, data.Gpus)); } #endregion coinVm.GpuAllProfileVm = gpuAllProfileVm; coinVm.GpuProfileVms = gpuProfileVms; } } }
public GpuProfilesPageViewModel(MinerClientsWindowViewModel minerClientsWindowVm) { _minerClientsWindowVm = minerClientsWindowVm; if (minerClientsWindowVm.SelectedMinerClients == null && minerClientsWindowVm.SelectedMinerClients.Length != 1) { throw new InvalidProgramException(); } _minerClientVm = minerClientsWindowVm.SelectedMinerClients[0]; this.Save = new DelegateCommand(() => { if (_data == null) { return; } GpuProfilesJsonDb jsonObj = new GpuProfilesJsonDb() { Gpus = _data.Gpus }; foreach (var coinVm in CoinVms.MainCoins) { if (coinVm.IsOverClockEnabled) { jsonObj.CoinOverClocks.Add(new CoinOverClockData() { CoinId = coinVm.Id, IsOverClockEnabled = coinVm.IsOverClockEnabled, IsOverClockGpuAll = coinVm.IsOverClockGpuAll }); if (CoinVm.IsOverClockGpuAll) { jsonObj.GpuProfiles.Add(new GpuProfileData(coinVm.GpuAllProfileVm)); } jsonObj.GpuProfiles.AddRange(coinVm.GpuProfileVms.Select(a => new GpuProfileData(a))); } } string json = VirtualRoot.JsonSerializer.Serialize(jsonObj); foreach (var client in minerClientsWindowVm.SelectedMinerClients) { Client.NTMinerDaemonService.SaveGpuProfilesJsonAsync(client.MinerIp, json); } NotiCenterWindowViewModel.Instance.Manager.ShowSuccessMessage("应用成功,请观察效果"); CloseWindow?.Invoke(); }); Client.NTMinerDaemonService.GetGpuProfilesJsonAsync(_minerClientVm.MinerIp, (data, e) => { _data = data; if (e != null) { Write.UserError(e.Message); } else if (data != null) { string iconName; switch (_minerClientVm.GpuType) { case GpuType.NVIDIA: case GpuType.AMD: iconName = "Icon_Nvidia"; GpuIconFill = "Green"; RedText = "超频有风险,操作需谨慎"; IsEnabled = true; break; case GpuType.Empty: default: iconName = "Icon_GpuEmpty"; GpuIconFill = "Gray"; RedText = "没有矿卡或矿卡未驱动"; IsEnabled = false; break; } GpuIcon = (Geometry)System.Windows.Application.Current.Resources[iconName]; foreach (var coinVm in AppContext.Instance.CoinVms.MainCoins) { var coinOverClock = data.CoinOverClocks.FirstOrDefault(a => a.CoinId == coinVm.Id); var gpuProfiles = data.GpuProfiles.Where(a => a.CoinId == coinVm.Id).ToArray(); if (coinOverClock == null) { coinOverClock = new CoinOverClockData() { CoinId = coinVm.Id, IsOverClockEnabled = false, IsOverClockGpuAll = true }; } coinVm.IsOverClockEnabled = coinOverClock.IsOverClockEnabled; coinVm.IsOverClockGpuAll = coinOverClock.IsOverClockGpuAll; List <GpuProfileViewModel> gpuProfileVms = new List <GpuProfileViewModel>(); GpuProfileViewModel gpuAllProfileVm = null; #region foreach (var gpu in data.Gpus.OrderBy(a => a.Index)) { var gpuProfile = gpuProfiles.FirstOrDefault(a => a.Index == gpu.Index); if (gpuProfile == null) { gpuProfile = new GpuProfileData(coinVm.Id, gpu.Index); } var gpuVm = new GpuViewModel(gpu, data.Gpus); if (gpu.Index == NTMinerRoot.GpuAllId) { gpuAllProfileVm = new GpuProfileViewModel(gpuProfile, gpuVm); } else { gpuProfileVms.Add(new GpuProfileViewModel(gpuProfile, gpuVm)); } } if (gpuAllProfileVm == null) { gpuAllProfileVm = new GpuProfileViewModel( new GpuProfileData(coinVm.Id, NTMinerRoot.GpuAllId), new GpuViewModel(new GpuData { Index = NTMinerRoot.GpuAllId, Name = "All" }, data.Gpus)); } #endregion coinVm.GpuAllProfileVm = gpuAllProfileVm; coinVm.GpuProfileVms = gpuProfileVms; } this.CoinVm = CoinVms.MainCoins.FirstOrDefault(a => a.IsOverClockEnabled); if (this.CoinVm == null) { this.CoinVm = CoinVms.MainCoins.FirstOrDefault(); } } }); }