public void SendGetLocalMessagesMqMessage() { if (this._minerClientVm == null || !IsMinerClientMessagesVisible) { return; } foreach (var vm in _vms) { vm.OnPropertyChanged(nameof(LocalMessageDtoViewModel.TimestampText)); } if (_preSendMqMessageOn.AddSeconds(4) > DateTime.Now && _preMinerClientVm == _minerClientVm) { return; } _preSendMqMessageOn = DateTime.Now; _preMinerClientVm = _minerClientVm; long afterTime = 0; var minerClientVm = this._minerClientVm; lock (_locker) { var item = _vms.FirstOrDefault(); if (item != null) { afterTime = item.Timestamp; } } MinerStudioService.Instance.GetLocalMessagesAsync(minerClientVm, afterTime); }
private void TbIp_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e) { MinerClientViewModel vm = (MinerClientViewModel)((FrameworkElement)sender).Tag; vm.RemoteDesktop.Execute(null); e.Handled = true; }
public VirtualMemoryViewModel(MinerClientViewModel minerClientVm) { this.MinerClientVm = minerClientVm; this.Apply = new DelegateCommand(() => { MinerStudioRoot.MinerStudioService.SetVirtualMemoryAsync(minerClientVm, _drives.ToDictionary(a => a.Name, a => a.VirtualMemoryMaxSizeMb)); OnPropertyChanged(nameof(TotalVirtualMemoryMb)); OnPropertyChanged(nameof(IsStateChanged)); }); }
public MinerClientConsoleViewModel() { if (ClientAppType.IsMinerStudio) { VirtualRoot.BuildEventPath <MinerClientSelectionChangedEvent>("刷新矿机控制台输出", LogEnum.DevConsole, path: message => { bool isChanged = true; if (message.MinerClientVm != null && this._minerClientVm != null && this._minerClientVm.ClientId == message.MinerClientVm.ClientId) { isChanged = false; } LatestTimestamp = Timestamp.UnixBaseTime; if (isChanged) { lock (_locker) { _outLines.Clear(); try { Console.Clear(); } catch { } this._minerClientVm = message.MinerClientVm; } SendGetConsoleOutLinesMqMessage(isFast: true); } }, this.GetType()); VirtualRoot.BuildEventPath <ClientConsoleOutLinesEvent>("将收到的挖矿端控制台消息输出到输出窗口", LogEnum.DevConsole, path: message => { if (this._minerClientVm == null || this._minerClientVm.ClientId != message.ClientId || message.Data == null || message.Data.Count == 0) { return; } lock (_locker) { foreach (var item in message.Data) { _outLines.Add(item); NTMinerConsole.UserLine(item.Line, ConsoleColor.White, withPrefix: false); } // 因为客户端的时间可能不准所以不能使用客户端的时间 LatestTimestamp = DateTime.Now; } }, this.GetType()); VirtualRoot.BuildEventPath <Per5SecondEvent>("周期获取当前选中的那台矿机的控制台输出", LogEnum.DevConsole, path: message => { SendGetConsoleOutLinesMqMessage(isFast: false); }, this.GetType()); VirtualRoot.BuildEventPath <Per1SecondEvent>("客户端控制台输出倒计时秒表", LogEnum.None, path: message => { if (this._minerClientVm == null || this._latestTimestamp == Timestamp.UnixBaseTime) { return; } OnPropertyChanged(nameof(LatestTimeSpanText)); }, this.GetType()); } }
public static void ShowWindow(MinerClientViewModel minerClientVm) { ContainerWindow.ShowWindow(new ContainerWindowViewModel { IconName = "Icon_Restart", IsDialogWindow = true, CloseVisible = System.Windows.Visibility.Visible }, ucFactory: (window) => { var vm = new MinerClientRestartViewModel(minerClientVm); vm.CloseWindow = () => window.Close(); return(new MinerClientRestart(vm)); }, fixedSize: true); }
public MinerClientMessagesViewModel() { if (_called) { throw new InvalidProgramException("只能调用一次"); } _called = true; if (WpfUtil.IsInDesignMode) { return; } if (ClientAppType.IsMinerStudio) { VirtualRoot.BuildEventPath <MinerClientSelectionChangedEvent>("刷新矿机消息列表", LogEnum.DevConsole, path: message => { bool isChanged = true; if (message.MinerClientVm != null && this._minerClientVm != null && this._minerClientVm.ClientId == message.MinerClientVm.ClientId) { isChanged = false; } if (isChanged) { lock (_locker) { _vms.Clear(); this._minerClientVm = message.MinerClientVm; OnPropertyChanged(nameof(IsNoRecord)); } SendGetLocalMessagesMqMessage(isFast: true); } }, this.GetType()); VirtualRoot.BuildEventPath <ClientLocalMessagesEvent>("将收到的挖矿端本地消息展示到消息列表", LogEnum.DevConsole, path: message => { if (this._minerClientVm == null || this._minerClientVm.ClientId != message.ClientId) { return; } if (message.Data == null || message.Data.Count == 0) { return; } UIThread.Execute(() => { foreach (var item in message.Data) { _vms.Insert(0, new LocalMessageDtoViewModel(item)); } OnPropertyChanged(nameof(IsNoRecord)); }); }, location: this.GetType()); VirtualRoot.BuildEventPath <Per5SecondEvent>("周期获取当前选中的那台矿机的本地消息", LogEnum.DevConsole, path: message => { SendGetLocalMessagesMqMessage(isFast: false); }, this.GetType()); } }
public MinerClientConsoleViewModel() { VirtualRoot.AddEventPath <MinerClientSelectionChangedEvent>("矿机列表页选中了和上次选中的不同的矿机时刷新矿机控制台输出", LogEnum.DevConsole, action: message => { bool isChanged = true; if (message.MinerClientVm != null && this._minerClientVm != null && this._minerClientVm.ClientId == message.MinerClientVm.ClientId) { isChanged = false; } LatestTimestamp = Timestamp.UnixBaseTime; if (isChanged) { lock (_locker) { _outLines.Clear(); try { Console.Clear(); } catch { } this._minerClientVm = message.MinerClientVm; } SendGetConsoleOutLinesMqMessage(); } }, this.GetType()); VirtualRoot.AddEventPath <ClientConsoleOutLinesEvent>("收到了挖矿端控制台消息", LogEnum.DevConsole, action: message => { if (this._minerClientVm == null || this._minerClientVm.ClientId != message.ClientId || message.Data == null || message.Data.Count == 0) { return; } lock (_locker) { foreach (var item in message.Data) { _outLines.Add(item); Console.WriteLine(item.Line); } // 因为客户端的时间可能不准所以不能使用客户端的时间 LatestTimestamp = DateTime.Now; } }, this.GetType()); VirtualRoot.AddEventPath <Per5SecondEvent>("周期获取当前选中的那台矿机的控制台输出", LogEnum.DevConsole, action: message => { SendGetConsoleOutLinesMqMessage(); }, this.GetType()); VirtualRoot.AddEventPath <Per1SecondEvent>("客户端控制台输出倒计时秒表", LogEnum.None, action: message => { if (this._minerClientVm == null || this._latestTimestamp == Timestamp.UnixBaseTime) { return; } OnPropertyChanged(nameof(LatestTimeSpanText)); }, this.GetType()); }
public GpuProfilesPageViewModel(MinerClientsWindowViewModel minerClientsWindowVm) { if (minerClientsWindowVm.SelectedMinerClients == null || minerClientsWindowVm.SelectedMinerClients.Length == 0) { throw new InvalidProgramException(); } _minerClientVm = minerClientsWindowVm.SelectedMinerClients[0]; _minerClientVms = new ObservableCollection <MinerClientViewModel>(minerClientsWindowVm.SelectedMinerClients); if (AppRoot.CoinVms.TryGetCoinVm(_minerClientVm.MainCoinCode, out CoinViewModel outCoinVm)) { this._coinVm = outCoinVm; } if (this._coinVm == null) { this._coinVm = CoinVms.MainCoins.FirstOrDefault(); } this.Save = new DelegateCommand(() => { if (_data == null) { return; } GpuProfilesJsonDb jsonObj = new GpuProfilesJsonDb() { Gpus = _data.Gpus }; foreach (var coinVm in CoinVms.MainCoins) { if (coinVm.IsOverClockEnabled) { jsonObj.CoinOverClocks.Add(new CoinOverClockData() { CoinId = coinVm.Id, IsOverClockEnabled = coinVm.IsOverClockEnabled, IsOverClockGpuAll = coinVm.IsOverClockGpuAll }); if (CoinVm.IsOverClockGpuAll) { jsonObj.GpuProfiles.Add(new GpuProfileData().Update(coinVm.GpuAllProfileVm)); } jsonObj.GpuProfiles.AddRange(coinVm.GpuProfileVms.Select(a => new GpuProfileData().Update(a))); } } string json = VirtualRoot.JsonSerializer.Serialize(jsonObj); foreach (var client in minerClientsWindowVm.SelectedMinerClients) { MinerStudioService.Instance.SaveGpuProfilesJsonAsync(client, json); } VirtualRoot.Execute(new CloseWindowCommand(this.Id)); }); }
public static void ShowWindow(MinerClientViewModel minerClientVm) { ContainerWindow.ShowWindow(new ContainerWindowViewModel { Title = "重启客户端", IconName = "Icon_Restart", IsDialogWindow = true, CloseVisible = System.Windows.Visibility.Visible, SaveVisible = System.Windows.Visibility.Visible, OnOk = uc => { var vm = (MinerClientRestartViewModel)uc.DataContext; NTMinerClientDaemon.Instance.RestartNTMiner(minerClientVm.ClientDataVm.MinerIp, Global.ClientPort, vm.SelectedMineWork.Id, null); return(true); } }, ucFactory: (window) => new MinerClientRestart(new MinerClientRestartViewModel(minerClientVm)), fixedSize: true); }
public void SendGetLocalMessagesMqMessage() { if (this._minerClientVm == null || !IsMinerClientMessagesVisible) { return; } foreach (var vm in _vms) { vm.OnPropertyChanged(nameof(LocalMessageDtoViewModel.TimestampText)); } if (_preSendMqMessageOn.AddSeconds(4) > DateTime.Now && _preMinerClientVm == _minerClientVm) { return; } _preSendMqMessageOn = DateTime.Now; _preMinerClientVm = _minerClientVm; long afterTime = 0; var minerClientVm = this._minerClientVm; lock (_locker) { var item = _vms.FirstOrDefault(); if (item != null) { afterTime = item.Timestamp; } } if (RpcRoot.IsOuterNet) { WsClient.SendAsync(new WsMessage(Guid.NewGuid(), WsMessage.GetLocalMessages) { Data = new WrapperClientIdData { ClientId = minerClientVm.ClientId, Data = afterTime } }); } else { RpcRoot.Client.MinerClientService.GetLocalMessagesAsync(minerClientVm.GetLocalIp(), afterTime, (data, e) => { if (data != null || data.Count > 0) { VirtualRoot.RaiseEvent(new ClientLocalMessagesEvent(minerClientVm.ClientId, data)); } }); } }
public LocalIpConfigViewModel(MinerClientViewModel minerClientVm) { this.MinerClientVm = minerClientVm; this.Save = new DelegateCommand <LocalIpViewModel>((vm) => { if (!vm.IsAutoDNSServer) { if (vm.DNSServer0Vm.IsAnyEmpty) { vm.DNSServer0Vm.SetAddress(NTKeyword.DNSServer0); } if (vm.DNSServer1Vm.IsAnyEmpty) { vm.DNSServer1Vm.SetAddress(NTKeyword.DNSServer1); } } MinerStudioRoot.MinerStudioService.SetLocalIpsAsync(minerClientVm, _localIpVms.Select(a => LocalIpInput.Create(a, a.IsAutoDNSServer)).ToList()); if (_localIpVms.Count == 1) { VirtualRoot.Execute(new CloseWindowCommand(this.Id)); } }, (vm) => vm.IsChanged); }
public MineWorkViewModel(MineWorkViewModel vm) : this((IMineWork)vm) { Sha1 = vm.Sha1; _minerClientVm = vm._minerClientVm; }
private void DoEdit(FormType?formType) { if (!MinerStudioRoot.MineWorkVms.TryGetMineWorkVm(this.Id, out MineWorkViewModel mineWorkVm) && !this.Id.IsSelfMineWorkId()) { WpfUtil.ShowInputDialog("作业名称", string.Empty, string.Empty, workName => { if (string.IsNullOrEmpty(workName)) { return("作业名称是必须的"); } return(string.Empty); }, onOk: workName => { new MineWorkViewModel(this) { Name = workName }.Save.Execute(null); }); } else { _minerClientVm = MinerStudioRoot.MinerClientsWindowVm.SelectedMinerClients.FirstOrDefault(); if (_minerClientVm == null) { VirtualRoot.Out.ShowError("未选中矿机", autoHideSeconds: 4); return; } if (this.Id.IsSelfMineWorkId()) { SelfMineWork.Description = $"{_minerClientVm.GetMinerOrClientName()} 矿机的单机作业"; if (RpcRoot.IsOuterNet) { if (!_minerClientVm.IsOuterUserEnabled) { VirtualRoot.Out.ShowError("无法操作,因为选中的矿机未开启外网群控。", autoHideSeconds: 6); return; } VirtualRoot.AddOnecePath <GetSelfWorkLocalJsonResponsedEvent>("获取到响应结果后填充Vm内存", LogEnum.DevConsole, action: message => { if (message.ClientId == _minerClientVm.ClientId) { string data = message.Data; EditJson(formType, WorkType.SelfWork, data); } }, PathId.Empty, typeof(MineWorkViewModel)); MinerStudioService.Instance.GetSelfWorkLocalJsonAsync(_minerClientVm); } else { RpcRoot.Client.NTMinerDaemonService.GetSelfWorkLocalJsonAsync(_minerClientVm, (json, e) => { string data = json; EditJson(formType, WorkType.SelfWork, data); }); } } else { // 编辑作业前切换上下文 // 根据workId下载json保存到本地并调用LocalJson.Instance.ReInit() if (RpcRoot.IsOuterNet) { RpcRoot.OfficialServer.UserMineWorkService.GetLocalJsonAsync(this.Id, (response, e) => { if (response.IsSuccess()) { string data = response.Data; EditJson(formType, WorkType.MineWork, data); } }); } else { try { string localJsonFileFullName = MinerStudioPath.GetMineWorkLocalJsonFileFullName(this.Id); string data = string.Empty; if (File.Exists(localJsonFileFullName)) { data = File.ReadAllText(localJsonFileFullName); } EditJson(formType, WorkType.MineWork, data); } catch (Exception e) { Logger.ErrorDebugLine(e); } } } } }
public MinerClientOperationResultsViewModel() { if (_called) { throw new InvalidProgramException("只能调用一次"); } _called = true; if (WpfUtil.IsInDesignMode) { return; } if (ClientAppType.IsMinerStudio) { VirtualRoot.BuildEventPath <MinerClientSelectionChangedEvent>("刷新矿机本地群控响应消息列表", LogEnum.DevConsole, this.GetType(), PathPriority.Normal, path: message => { bool isChanged = true; if (message.MinerClientVm != null && this._minerClientVm != null && this._minerClientVm.ClientId == message.MinerClientVm.ClientId) { isChanged = false; } if (isChanged) { lock (_locker) { _vms.Clear(); this._minerClientVm = message.MinerClientVm; if (_minerClientVm != null) { this.NoRecordText = LOADING; } else { this.NoRecordText = "未选中矿机"; } OnPropertyChanged(nameof(IsNoRecord)); } SendGetOperationResultsMqMessage(isFast: true); } }); VirtualRoot.BuildEventPath <ClientOperationResultsEvent>("将收到的挖矿端本地群控响应消息刷到展示层", LogEnum.DevConsole, location: this.GetType(), PathPriority.Normal, path: message => { if (this._minerClientVm == null || this._minerClientVm.ClientId != message.ClientId) { return; } _preClientOperationResultsOn = message.BornOn; if (message.Data == null || message.Data.Count == 0) { this.NoRecordText = NO_RECORD_TEXT; return; } UIThread.Execute(() => { foreach (var item in message.Data) { _vms.Insert(0, new OperationResultViewModel(item)); } OnPropertyChanged(nameof(IsNoRecord)); }); }); VirtualRoot.BuildEventPath <ClientOperationReceivedEvent>("收到了挖矿端群控响应了群控操作的通知", LogEnum.DevConsole, location: this.GetType(), PathPriority.Normal, path: message => { if (_minerClientVm != null && _minerClientVm.ClientId == message.ClientId) { SendGetOperationResultsMqMessage(isFast: true); } }); VirtualRoot.BuildEventPath <Per5SecondEvent>("周期获取当前选中的那台矿机的本地群控响应消息", LogEnum.DevConsole, this.GetType(), PathPriority.Normal, path: message => { SendGetOperationResultsMqMessage(isFast: false); }); } }
public MinerClientSelectionChangedEvent(MinerClientViewModel minerClientVm) { this.MinerClientVm = minerClientVm; }
private void MinerGroup_MouseDoubleClick(object sender, MouseButtonEventArgs e) { MinerClientViewModel minerClientVm = (MinerClientViewModel)((FrameworkElement)sender).Tag; minerClientVm.ShowChangeGroup.Execute(null); }