Ejemplo n.º 1
0
        private void ProcessMonitor(object sender, ElapsedEventArgs e)
        {
            //保持idletime在 1.7E+308內,以免爆炸
            if (idletime++ > 1.7E+300)
            {
                idletime = FConstants.TimeToAutoStart + 10;
            }

            bool OkToGo = true;

            // UI Idle time  > TimeToAutoStart
            if (Type != FConstants.WorkerType.CPU)
            {
                OkToGo = ((idletime * pMonitorTimer.Interval / 1000) > FConstants.TimeToAutoStart);
            }

            // Process中沒有特定程序 (CPU Worker才確認)
            if (Type == FConstants.WorkerType.CPU)
            {
                OkToGo &= CheckProcess();
            }

            // 若有AlwaysRun, 則一律啟動
            OkToGo |= AlwaysRun;

            // Power Line沒插就不啟動
            PowerStatus powerStatus = SystemInformation.PowerStatus;

            powerLineAttached = (powerStatus.PowerLineStatus == PowerLineStatus.Online) ? true : false;
            OkToGo           &= powerLineAttached;

            //WatchDog Counter < 0 停止後重啟
            if (WatchDogCounter <= 0)
            {
                OkToGo          = false;
                WatchDogCounter = 60;
            }

            if (isEnable && OkToGo)
            {
                Start();
            }
            else
            {
                Stop();
            }

            CleanUpDuplicateProcess();

            //if (isRunning)
            if (OkToGo)
            {
                Task.Run(() =>
                {
                    workerStatus = FFunc.DownloadJsonToObject <WorkerStatus>("http://127.0.0.1:" + apiPort.ToString());
                    workerStatus.StatusMessage = string.Format("{0:0.00} (10s) / {1:0.00} (15m) | Shares: {2} / {3} | Diff: {4} | Lev:{5} - WDg:{6}",
                                                               workerStatus?.hashrate?.total?[0],
                                                               workerStatus?.hashrate?.total?[2],
                                                               workerStatus?.results?.shares_good,
                                                               workerStatus?.results?.shares_total,
                                                               workerStatus?.results?.diff_current, Level, WatchDogCounter);

                    if (workerStatus?.hashrate?.total?[0] > 0)
                    {
                        WatchDogCounter = 60;
                    }
                    else
                    {
                        WatchDogCounter--;
                    }
                });
            }
            else
            {
                workerStatus.StatusMessage = "OkToGo=False";
            }
        }