private void OnNTMinerRootInited() { NTMinerRoot.KernelDownloader = new KernelDownloader(); Execute.OnUIThread(() => { BootLog.Log("new MainWindow"); Window splashWindow = MainWindow; MainWindow window = new MainWindow(); IMainWindow mainWindow = window; this.MainWindow = window; this.MainWindow.Show(); this.MainWindow.Activate(); BootLog.Log("MainWindow showed"); notifyIcon = new ExtendedNotifyIcon("pack://application:,,,/NTMiner;component/logo.ico"); notifyIcon.Init(); #region 处理显示主界面命令 Global.Access <ShowMainWindowCommand>( Guid.Parse("01f3c467-f494-42b8-bcb5-848050df59f3"), "处理显示主界面命令", LogEnum.None, action: message => { Execute.OnUIThread(() => { Dispatcher.Invoke((ThreadStart)mainWindow.ShowThisWindow); AppHelper.MainWindowShowed(); }); }); #endregion #region 处理重启NTMiner命令 Global.Access <RestartNTMinerCommand>( Guid.Parse("d1712c1f-507c-496f-9da2-870cbd9fc57f"), "处理重启NTMiner命令", LogEnum.None, action: message => { List <string> args = CommandLineArgs.Args; if (message.IsWorkEdit) { if (CommandLineArgs.IsWorkEdit && CommandLineArgs.WorkId == message.MineWorkId) { Execute.OnUIThread(() => { Dispatcher.Invoke((ThreadStart)mainWindow.ShowThisWindow); }); return; } if (!CommandLineArgs.IsControlCenter) { args.Add("--controlCenter"); } } if (message.MineWorkId != Guid.Empty) { if (!CommandLineArgs.IsWorker) { args.Add("--workid=" + message.MineWorkId.ToString()); } else { for (int i = 0; i < args.Count; i++) { if (args[i].StartsWith("--workid=", StringComparison.OrdinalIgnoreCase)) { args[i] = "--workid=" + message.MineWorkId.ToString(); break; } } } } else { if (CommandLineArgs.IsWorker) { int workIdIndex = -1; for (int i = 0; i < args.Count; i++) { if (args[i].ToLower().Contains("--workid=")) { workIdIndex = i; break; } } if (workIdIndex != -1) { args.RemoveAt(workIdIndex); } } } NTMiner.Windows.Cmd.RunClose(ClientId.AppFileFullName, string.Join(" ", args)); Current.MainWindow.Close(); }); #endregion Task.Factory.StartNew(() => { AppHelper.RunPipeServer(this, _appPipName); }); try { NTMinerRoot.Current.Start(); } catch (Exception ex) { Global.Logger.Error(ex.Message, ex); } splashWindow?.Close(); if (NTMinerRoot.Current.MinerProfile.IsAutoStart || CommandLineArgs.IsAutoStart) { Global.DebugLine("自动开始挖矿倒计时", ConsoleColor.Yellow); Views.Ucs.AutoStartCountdown.ShowDialog(); } BootLog.SyncToDisk(); }); }
private static void ReportSpeed(INTMinerRoot root) { try { SpeedData data = new SpeedData { MessageId = Guid.NewGuid(), MinerName = root.MinerProfile.MinerName, ClientId = ClientId.Id, Timestamp = DateTime.Now, MainCoinCode = string.Empty, MainCoinShareDelta = 0, MainCoinSpeed = 0, DualCoinCode = string.Empty, DualCoinShareDelta = 0, DualCoinSpeed = 0, IsMining = root.IsMining, DualCoinPool = string.Empty, DualCoinWallet = string.Empty, IsDualCoinEnabled = false, Kernel = string.Empty, MainCoinPool = string.Empty, MainCoinWallet = string.Empty }; ICoin mainCoin; if (root.CoinSet.TryGetCoin(root.MinerProfile.CoinId, out mainCoin)) { data.MainCoinCode = mainCoin.Code; ICoinProfile coinProfile = root.CoinProfileSet.GetCoinProfile(mainCoin.GetId()); IPool mainCoinPool; if (root.PoolSet.TryGetPool(coinProfile.PoolId, out mainCoinPool)) { data.MainCoinPool = mainCoinPool.Server; } else { data.MainCoinPool = string.Empty; } data.MainCoinWallet = coinProfile.Wallet; ICoinKernel coinKernel; if (root.CoinKernelSet.TryGetKernel(coinProfile.CoinKernelId, out coinKernel)) { IKernel kernel; if (root.KernelSet.TryGetKernel(coinKernel.KernelId, out kernel)) { data.Kernel = kernel.FullName; ICoinKernelProfile coinKernelProfile = root.CoinKernelProfileSet.GetCoinKernelProfile(coinProfile.CoinKernelId); data.IsDualCoinEnabled = coinKernelProfile.IsDualCoinEnabled; if (coinKernelProfile.IsDualCoinEnabled) { ICoin dualCoin; if (root.CoinSet.TryGetCoin(coinKernelProfile.DualCoinId, out dualCoin)) { data.DualCoinCode = dualCoin.Code; ICoinProfile dualCoinProfile = root.CoinProfileSet.GetCoinProfile(dualCoin.GetId()); data.DualCoinWallet = dualCoinProfile.DualCoinWallet; IPool dualCoinPool; if (root.PoolSet.TryGetPool(dualCoinProfile.DualCoinPoolId, out dualCoinPool)) { data.DualCoinPool = dualCoinPool.Server; } else { data.DualCoinPool = string.Empty; } } } } } } // 如果正在挖矿则报告算力,否则默认报告0算力 if (root.IsMining) { CoinShareData preCoinShare; Guid coinId = root.CurrentMineContext.MainCoin.GetId(); IGpusSpeed gpuSpeeds = NTMinerRoot.Current.GpusSpeed; IGpuSpeed totalSpeed = gpuSpeeds.CurrentSpeed(root.GpuAllId); data.MainCoinSpeed = (int)totalSpeed.MainCoinSpeed.Value; ICoinShare share = root.CoinShareSet.GetOrCreate(coinId); if (!_coinShareDic.TryGetValue(coinId, out preCoinShare)) { preCoinShare = new CoinShareData() { TotalShareCount = share.TotalShareCount }; _coinShareDic.Add(coinId, preCoinShare); data.MainCoinShareDelta = share.TotalShareCount; } else { data.MainCoinShareDelta = share.TotalShareCount - preCoinShare.TotalShareCount; } if (root.CurrentMineContext is IDualMineContext dualMineContext) { if (root.IsMining) { coinId = dualMineContext.DualCoin.GetId(); gpuSpeeds = NTMinerRoot.Current.GpusSpeed; totalSpeed = gpuSpeeds.CurrentSpeed(root.GpuAllId); data.DualCoinSpeed = (int)totalSpeed.DualCoinSpeed.Value; share = root.CoinShareSet.GetOrCreate(coinId); if (!_coinShareDic.TryGetValue(coinId, out preCoinShare)) { preCoinShare = new CoinShareData() { TotalShareCount = share.TotalShareCount }; _coinShareDic.Add(coinId, preCoinShare); data.DualCoinShareDelta = share.TotalShareCount; } else { data.DualCoinShareDelta = share.TotalShareCount - preCoinShare.TotalShareCount; } } } } Server.ReportService.ReportSpeed(data); } catch (Exception e) { Global.DebugLine(e.Message, ConsoleColor.Red); Global.DebugLine(e.StackTrace, ConsoleColor.Red); } }