public MinerDeviceOutput(MinerDevice device) { this.DeviceId = device.GetDeviceId(); this.DisplayName = device.GetDisplayName(); this.DeviceVersion = device.GetDeviceVersion(); this.DriverVersion = device.GetDriverVersion(); }
private void StepFour_RetrieveDeviceList_Sync() { int startedWorkCount = 0; int finishedWorkCount = 0; foreach (MinerClient client in createdClients) { if (client.Machine.Devices != null && client.Machine.Devices.Count > 0) { continue; } MinerMachine existingMachine = ManagerInfo.Current.Machines.FirstOrDefault(m => m.FullName.Equals(client.Machine.FullName)); if (existingMachine != null && existingMachine.Devices != null && existingMachine.Devices.Count > 0) { // This machine has been queried before and the devices are saved in the ManagerInfo cache, read it client.Machine.Devices = existingMachine.Devices; } else { // Didn't find the machine in cache, use Executor to retrieve it startedWorkCount++; BackgroundWork <List <DeviceOutput> > .CreateWork(this, () => { }, () => { return(client.ExecuteDaemon <List <DeviceOutput> >("-l")); }, (taskResult) => { finishedWorkCount++; if (taskResult.HasError) { logger.Error($"ExecuteCommand on machine [{ client.Machine.FullName }] failed: " + taskResult.Exception.ToString()); return; } client.Machine.Devices = new List <MinerDevice>(); List <DeviceOutput> deviceOutputs = taskResult.Result; if (deviceOutputs == null || deviceOutputs.Count == 0) { logger.Warning("没有找到任何满足条件的硬件,请检查目标机器配置"); return; } foreach (DeviceOutput output in deviceOutputs) { MinerDevice device = new MinerDevice(output.DeviceId, output.DisplayName, output.DeviceVersion, output.DriverVersion); client.Machine.Devices.Add(device); } } ).Execute(); } } while (finishedWorkCount < startedWorkCount) { Thread.Sleep(30); } }
/// <summary> /// /// </summary> private void StepThree_ConfigEthMiner() { logger.Trace("Start StepThree_ConfigEthMiner."); MinerDevice selectedDevice = (cBxTargetDeviceEth.SelectedIndex >= 0) ? displayedDeviceList.ElementAt(cBxTargetDeviceEth.SelectedIndex) : null; if (selectedDevice == null) { MessageBox.Show("请选择一个硬件设备"); return; } string ethWalletAddress = txtWalletAddressEth.Text; ethWalletAddress = ethWalletAddress.Trim(); if (string.IsNullOrWhiteSpace(ethWalletAddress)) { MessageBox.Show("请输入钱包地址"); return; } if (!ethWalletAddress.StartsWith("0x")) { MessageBox.Show("钱包必须是以0x开头的32位字符串"); return; } if (cBxTargetEthPool.SelectedIndex < 0) { MessageBox.Show("请选择一个ETH矿池"); return; } if (cBxTargetEthPoolHost.SelectedIndex < 0) { MessageBox.Show("请选择一个ETH矿池地址"); return; } EthConfig ethConfig = new EthConfig(); ethConfig.PoolIndex = (EthConfig.PoolIndexes)cBxTargetEthPool.SelectedIndex; ethConfig.PoolHostIndex = cBxTargetEthPoolHost.SelectedIndex; ethConfig.WalletAddress = txtWalletAddressEth.Text.Trim(); ethConfig.EmailAddress = txtEmailAddressEth.Text; ethConfig.WorkerName = txtEthWorkerName.Text; try { ethConfig.ValidateProperties(); } catch (Exception ex) { MessageBox.Show("配置数据有误:" + ex.Message); logger.Error("ValidateProperties failed: " + ex.ToString()); return; } BackgroundWork <int> .CreateWork( this, () => { ShowProgressIndicator("正在配置矿机", btnStepThreeNext, btnStepThreeBack); }, () => { string commandParameters = string.Format(" -c \"{{ 'DeviceId':'{0}', 'EthPoolAddress':'{1}', 'AutoDecideInstanceId':true }}\"", selectedDevice.DeviceId, ethConfig.PoolFullAddress); OKResult exeResult = createdClient.ExecuteDaemon <OKResult>(commandParameters); return(0); }, (taskResult) => { HideProgressIndicator(); if (taskResult.HasError) { MessageBox.Show("配置矿机出现错误:" + taskResult.Exception.Message); logger.Error("ConfigureCommand failed: " + taskResult.Exception.ToString()); return; } // Save the currnet config into cache. createdClient.Device = selectedDevice; createdClient.EthConfig = ethConfig; if (cKbWalletSaveToDefault.IsChecked ?? false) { ManagerConfig.Current.DefaultEth = ethConfig; ManagerConfig.Current.SaveToFile(); } SwitchUIToStep(4); } ).Execute(); }
/// <summary> /// /// </summary> private void StepThree_ConfigXDaggerMiner() { logger.Trace("Start StepThree_ConfigXDaggerMiner."); MinerDevice selectedDevice = (cBxTargetDevice.SelectedIndex >= 0) ? displayedDeviceList.ElementAt(cBxTargetDevice.SelectedIndex) : null; if (selectedDevice == null) { MessageBox.Show("请选择一个硬件设备"); return; } XDaggerConfig xDaggerConfig = new XDaggerConfig(); xDaggerConfig.PoolAddress = txtXDaggerPoolAddress.Text.Trim(); if (string.IsNullOrWhiteSpace(xDaggerConfig.PoolAddress)) { MessageBox.Show("请输入矿池地址"); return; } xDaggerConfig.WalletAddress = txtWalletAddress.Text.Trim(); if (string.IsNullOrWhiteSpace(xDaggerConfig.WalletAddress)) { MessageBox.Show("请输入钱包地址"); return; } if (xDaggerConfig.WalletAddress.Length != 32) { MessageBox.Show("钱包必须为长度32位的字母与数字组合"); return; } BackgroundWork <int?> .CreateWork( this, () => { ShowProgressIndicator("正在配置矿机", btnStepThreeNext, btnStepThreeBack); }, () => { string commandParameters = string.Format(" -c \"{{ 'DeviceId':'{0}', 'XDaggerWallet':'{1}', 'XDaggerPoolAddress':'{2}', 'AutoDecideInstanceId':true }}\"", selectedDevice.DeviceId, xDaggerConfig.WalletAddress, xDaggerConfig.PoolAddress); ConfigureOutput exeResult = createdClient.ExecuteDaemon <ConfigureOutput>(commandParameters); logger.Trace("ConfigureCommand finished with InstanceId: " + exeResult.InstanceId); return(exeResult.InstanceId); }, (taskResult) => { HideProgressIndicator(); if (taskResult.HasError) { MessageBox.Show("配置矿机出现错误:" + taskResult.Exception.Message); logger.Error("ConfigureCommand failed: " + taskResult.Exception.ToString()); return; } int?instanceId = taskResult.Result; if (instanceId == null) { MessageBox.Show("配置矿机出现错误,未返回InstanceId."); logger.Error("配置矿机出现错误,未返回InstanceId."); return; } createdClient.InstanceId = instanceId.Value; // Save the currnet config into cache. createdClient.Device = selectedDevice; createdClient.XDaggerConfig = xDaggerConfig; if (cKbWalletSaveToDefault.IsChecked ?? false) { ManagerConfig.Current.DefaultXDagger = xDaggerConfig; ManagerConfig.Current.SaveToFile(); } SwitchUIToStep(4); } ).Execute(); }
private void StepThree_RetrieveDeviceList() { logger.Trace("Start StepThree_RetrieveDeviceList."); txtWalletAddress.Text = ManagerConfig.Current.DefaultXDagger.WalletAddress; txtXDaggerPoolAddress.Text = ManagerConfig.Current.DefaultXDagger.PoolAddress; txtWalletAddressEth.Text = ManagerConfig.Current.DefaultEth.WalletAddress; txtEmailAddressEth.Text = ManagerConfig.Current.DefaultEth.EmailAddress; txtEthWorkerName.Text = ManagerConfig.Current.DefaultEth.WorkerName; if (ManagerConfig.Current.DefaultEth.PoolIndex != null) { cBxTargetEthPool.SelectedIndex = ManagerConfig.Current.DefaultEth.PoolIndex.GetHashCode(); } if (ManagerConfig.Current.DefaultEth.PoolHostIndex != null) { cBxTargetEthPoolHost.SelectedIndex = ManagerConfig.Current.DefaultEth.PoolHostIndex.Value; } MinerMachine existingMachine = ManagerInfo.Current.Machines.FirstOrDefault(m => m.FullName.Equals(createdClient.MachineFullName)); if (existingMachine != null && existingMachine.Devices != null && existingMachine.Devices.Count > 0) { // This machine has been queried before and the devices are saved in the ManagerInfo cache, read it displayedDeviceList = existingMachine.Devices; cBxTargetDevice.Items.Clear(); cBxTargetDeviceEth.Items.Clear(); logger.Trace("Got Devices from ManagerInfo cache. Count: " + displayedDeviceList.Count); foreach (MinerDevice device in displayedDeviceList) { cBxTargetDevice.Items.Add(device.DisplayName); cBxTargetDeviceEth.Items.Add(device.DisplayName); } } else { // Didn't find the machine in cache, use Executor to retrieve it TargetMachineExecutor executor = TargetMachineExecutor.GetExecutor(createdClient.Machine); string daemonFullPath = IO.Path.Combine(createdClient.BinaryPath, WinMinerReleaseBinary.DaemonExecutionFileName); BackgroundWork <List <DeviceOutput> > .CreateWork( this, () => { ShowProgressIndicator("正在获取硬件信息", btnStepThreeNext, btnStepThreeBack); }, () => { return(executor.ExecuteCommandAndThrow <List <DeviceOutput> >(daemonFullPath, "-l")); }, (taskResult) => { HideProgressIndicator(); if (taskResult.HasError) { MessageBox.Show("查询系统硬件信息错误:" + taskResult.Exception.Message); logger.Error("ExecuteCommand failed: " + taskResult.Exception.ToString()); return; } List <DeviceOutput> devices = taskResult.Result; if (devices == null || devices.Count == 0) { MessageBox.Show("没有找到任何满足条件的硬件,请检查目标机器配置"); logger.Warning("没有找到任何满足条件的硬件,请检查目标机器配置"); return; } cBxTargetDevice.Items.Clear(); cBxTargetDeviceEth.Items.Clear(); logger.Trace("Got Devices count: " + devices.Count); foreach (DeviceOutput deviceOut in devices) { MinerDevice device = new MinerDevice(deviceOut.DeviceId, deviceOut.DisplayName, deviceOut.DeviceVersion, deviceOut.DriverVersion); displayedDeviceList.Add(device); cBxTargetDevice.Items.Add(device.DisplayName); cBxTargetDeviceEth.Items.Add(device.DisplayName); createdClient.Machine.Devices.Add(device); } } ).Execute(); } }
/// <summary> /// Initializes a new instance. /// </summary> /// <param name="miner"></param> /// <param name="resource"></param> internal MinerEntry(IMiner miner, MinerDevice resource) { Miner = miner; Resource = resource; }