void RemoteDeskCheckTimerCallback(object state) { if (Interlocked.CompareExchange(ref _remoteDeskpCheckTimerCallbackState, 1, 1) == 1) { return; } try { bool started = AnyDesk.IsClientOpened(); if (_remoteDeskConnectState.TimerState == TimerState.CheckRemoteDeskConnectOpen) { if (started) { Invoke(() => { tsslRemoteConnectInfo.Text = string.Format("远程控制 [{0}] 中...", _remoteDeskConnectState.ConnectModel.UserAccount); tsslConnectStartTimeLabel.Visible = true; tsslConnectStartTime.Text = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"); tsslConnectStartTime.Visible = true; }); _remoteDeskConnectState.TimerState = TimerState.CheckRemoteDeskConnectClose; } return; } if (_remoteDeskConnectState.TimerState == TimerState.CheckRemoteDeskConnectClose) { if (!started) { _remoteDeskCheckTimer.Change(Timeout.Infinite, 2000); Invoke(() => { StartOrderRecord(); }); } return; } } catch (Exception ex) { Error("RemoteDeskCheckTimerCallback Error.", ex); } finally { Interlocked.Exchange(ref _remoteDeskpCheckTimerCallbackState, 0); } }
protected override void OnLoad(EventArgs e) { base.OnLoad(e); Task.Factory.StartNew(() => { if (!AnyDesk.Start(_anyDeskIstallPath, _anyDeskSourceFile)) { Invoke(() => { MessageBoxEx.Show(this, "远程连接服务初始化失败!", "挂机端程序初始化", MessageBoxButtons.OK, MessageBoxIcon.Error); _systemExit = true; Application.Exit(); }); } }).Wait(); }
internal static void Uinit() { try { _applicationData.UserExit = true; Resolve <IOfflineCheckManager>().Stop(); _tcpClient.Close(); NinjectCommon.Stop(); if (_applicationData.IsClient) { AnyDesk.CloseServer(); } else { AnyDesk.CloseClient(); } AnyDesk.Stop(); } catch (Exception) { } }
void Init() { _checkRemoteDeskTimer = new System.Threading.Timer( CheckRemoteDeskpTimerCallback, null, Timeout.Infinite, 2000); sbtnConfirmReceipt.Click += sbtnConfirmReceiptClick; sbtnHangUpOpt.Click += (sender, e) => { if (_hangUp) { _checkRemoteDeskTimer.Change(Timeout.Infinite, 2000); AnyDesk.Stop(); _hangUp = false; _remoteDeskState.Connected = false; _remoteDeskState.RemoteInfo = null; tsslRemoteConnectInfo.Text = "暂停挂机"; tsslConnectStartTimeLabel.Visible = false; tsslConnectStartTime.Text = string.Empty; tsslConnectStartTime.Visible = false; tsslConnectEndTimeLabel.Visible = false; tsslConnectEndTime.Text = string.Empty; tsslConnectEndTime.Visible = false; sbtnHangUpOpt.Text = "开始挂机"; } else { _hangUp = true; tsslRemoteConnectInfo.Text = "等待连接..."; sbtnHangUpOpt.Text = "停止挂机"; } }; _remoteOperationBll.OnRequestRemoteInfo = query => { if (!_hangUp || _remoteDeskState.Connected) { _remoteOperationBll.ResponseRequetRemoteInfo( query.UserId, RemoteOperationState.ToClientBusy, null); return; } _remoteDeskState.Connected = true; Invoke(() => { tsslRemoteConnectInfo.Text = string.Format("[{0}] 请求连接...", query.UserAccount); }); var state = RemoteOperationState.Failed; string remoteId = string.Empty; string remotePassword = string.Empty; try { if (AnyDesk.Start(_anyDeskIstallPath, _anyDeskSourceFile)) { remoteId = AnyDesk.GetId(); remotePassword = _remoteDeskState.RemoteDeskPassword; AnyDesk.SetPassword(remotePassword); state = RemoteOperationState.Successed; } else { state = RemoteOperationState.ToClientRemoteDesktopServiceError; } } catch (Exception ex) { state = RemoteOperationState.ToClientRemoteDesktopServiceError; Error("RequestRemoteInfo - Start AnyDesk Service Failed!", ex); } if (state != RemoteOperationState.Successed) { _remoteOperationBll.ResponseRequetRemoteInfo( query.UserId, state, null); _remoteDeskState.Connected = false; Invoke(() => { tsslRemoteConnectInfo.Text = string.Format("等待连接...", query.UserAccount); }); } else { Invoke(() => { tsslRemoteConnectInfo.Text = string.Format("等待 [{0}] 连接...", query.UserAccount); }); _remoteDeskState.RemoteInfo = query; _remoteDeskState.CheckRemoteDeskStateStartTime = DateTime.Now; _remoteDeskState.TimerState = TimerState.CheckRemoteDeskState; Interlocked.Exchange(ref _remoteDeskpCheckTimerCallbackState, 0); _checkRemoteDeskTimer.Change(1000, 2000); _remoteOperationBll.ResponseRequetRemoteInfo( query.UserId, state, new RemoteClientInfo { RemoteId = remoteId, RemotePassword = remotePassword }); } }; }
void CheckRemoteDeskpTimerCallback(object state) { if (Interlocked.Exchange(ref _remoteDeskpCheckTimerCallbackState, 1) == 1) { return; } try { bool started = AnyDesk.IsServerOpened(); if (_remoteDeskState.TimerState == TimerState.CheckRemoteDeskState) { if (started) { _remoteDeskState.RemoteDeskConnectStartTime = DateTime.Now; _remoteDeskState.TimerState = TimerState.CheckRemoteDeskConnectTime; Invoke(() => { tsslRemoteConnectInfo.Text = string.Format( "[{0}] 远程控制中...", _remoteDeskState.RemoteInfo.UserAccount); tsslConnectStartTimeLabel.Visible = true; tsslConnectStartTime.Text = _remoteDeskState .RemoteDeskConnectStartTime.ToString("yyyy-MM-dd HH:mm:ss"); tsslConnectStartTime.Visible = true; tsslConnectEndTimeLabel.Visible = true; tsslConnectEndTime.Text = _remoteDeskState .RemoteDeskConnectEndTime.ToString("yyyy-MM-dd HH:mm:ss"); tsslConnectEndTime.Visible = true; ShowSubAccountInfo(true); }); return; } if (_remoteDeskState.CheckRemoteDeskStateStartTime.AddMilliseconds( _remoteDeskState.MaxCheckRemoteDeskStateTime) <= DateTime.Now) { _checkRemoteDeskTimer.Change(Timeout.Infinite, 2000); Invoke(() => { try { AnyDesk.CloseServer(); AnyDesk.Stop(); } catch (Exception ex) { Error("CheckRemoteDeskpTimerCallback -- AnyDesk Stop!", ex); } tsslRemoteConnectInfo.Text = "等待连接..."; tsslConnectStartTimeLabel.Visible = false; tsslConnectStartTime.Text = string.Empty; tsslConnectStartTime.Visible = false; tsslConnectEndTimeLabel.Visible = false; tsslConnectEndTime.Text = string.Empty; tsslConnectEndTime.Visible = false; }); _remoteDeskState.Connected = false; _remoteDeskState.RemoteInfo = null; _remoteDeskState.ConfirmReceiptInfo = null; _remoteDeskState.ChangeRemoteDeskPassword(); } return; } if (_remoteDeskState.TimerState == TimerState.CheckRemoteDeskConnectTime) { if (started) { var endTime = _remoteDeskState.RemoteDeskConnectEndTime; if (endTime <= DateTime.Now) { _checkRemoteDeskTimer.Change(Timeout.Infinite, 2000); _remoteDeskState.ChangeRemoteDeskPassword(); Invoke(() => { try { int closeCount = 0; while (AnyDesk.IsServerOpened() && closeCount++ < 10) { AnyDesk.CloseServer(); Thread.Sleep(1000); } AnyDesk.SetPassword(_remoteDeskState.RemoteDeskPassword); } catch (Exception ex) { Error("CheckRemoteDeskpTimerCallback -- AnyDesk CloseServer And SetPassword!", ex); } tsslRemoteConnectInfo.Text = "等待连接..."; tsslConnectStartTimeLabel.Visible = false; tsslConnectStartTime.Text = string.Empty; tsslConnectStartTime.Visible = false; tsslConnectEndTimeLabel.Visible = false; tsslConnectEndTime.Text = string.Empty; tsslConnectEndTime.Visible = false; ShowSubAccountInfo(false); }); _remoteDeskState.Connected = false; _remoteDeskState.RemoteInfo = null; _remoteDeskState.ConfirmReceiptInfo = null; return; } TimeSpan timeSpan = endTime - DateTime.Now; if (timeSpan.TotalMilliseconds <= 1000 * 60 * 5) { Invoke(() => { _notifyIcon.ShowBalloonTip(5000, "挂机端远程连接", string.Format("远程连接还有约 {0}分{1}秒 即将断开,请尽快操作!", timeSpan.Minutes, timeSpan.Seconds), ToolTipIcon.Warning); }); } } else { _checkRemoteDeskTimer.Change(Timeout.Infinite, 2000); _remoteDeskState.ChangeRemoteDeskPassword(); _remoteDeskState.Connected = false; _remoteDeskState.RemoteInfo = null; _remoteDeskState.ConfirmReceiptInfo = null; Invoke(() => { try { AnyDesk.SetPassword(_remoteDeskState.RemoteDeskPassword); } catch (Exception ex) { Error("CheckRemoteDeskpTimerCallback -- AnyDesk SetPassword!", ex); } tsslRemoteConnectInfo.Text = "等待连接..."; tsslConnectStartTimeLabel.Visible = false; tsslConnectStartTime.Text = string.Empty; tsslConnectStartTime.Visible = false; tsslConnectEndTimeLabel.Visible = false; tsslConnectEndTime.Text = string.Empty; tsslConnectEndTime.Visible = false; ShowSubAccountInfo(false); }); return; } } } catch (Exception ex) { Error("CheckRemoteDeskpTimerCallback!", ex); } finally { Interlocked.Exchange(ref _remoteDeskpCheckTimerCallbackState, 0); } }
void SdgvOrderRecordListCellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex == 9) { var parent = FindForm() as ViewOptMain; if (parent == null) { return; } var row = SdgvOrderRecordList.Rows[e.RowIndex]; var value = row.Cells[9].FormattedValue.ToString(); if (string.Equals(value, "连接")) { if (parent.RemoteDeskConnectState.Connected) { MessageBoxEx.Show(this, "已经连接挂机端操作,不能同时进行多个连接操作!", "连接挂机端", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if ((bool)row.Cells[7].Value) { parent.RemoteDeskConnectState.Connected = true; var orcderRecord = row.DataBoundItem as OrderRecordDetails; parent.OnRemoteOperationRequest(new UserSubAccountPageListVM { UserId = orcderRecord.ClientUserId, Id = orcderRecord.ClientUserSubAccountId, UserAccount = orcderRecord.ClientUserAccount, TaoBaoAccount = orcderRecord.ClientUserSubAccount }, ConnectOptFrom.OrderRecorList); } else { MessageBoxEx.Show(this, "该挂机端不在线,不能连接!\r\n\r\n可尝试刷新挂机端信息后,再进行操作。", "连接挂机端", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } else if (string.Equals(value, "已完结")) { MessageBoxEx.Show(this, "该刷单操作已完结,不能再进行操作。", "连接挂机端", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { if (AnyDesk.IsClientOpened()) { AnyDesk.CloseClient(); } parent.StartOrderRecord(); } } }
void Init() { SetToMax(); _orderRecordControl = new OrderRecordListControl(_shopBll, _orderStateBll); _orderRecordControl.Dock = DockStyle.Fill; tpShippingList.Controls.Add(_orderRecordControl); skinTabControl.SelectedIndexChanged += (sender, e) => { if (skinTabControl.SelectedIndex == 1 && !_remoteDeskConnectState.Connected) { LoadOrderRecordPageList(1, _orderRecordControl.PaginationOrderRecordList.PageSize); } }; _remoteDeskConnectState = new RemoteDeskConnectState(); _remoteDeskCheckTimer = new System.Threading.Timer( RemoteDeskCheckTimerCallback, null, Timeout.Infinite, 2000); sdgvSubAccountList.AutoGenerateColumns = false; sdgvSubAccountList.CellFormatting += (sender, e) => { switch (e.ColumnIndex) { case 1: string acc = e.Value as string; if (!string.IsNullOrEmpty(acc)) { int result; int markCount = Math.DivRem(acc.Length, 2, out result); if (result != 0) { markCount++; } var accArray = acc.ToCharArray(); for (int i = 1; i <= markCount; i += 1) { accArray[acc.Length - i] = '*'; } e.Value = new string(accArray); } break; case 2: byte?index = (byte?)e.Value; if (index.HasValue) { e.Value = ConstData.TaoBaoLevels[index.Value - 1].Name; } break; case 3: bool?sex = (bool?)e.Value; if (sex.HasValue) { e.Value = sex.Value ? "男" : "女"; } break; case 5: var data = sdgvSubAccountList.DataSource as IList <UserSubAccountPageListVM>; if (data != null && data.Count > e.RowIndex) { var vm = data[e.RowIndex]; e.Value = string.Format("{0} - {1} - {2}", vm.Province, vm.City, vm.District); } break; case 8: if ((bool)e.Value) { e.Value = "在线"; e.CellStyle.BackColor = Color.Green; e.CellStyle.SelectionBackColor = Color.Green; } else { e.Value = "离线"; e.CellStyle.BackColor = Color.Red; e.CellStyle.SelectionBackColor = Color.Red; } break; case 9: if (e.Value == null) { e.Value = "未连接"; } if (e.Value.ToString().Equals("正在连接")) { e.CellStyle.BackColor = Color.Yellow; e.CellStyle.SelectionBackColor = Color.Yellow; e.CellStyle.ForeColor = Color.Red; e.CellStyle.SelectionForeColor = Color.Red; } break; case 10: if (e.Value == null) { e.Value = "连接"; } break; case 11: int?dayCount = e.Value as int?; if (dayCount.HasValue && dayCount.Value >= 3) { e.CellStyle.BackColor = e.CellStyle.SelectionBackColor = Color.Red; } break; case 13: var orderTypeDetailsList = e.Value as IList <OrderTypeDetails>; if (orderTypeDetailsList != null && orderTypeDetailsList.Count > 0) { StringBuilder orderTypeSb = new StringBuilder(); foreach (var orderTypeDetails in orderTypeDetailsList) { orderTypeSb.AppendFormat("{0}({1}) ", orderTypeDetails.Name, orderTypeDetails.Count); } e.Value = orderTypeSb.ToString(); } else { e.Value = string.Empty; } break; } }; sdgvSubAccountList.CellContentClick += (sender, e) => { if (e.RowIndex == -1) { return; } if (e.ColumnIndex == 10) { var row = sdgvSubAccountList.Rows[e.RowIndex]; var value = row.Cells[e.ColumnIndex].FormattedValue.ToString(); if (string.Equals(value, "连接")) { if (_remoteDeskConnectState.Connected) { MessageBoxEx.Show(this, "已经连接挂机端操作,不能同时进行多个连接操作!", "连接挂机端", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } //开始连接前,关闭所有连接窗口。 while (AnyDesk.IsClientOpened()) { AnyDesk.CloseClient(); } if ((bool)row.Cells[8].Value) { _remoteDeskConnectState.Connected = true; var view = _viewFactory.GetView <ViewReadyConnectClient>(); view.Model = row.DataBoundItem as UserSubAccountPageListVM; if (view.ShowDialog(this) != DialogResult.OK) { _remoteDeskConnectState.Connected = false; } } else { MessageBoxEx.Show(this, "该挂机端不在线,不能连接!\r\n\r\n可尝试刷新挂机端信息后,再进行操作。", "连接挂机端", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } else { while (AnyDesk.IsClientOpened()) { AnyDesk.CloseClient(); } StartOrderRecord(); } } }; scbProvince.SelectedIndexChanged += (sender, e) => { if (scbProvince.SelectedIndex != -1) { var value = scbProvince.SelectedItem as Province; if (value.ProvinceID != -1) { scbCity.DisplayMember = "CityName"; scbCity.DataSource = _areaBll.GetCityList(value.ProvinceID); } else { scbCity.DataSource = null; scbDistrict.DataSource = null; } } else { scbCity.DataSource = null; scbDistrict.DataSource = null; } }; scbCity.SelectedIndexChanged += (sender, e) => { if (scbCity.SelectedIndex != -1) { var value = scbCity.SelectedItem as City; if (value.CityID != -1) { scbDistrict.DisplayMember = "DistrictName"; scbDistrict.DataSource = _areaBll.GetDistrictList(value.CityID); } else { scbDistrict.DataSource = null; } } else { scbDistrict.DataSource = null; } }; tsmiSubAccManage.Click += (sender, e) => { var view = _viewFactory.GetView <ViewSubAccountManage>(); view.ShowDialog(this); }; tsmiShopManage.Click += (sender, e) => { var view = _viewFactory.GetView <ViewShopManage>(); view.ShowDialog(this); }; tsmiAccountInfo.Click += (sender, e) => { var view = _viewFactory.GetView <ViewUserInfo>(); view.ShowDialog(this); }; tsmiChangePwd.Click += (sender, e) => { var view = _viewFactory.GetView <ViewChangePassword>(); view.ShowDialog(this); }; tsmiAbout.Click += (sender, e) => { var view = _viewFactory.GetView <ViewAbout>(); view.ShowDialog(this); }; paginationSubAccount.Reload += (sender, e) => { LoadSubAccountPageList( paginationSubAccount.PageIndex, paginationSubAccount.PageSize); }; sbtnSearch.Click += (sender, e) => { LoadSubAccountPageList( 1, paginationSubAccount.PageSize); }; }
internal void OnRemoteOperationRequest( UserSubAccountPageListVM model, ConnectOptFrom connectOptFrom = ConnectOptFrom.ClientList) { _remoteDeskConnectState.ConnectOptFrom = connectOptFrom; DataGridViewRow selectedRow; if (connectOptFrom == ConnectOptFrom.ClientList) { selectedRow = sdgvSubAccountList.SelectedRows[0]; selectedRow.Cells[9].Value = "正在连接"; selectedRow.Cells[10].Value = "断开连接"; } else { selectedRow = _orderRecordControl.SdgvOrderRecordList.SelectedRows[0]; selectedRow.Cells[8].Value = "正在连接"; selectedRow.Cells[9].Value = "断开连接"; } _remoteDeskConnectState.SelectedRow = selectedRow; _remoteDeskConnectState.ConnectModel = model; tsslRemoteConnectInfo.Text = string.Format("请求连接 [{0}] ...", model.UserAccount); _remoteOperationBll.RequestConnectToClient( model.UserId, model.Id, model.TaoBaoAccount, response => { string info = string.Empty; switch (response.State) { case RemoteOperationState.CannotConnectServer: info = "服务器连接失败,未能获取挂机端远程连接信息"; break; case RemoteOperationState.Failed: info = "服务器异常,获取挂机端远程连接信息失败!"; break; case RemoteOperationState.NotAuditShop: info = "没有通过审核的店铺,不允许刷单!"; break; case RemoteOperationState.ClientOffline: info = "挂机端没有登录,不允许刷单!"; break; case RemoteOperationState.Goldless: info = "金币不足,不允许刷单!"; break; case RemoteOperationState.ToClientOffline: info = "该挂机端已离线!"; break; case RemoteOperationState.ToClientBusy: info = "该挂机端已有其他会员连接!"; break; case RemoteOperationState.ToClientRemoteDesktopServiceError: info = "该挂机端远程桌面服务出现错误!"; break; case RemoteOperationState.InvalidOpt: info = "非法操作!与服务器连接断开,请稍后重试!"; break; } Invoke(() => { if (response.State != RemoteOperationState.Successed) { MessageBoxEx.Show(this, info, "获取挂机端远程连接信息", MessageBoxButtons.OK, MessageBoxIcon.Information); if (connectOptFrom == ConnectOptFrom.ClientList) { selectedRow.Cells[9].Value = null; selectedRow.Cells[10].Value = null; } else { selectedRow.Cells[8].Value = null; selectedRow.Cells[9].Value = null; } _remoteDeskConnectState.Connected = false; _remoteDeskConnectState.ConnectModel = null; _remoteDeskConnectState.ConnectOptFrom = ConnectOptFrom.ClientList; tsslRemoteConnectInfo.Text = "未连接"; return; } var sourceFile = Path.Combine(Application.StartupPath, @"remotedesk\anydesk\anydesk.exe"); if (!File.Exists(sourceFile)) { MessageBoxEx.Show(this, info, "远程桌面软件丢失,不能进行远程连接!", MessageBoxButtons.OK, MessageBoxIcon.Information); if (connectOptFrom == ConnectOptFrom.ClientList) { selectedRow.Cells[9].Value = null; selectedRow.Cells[10].Value = null; } else { selectedRow.Cells[8].Value = null; selectedRow.Cells[9].Value = null; } _remoteDeskConnectState.Connected = false; _remoteDeskConnectState.ConnectModel = null; _remoteDeskConnectState.ConnectOptFrom = ConnectOptFrom.ClientList; tsslRemoteConnectInfo.Text = "未连接"; return; } Interlocked.Exchange(ref _remoteDeskpCheckTimerCallbackState, 0); _remoteDeskConnectState.IsShowOrderRecordView = false; _remoteDeskConnectState.TimerState = TimerState.CheckRemoteDeskConnectOpen; _remoteDeskCheckTimer.Change(2000, 2000); tsslRemoteConnectInfo.Text = string.Format("开始连接 [{0}] ...", model.UserAccount); AnyDesk.Connect(sourceFile, response.Data.RemoteId, response.Data.RemotePassword); }); }); }