Esempio n. 1
0
            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);
            }
Esempio n. 2
0
        private void TbIp_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            MinerClientViewModel vm = (MinerClientViewModel)((FrameworkElement)sender).Tag;

            vm.RemoteDesktop.Execute(null);
            e.Handled = true;
        }
Esempio n. 3
0
 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));
     });
 }
Esempio n. 4
0
 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());
     }
 }
Esempio n. 5
0
 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);
 }
Esempio n. 6
0
 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());
     }
 }
Esempio n. 7
0
 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());
 }
Esempio n. 8
0
 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));
     });
 }
Esempio n. 9
0
 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));
                        }
                    });
                }
            }
Esempio n. 11
0
 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);
 }
Esempio n. 12
0
 public MineWorkViewModel(MineWorkViewModel vm) : this((IMineWork)vm)
 {
     Sha1           = vm.Sha1;
     _minerClientVm = vm._minerClientVm;
 }
Esempio n. 13
0
 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);
                 }
             }
         }
     }
 }
Esempio n. 14
0
 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);
         });
     }
 }
Esempio n. 15
0
 public MinerClientSelectionChangedEvent(MinerClientViewModel minerClientVm)
 {
     this.MinerClientVm = minerClientVm;
 }
Esempio n. 16
0
        private void MinerGroup_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            MinerClientViewModel minerClientVm = (MinerClientViewModel)((FrameworkElement)sender).Tag;

            minerClientVm.ShowChangeGroup.Execute(null);
        }