protected override void Init() { string json = HomePath.ReadGpuProfilesJsonFile(); if (!string.IsNullOrEmpty(json)) { GpuProfilesJsonDb data = VirtualRoot.JsonSerializer.Deserialize <GpuProfilesJsonDb>(json); if (data != null) { if (!IsGpusModified(data.Gpus)) { _data = data; } else { if (data.GpuProfiles.Any()) { VirtualRoot.ThisLocalWarn(nameof(GpuProfileSet), "检测到本机显卡发生过变更,请重新填写超频数据。", OutEnum.Warn); } Save(); } } else { Save(); } } else { Save(); } }
public LocalIpSet() { NetworkChange.NetworkAddressChanged += (object sender, EventArgs e) => { var old = _localIps; Refresh(); var localIps = _localIps; if (old.Count != localIps.Count) { VirtualRoot.ThisLocalWarn(nameof(LocalIpSet), "网络接口的 IP 地址发生了更改", toConsole: true); } else { for (int i = 0; i < old.Count; i++) { if (old[i] != localIps[i]) { VirtualRoot.ThisLocalWarn(nameof(LocalIpSet), "网络接口的 IP 地址发生了更改", toConsole: true); break; } } } }; NetworkChange.NetworkAvailabilityChanged += (object sender, NetworkAvailabilityEventArgs e) => { if (e.IsAvailable) { VirtualRoot.ThisLocalInfo(nameof(LocalIpSet), $"网络可用", toConsole: true); } else { VirtualRoot.ThisLocalWarn(nameof(LocalIpSet), $"网络不可用", toConsole: true); } }; }
private void KernelProcessDaemon() { if (this.IsRestart) { return; } string processName = this.Kernel.GetProcessName(); this.AddEventPath <Per1MinuteEvent>("周期性检查挖矿内核是否消失,如果消失尝试重启", LogEnum.DevConsole, action: message => { if (this == NTMinerContext.Instance.LockedMineContext) { if (!string.IsNullOrEmpty(processName)) { Process[] processes = Process.GetProcessesByName(processName); if (processes.Length == 0) { this.AutoRestartKernelCount += 1; VirtualRoot.ThisLocalWarn(nameof(NTMinerContext), processName + $"挖矿内核进程消失", toConsole: true); if (NTMinerContext.Instance.MinerProfile.IsAutoRestartKernel && this.AutoRestartKernelCount <= NTMinerContext.Instance.MinerProfile.AutoRestartKernelTimes) { VirtualRoot.ThisLocalInfo(nameof(NTMinerContext), $"尝试第{this.AutoRestartKernelCount.ToString()}次重启,共{NTMinerContext.Instance.MinerProfile.AutoRestartKernelTimes.ToString()}次", toConsole: true); NTMinerContext.Instance.RestartMine(); } else { NTMinerContext.Instance.StopMineAsync(StopMineReason.KernelProcessLost); } } } } else { this.Close(); } }, location: this.GetType()); }
public LocalIpSet() { NetworkChange.NetworkAddressChanged += (object sender, EventArgs e) => { // 延迟获取网络信息以防止立即获取时获取不到 TimeSpan.FromSeconds(1).Delay().ContinueWith(t => { var old = _localIps; _isInited = false; InitOnece(); var localIps = _localIps; if (localIps.Length == 0) { VirtualRoot.ThisLocalWarn(nameof(LocalIpSet), "网络连接已断开", toConsole: true); } else { if (old.Length == 0) { VirtualRoot.ThisLocalInfo(nameof(LocalIpSet), "网络连接已连接", toConsole: true); } else { bool isIpChanged = false; if (old.Length != localIps.Length) { isIpChanged = true; } else { foreach (var item in localIps) { var oldItem = old.FirstOrDefault(a => a.SettingID == item.SettingID); if (item != oldItem) { isIpChanged = true; break; } } } VirtualRoot.ThisLocalWarn(nameof(LocalIpSet), $"网络接口的 IP 地址发生了 {(isIpChanged ? "变更" : "刷新")}", toConsole: true); } } }); }; NetworkChange.NetworkAvailabilityChanged += (object sender, NetworkAvailabilityEventArgs e) => { if (e.IsAvailable) { VirtualRoot.ThisLocalInfo(nameof(LocalIpSet), $"网络可用", toConsole: true); } else { VirtualRoot.ThisLocalWarn(nameof(LocalIpSet), $"网络不可用", toConsole: true); } }; VirtualRoot.BuildCmdPath <SetLocalIpCommand>(action: message => { ManagementObject mo = null; using (ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration")) { ManagementObjectCollection moc = mc.GetInstances(); foreach (ManagementObject item in moc) { if ((string)item["SettingID"] == message.Input.SettingID) { mo = item; break; } } } if (mo != null) { if (message.Input.DHCPEnabled) { mo.InvokeMethod("EnableStatic", null); mo.InvokeMethod("SetGateways", null); mo.InvokeMethod("EnableDHCP", null); } else { ManagementBaseObject inPar = mo.GetMethodParameters("EnableStatic"); inPar["IPAddress"] = new string[] { message.Input.IPAddress }; inPar["SubnetMask"] = new string[] { message.Input.IPSubnet }; mo.InvokeMethod("EnableStatic", inPar, null); inPar = mo.GetMethodParameters("SetGateways"); inPar["DefaultIPGateway"] = new string[] { message.Input.DefaultIPGateway }; mo.InvokeMethod("SetGateways", inPar, null); } if (message.IsAutoDNSServer) { mo.InvokeMethod("SetDNSServerSearchOrder", null); } else { ManagementBaseObject inPar = mo.GetMethodParameters("SetDNSServerSearchOrder"); inPar["DNSServerSearchOrder"] = new string[] { message.Input.DNSServer0, message.Input.DNSServer1 }; mo.InvokeMethod("SetDNSServerSearchOrder", inPar, null); } } }); }
internal void Init() { if (ClientAppType.IsMinerClient) { Task.Factory.StartNew(() => { // 注意:第一次GetTemperature请求约需要160毫秒,所以提前在非UI线程做第一次请求。 GetTemperature(); VirtualRoot.AddEventPath <Per2SecondEvent>("周期更新CpuAll的状态", LogEnum.None, action: message => { Task.Factory.StartNew(() => { // 因为获取cpu温度的操作耗时100毫秒 Update(); #region CPU温度过高时自动停止挖矿和温度降低时自动开始挖矿 if (_minerProfile.IsAutoStopByCpu) { if (NTMinerContext.Instance.IsMining) { /* 挖矿中时周期更新最后一次温度低于挖矿停止温度的时刻,然后检查最后一次低于 * 挖矿停止温度的时刻距离现在是否已经超过了设定的时常,如果超过了则自动停止挖矿*/ HighTemperatureOn = message.BornOn; // 如果当前温度低于挖矿停止温度则更新记录的低温时刻 if (this.Temperature < _minerProfile.CpuStopTemperature) { LowTemperatureOn = message.BornOn; } if ((message.BornOn - LowTemperatureOn).TotalSeconds >= _minerProfile.CpuGETemperatureSeconds) { LowTemperatureOn = message.BornOn; VirtualRoot.ThisLocalWarn(nameof(CpuPackage), $"自动停止挖矿,因为 CPU 温度连续{_minerProfile.CpuGETemperatureSeconds.ToString()}秒不低于{_minerProfile.CpuStopTemperature.ToString()}℃", toConsole: true); NTMinerContext.Instance.StopMineAsync(StopMineReason.HighCpuTemperature); } } else { /* 高温停止挖矿后周期更新最后一次温度高于挖矿停止温度的时刻,然后检查最后一次高于 * 挖矿停止温度的时刻距离现在是否已经超过了设定的时常,如果超过了则自动开始挖矿*/ LowTemperatureOn = message.BornOn; if (_minerProfile.IsAutoStartByCpu && NTMinerContext.Instance.StopReason == StopMineReason.HighCpuTemperature) { // 当前温度高于挖矿停止温度则更新记录的高温时刻 if (this.Temperature > _minerProfile.CpuStartTemperature) { HighTemperatureOn = message.BornOn; } if ((message.BornOn - HighTemperatureOn).TotalSeconds >= _minerProfile.CpuLETemperatureSeconds) { HighTemperatureOn = message.BornOn; VirtualRoot.ThisLocalWarn(nameof(CpuPackage), $"自动开始挖矿,因为 CPU 温度连续{_minerProfile.CpuLETemperatureSeconds.ToString()}秒不高于{_minerProfile.CpuStartTemperature.ToString()}℃", toConsole: true); NTMinerContext.Instance.StartMine(); } } } } #endregion if (_minerProfile.IsRaiseHighCpuEvent) { if (this.Performance < _minerProfile.HighCpuBaseline) { LowPerformanceOn = message.BornOn; } if ((message.BornOn - LowPerformanceOn).TotalSeconds >= _minerProfile.HighCpuSeconds) { LowPerformanceOn = message.BornOn; VirtualRoot.ThisLocalWarn(nameof(CpuPackage), $"CPU使用率过高:连续{_minerProfile.HighCpuSeconds.ToString()}秒不低于{_minerProfile.HighCpuBaseline.ToString()}%"); } } }); }, location: this.GetType()); }); } }
public void Start() { VirtualRoot.BuildEventPath <Per1SecondEvent>("周期更新CpuAll的状态", LogEnum.None, action: message => { if (_isFirst) { _isFirst = false; Task.Factory.StartNew(() => { // 因为初始化费时间所以第一次访问放在Task中 Update((int)Windows.Cpu.Instance.GetPerformance(), (int)Windows.Cpu.Instance.GetTemperature()); }); } else { Update((int)Windows.Cpu.Instance.GetPerformance(), (int)Windows.Cpu.Instance.GetTemperature()); #region CPU温度过高时自动停止挖矿和温度降低时自动开始挖矿 if (_minerProfile.IsAutoStopByCpu) { if (NTMinerRoot.Instance.IsMining) { /* 挖矿中时周期更新最后一次温度低于挖矿停止温度的时刻,然后检查最后一次低于 * 挖矿停止温度的时刻距离现在是否已经超过了设定的时常,如果超过了则自动停止挖矿*/ HighTemperatureOn = message.Timestamp; // 如果当前温度低于挖矿停止温度则更新记录的低温时刻 if (this.Temperature < _minerProfile.CpuStopTemperature) { LowTemperatureOn = message.Timestamp; } if ((message.Timestamp - LowTemperatureOn).TotalSeconds >= _minerProfile.CpuGETemperatureSeconds) { LowTemperatureOn = message.Timestamp; VirtualRoot.ThisLocalWarn(nameof(CpuPackage), $"自动停止挖矿,因为 CPU 温度连续{_minerProfile.CpuGETemperatureSeconds.ToString()}秒不低于{_minerProfile.CpuStopTemperature.ToString()}℃", toConsole: true); NTMinerRoot.Instance.StopMineAsync(StopMineReason.HighCpuTemperature); } } else { /* 高温停止挖矿后周期更新最后一次温度高于挖矿停止温度的时刻,然后检查最后一次高于 * 挖矿停止温度的时刻距离现在是否已经超过了设定的时常,如果超过了则自动开始挖矿*/ LowTemperatureOn = message.Timestamp; if (_minerProfile.IsAutoStartByCpu && NTMinerRoot.Instance.StopReason == StopMineReason.HighCpuTemperature) { // 当前温度高于挖矿停止温度则更新记录的高温时刻 if (this.Temperature > _minerProfile.CpuStartTemperature) { HighTemperatureOn = message.Timestamp; } if ((message.Timestamp - HighTemperatureOn).TotalSeconds >= _minerProfile.CpuLETemperatureSeconds) { HighTemperatureOn = message.Timestamp; VirtualRoot.ThisLocalWarn(nameof(CpuPackage), $"自动开始挖矿,因为 CPU 温度连续{_minerProfile.CpuLETemperatureSeconds.ToString()}秒不高于{_minerProfile.CpuStartTemperature.ToString()}℃", toConsole: true); NTMinerRoot.Instance.StartMine(); } } } } #endregion if (_minerProfile.IsRaiseHighCpuEvent) { if (this.Performance < _minerProfile.HighCpuBaseline) { LowPerformanceOn = message.Timestamp; } if ((message.Timestamp - LowPerformanceOn).TotalSeconds >= _minerProfile.HighCpuSeconds) { LowPerformanceOn = message.Timestamp; VirtualRoot.ThisLocalWarn(nameof(CpuPackage), $"CPU使用率过高:连续{_minerProfile.HighCpuSeconds.ToString()}秒不低于{_minerProfile.HighCpuBaseline.ToString()}%"); } } } }); }