示例#1
0
        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();
            }
        }
示例#2
0
 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);
         }
     };
 }
示例#3
0
        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());
        }
示例#4
0
        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);
                    }
                }
            });
        }
示例#5
0
 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());
         });
     }
 }
示例#6
0
 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()}%");
                 }
             }
         }
     });
 }