123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509 |
- // DlgService.cpp: 实现文件
- //
- #include "stdafx.h"
- #include "SATHelper.h"
- #include "DlgService.h"
- #include "afxdialogex.h"
- #include "SATClient.h"
- //#include "SATProtocol.h"
- #include "SVNProc.h"
- // CDlgService 对话框
- IMPLEMENT_DYNAMIC(CDlgService, CDialogEx)
- CDlgService::CDlgService(CWnd* pParent /*=nullptr*/)
- : CDialogEx(IDD_DLG_SERVICE, pParent)
- {
- m_bEnd = FALSE;
- }
- CDlgService::~CDlgService()
- {
- m_bEnd = TRUE;
- }
- void CDlgService::DoDataExchange(CDataExchange* pDX)
- {
- CDialogEx::DoDataExchange(pDX);
- DDX_Control(pDX, IDC_LIST_DEVICES, m_listDevices);
- DDX_Control(pDX, IDC_LIST_TASK, m_listTask);
- DDX_Control(pDX, BTN_MODIFY_RUNNER_NAME, m_btnModify);
- DDX_Control(pDX, BTN_ADD_ANDROID, m_btnAddAndroid);
- DDX_Control(pDX, BTN_MI_INIT, m_btnMIInit);
- DDX_Control(pDX, BTN_SCBC_INIT, m_btnSCBCInit);
- DDX_Control(pDX, BTN_SVN_UPDATE, m_btnSVNUpdate);
- DDX_Control(pDX, TX_TASKID, m_ctrlTaskId);
- DDX_Control(pDX, LABLE_TASK_STATUS, m_lbTaskStatus);
- }
- BEGIN_MESSAGE_MAP(CDlgService, CDialogEx)
- ON_WM_PAINT()
- ON_WM_CTLCOLOR()
- ON_BN_CLICKED(BTN_MODIFY_RUNNER_NAME, &CDlgService::OnBnClickedModifyRunnerName)
- ON_BN_CLICKED(BTN_ADD_ANDROID, &CDlgService::OnBnClickedAddAndroid)
- ON_WM_TIMER()
- ON_NOTIFY(NM_RCLICK, IDC_LIST_DEVICES, &CDlgService::OnNMRClickListDevices)
- ON_COMMAND(ID_DEVICES_DEL, &CDlgService::OnDevicesDel)
- ON_BN_CLICKED(BTN_MI_INIT, &CDlgService::OnBnClickedMiInit)
- ON_BN_CLICKED(BTN_SCBC_INIT, &CDlgService::OnBnClickedScbcInit)
- ON_WM_SIZE()
- ON_NOTIFY(NM_DBLCLK, IDC_LIST_TASK, &CDlgService::OnNMDblclkListTask)
- ON_BN_CLICKED(BTN_SVN_UPDATE, &CDlgService::OnBnClickedSvnUpdate)
- END_MESSAGE_MAP()
- // CDlgService 消息处理程序
- BOOL CDlgService::OnInitDialog()
- {
- CDialogEx::OnInitDialog();
- // TODO: 在此添加额外的初始化
- // 做为子窗口,这里设置透明度没有任何效果;
- // SetLayeredWindowAttributes(RGB(1, 2, 3), 0, LWA_COLORKEY/*|LWA_ALPHA*/);
- InitCtrl();
- FillData2Ctrl();
- #if 0
- // 5秒刷新一次;
- SetTimer(0, 5000, NULL);
- SetTimer(1, 10000, NULL);
- #else
- std::thread t([](CDlgService *p) {
- while (!p->m_bEnd)
- {
- std::this_thread::sleep_for(std::chrono::milliseconds(2500));
- {
- CSATClient::GetInstance()->TCPQueryDevices(FALSE);
- int nIndex = 0;
- TCHAR szValue[MAX_PATH] = { 0 };
- p->m_listDevices.DeleteAllItems();
- for (std::vector<SATPROTO::Device>::iterator it = SATData::devices.begin(); it != SATData::devices.end(); it++) {
- _itoa_s(nIndex, szValue, 10);
- p->m_listDevices.InsertItem(nIndex, szValue);
- if (it->nType == 0)
- p->m_listDevices.SetItemText(nIndex, 0, "虚拟");
- else if (it->nType == 1)
- p->m_listDevices.SetItemText(nIndex, 0, "USB");
- else if (it->nType == 2)
- p->m_listDevices.SetItemText(nIndex, 0, "网络");
- // 名称;
- p->m_listDevices.SetItemText(nIndex, 1, it->szName);
- if (it->nStatus == 0)
- p->m_listDevices.SetItemText(nIndex, 2, "在线");
- else if (it->nStatus == 1)
- p->m_listDevices.SetItemText(nIndex, 2, "离线");
- else if ( it->nStatus == 2 )
- p->m_listDevices.SetItemText(nIndex, 2, "掉线");
- else if (it->nStatus == 3)
- p->m_listDevices.SetItemText(nIndex, 2, "未认证");
- nIndex++;
- }
- }
- }
- OutputDebugString("退出刷新设备线程\n");
- },this);
- t.detach();
- std::thread t2([](CDlgService* p) {
- while (!p->m_bEnd)
- {
- std::this_thread::sleep_for(std::chrono::milliseconds(10000));
- {
- CSATClient::GetInstance()->TCPQueryTasks(FALSE);
- int nIndex = 0;
- p->m_listTask.DeleteAllItems();
- TCHAR szValue[MAX_PATH] = { 0 };
-
- for (int i = 0; i < SATData::task_resp.nSize; i++) {
- // 任务编号;
- p->m_ctrlTaskId.SetWindowText(_T(""));
- p->m_ctrlTaskId.SetWindowText(SATData::task_resp.ssTasks[i].szTaskNo);
- // 任务状态;
- p->m_lbTaskStatus.SetWindowText(_T(""));
- p->m_lbTaskStatus.SetWindowText(SATData::task_resp.ssTasks[i].szStatus);
-
- if (SATData::task_resp.ssTasks[i].nCaseSize) {
- // 遍历出所有用例;
- TCHAR szIndex[8] = { 0 };
- // 脚本数量;
- int nSize = SATData::task_resp.ssTasks[i].nCaseSize;
- if (nSize > SATPROTO::MAX_CASES)
- nSize = SATPROTO::MAX_CASES;
- for (int k = 0; k < nSize; k++) {
- _itoa_s(k, szIndex, 10);
- SATPROTO::CaseInfo& caseInfo = SATData::task_resp.ssTasks[i].ssCases[k];
- p->m_listTask.InsertItem(nIndex, szIndex);
- p->m_listTask.SetItemText(nIndex, 1, caseInfo.szCaseName);
- p->m_listTask.SetItemText(nIndex, 2, caseInfo.szExecStatus);
- p->m_listTask.SetItemText(nIndex, 3, caseInfo.szResultStatus);
- p->m_listTask.SetItemText(nIndex, 4, caseInfo.szCaseLogPath);
- }
- }
- nIndex++;
- }
- }
- }
- OutputDebugString("退出刷新任务线程\n");
- }, this);
- t2.detach();
- #endif
- return TRUE; // return TRUE unless you set the focus to a control
- // 异常: OCX 属性页应返回 FALSE
- }
- void CDlgService::OnPaint()
- {
- CPaintDC dc(this); // device context for painting
- // TODO: 在此处添加消息处理程序代码
- // 不为绘图消息调用 CDialogEx::OnPaint()
- CRect rc;
- GetClientRect(rc);
- CBrush brush;
- brush.CreateSolidBrush(0xFFEFD5);
- dc.FillRect(&rc, &brush);
- }
- void CDlgService::InitCtrl()
- {
- int nIndex = 0;
- // 初始化设备列表;
- m_listDevices.InsertColumn(nIndex, "类型");
- m_listDevices.SetColumnWidth(nIndex++, 38);
- m_listDevices.InsertColumn(nIndex, "TV名称");
- m_listDevices.SetColumnWidth(nIndex++, 115);
- m_listDevices.InsertColumn(nIndex, "状态");
- m_listDevices.SetColumnWidth(nIndex++, 38);
- m_listDevices.SetExtendedStyle(m_listDevices.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
- // 初始化任务列表;
- m_listTask.InsertColumn(0, "No");
- m_listTask.SetColumnWidth(0, 25);
- m_listTask.InsertColumn(1, "脚本名称");
- m_listTask.SetColumnWidth(1, 130);
- m_listTask.InsertColumn(2, "执行状态");
- m_listTask.SetColumnWidth(2, 60);
- m_listTask.InsertColumn(3, "结果状态");
- m_listTask.SetColumnWidth(3, 60);
- m_listTask.InsertColumn(4, "日志");
- m_listTask.SetColumnWidth(4, 55);
- m_listTask.SetExtendedStyle(m_listTask.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
- COLORREF color = RGB(0x87, 0xCE, 0xFA);
- // 修改按钮默认样式;
- m_btnModify.m_bTransparent = FALSE;
- m_btnModify.m_bDontUseWinXPTheme = TRUE;
- // 设置背景色;
- m_btnModify.SetFaceColor(color, TRUE);
- // 消除单击时黑色内圈;
- m_btnModify.m_bDrawFocus = FALSE;
- // 设置按钮扁平样式;
- m_btnModify.m_nFlatStyle = CMFCButton::FlatStyle::BUTTONSTYLE_FLAT;
- // 设置鼠标形状;
- m_btnModify.SetMouseCursorHand();
- m_btnAddAndroid.m_bTransparent = FALSE;
- m_btnAddAndroid.m_bDontUseWinXPTheme = TRUE;
- // 设置背景色;
- m_btnAddAndroid.SetFaceColor(color, TRUE);
- // 消除单击时黑色内圈;
- m_btnAddAndroid.m_bDrawFocus = FALSE;
- // 设置按钮扁平样式;
- m_btnAddAndroid.m_nFlatStyle = CMFCButton::FlatStyle::BUTTONSTYLE_FLAT;
- // 设置鼠标形状;
- m_btnAddAndroid.SetMouseCursorHand();
- //color = RGB(0x87, 0xCE, 0xFA);
- m_btnMIInit.m_bTransparent = FALSE;
- m_btnMIInit.m_bDontUseWinXPTheme = TRUE;
- // 设置背景色;
- m_btnMIInit.SetFaceColor(color, TRUE);
- // 消除单击时黑色内圈;
- m_btnMIInit.m_bDrawFocus = FALSE;
- // 设置按钮扁平样式;
- m_btnMIInit.m_nFlatStyle = CMFCButton::FlatStyle::BUTTONSTYLE_FLAT;
- // 设置鼠标形状;
- m_btnMIInit.SetMouseCursorHand();
- m_btnSCBCInit.m_bTransparent = FALSE;
- m_btnSCBCInit.m_bDontUseWinXPTheme = TRUE;
- // 设置背景色;
- m_btnSCBCInit.SetFaceColor(color, TRUE);
- // 消除单击时黑色内圈;
- m_btnSCBCInit.m_bDrawFocus = FALSE;
- // 设置按钮扁平样式;
- m_btnSCBCInit.m_nFlatStyle = CMFCButton::FlatStyle::BUTTONSTYLE_FLAT;
- // 设置鼠标形状;
- m_btnSCBCInit.SetMouseCursorHand();
- color = RGB(237, 28, 36);
- m_btnSVNUpdate.m_bTransparent = FALSE;
- m_btnSVNUpdate.m_bDontUseWinXPTheme = TRUE;
- // 设置背景色;
- m_btnSVNUpdate.SetFaceColor(color, TRUE);
- // 消除单击时黑色内圈;
- m_btnSVNUpdate.m_bDrawFocus = FALSE;
- // 设置按钮扁平样式;
- m_btnSVNUpdate.m_nFlatStyle = CMFCButton::FlatStyle::BUTTONSTYLE_FLAT;
- // 设置鼠标形状;
- m_btnSVNUpdate.SetMouseCursorHand();
- }
- void CDlgService::FillData2Ctrl()
- {
- SetDlgItemText(IDC_EDIT_RUNNER_NAME, Global::g_Config.strActuator.c_str());
- }
- void CDlgService::AdjustLayout()
- {
- // 窗口;
- CRect rcWnd;
- // 控件;
- CRect rcCtrl;
- // 获取窗口大小;
- GetClientRect(&rcWnd);
- CWnd* pLableIP = GetDlgItem(LABLE_IP);
- CWnd* pLableName = GetDlgItem(LABLE_NAME);
- CWnd* pCtrlName = GetDlgItem(IDC_EDIT_RUNNER_NAME);
- CWnd* pCtrlIP = GetDlgItem(IDC_IP_ANDROID);
- if (pLableIP == NULL)
- return;
- // 第一行;
- pLableName->GetWindowRect(rcCtrl);
- ScreenToClient(&rcCtrl);
- int nWidth = rcCtrl.Width();
- pCtrlName->SetWindowPos(nullptr, rcCtrl.right, rcCtrl.top, (rcWnd.Width() - nWidth - 15 ) * 5 / 7, 23, SWP_NOACTIVATE | SWP_NOZORDER);
- pCtrlName->GetWindowRect(rcCtrl);
- ScreenToClient(&rcCtrl);
- m_btnModify.SetWindowPos(nullptr, rcCtrl.right + 5, rcCtrl.top, (rcWnd.Width() - nWidth - 10) * 2 / 7, 23, SWP_NOACTIVATE | SWP_NOZORDER);
- // 第二行;
- pLableIP->GetWindowRect(rcCtrl);
- ScreenToClient(&rcCtrl);
- pCtrlIP->SetWindowPos(nullptr, rcCtrl.right, rcCtrl.top, (rcWnd.Width() - nWidth - 15) * 5 / 7, 23, SWP_NOACTIVATE | SWP_NOZORDER);
- pCtrlIP->GetWindowRect(rcCtrl);
- ScreenToClient(&rcCtrl);
- m_btnAddAndroid.SetWindowPos(nullptr, rcCtrl.right + 5, rcCtrl.top, (rcWnd.Width() - nWidth - 10) * 2 / 7, 23, SWP_NOACTIVATE | SWP_NOZORDER);
- //::MoveWindow(m_btnAddAndroid.m_hWnd, rcCtrl.right + 5, rcCtrl.top, (rcWnd.Width() - nWidth - 10) * 2 / 7, 23, TRUE);
- // 第三行;
- m_listDevices.GetWindowRect(rcCtrl);
- ScreenToClient(&rcCtrl);
- m_listDevices.SetWindowPos(nullptr, rcCtrl.left, rcCtrl.top, rcWnd.Width() - 10, rcCtrl.Height(), SWP_NOACTIVATE | SWP_NOZORDER);
- // 第四行;
- nWidth = (rcWnd.Width() - 30) / 3;
- m_btnMIInit.GetWindowRect(rcCtrl);
- ScreenToClient(&rcCtrl);
- m_btnMIInit.SetWindowPos(nullptr, rcCtrl.left, rcCtrl.top, nWidth, rcCtrl.Height(), SWP_NOACTIVATE | SWP_NOZORDER);
- m_btnMIInit.GetWindowRect(rcCtrl);
- ScreenToClient(&rcCtrl);
- m_btnSCBCInit.SetWindowPos(nullptr, rcCtrl.right + 10, rcCtrl.top, nWidth, rcCtrl.Height(), SWP_NOACTIVATE | SWP_NOZORDER);
- m_btnSCBCInit.GetWindowRect(rcCtrl);
- ScreenToClient(&rcCtrl);
- m_btnSVNUpdate.SetWindowPos(nullptr, rcCtrl.right + 10, rcCtrl.top, nWidth, rcCtrl.Height(), SWP_NOACTIVATE | SWP_NOZORDER);
- // 第五行;
- CWnd* pLableTask = GetDlgItem(LABLE_TASK);
- CWnd* pLableTaskStatus = GetDlgItem(LABLE_TASK_STATUS);
- CWnd* pCtrlTaskID = GetDlgItem(TX_TASKID);
- pLableTask->GetWindowRect(rcCtrl);
- ScreenToClient(&rcCtrl);
- nWidth = rcCtrl.Width();
- pCtrlTaskID->SetWindowPos(nullptr, rcCtrl.right, rcCtrl.top - 3, rcWnd.Width() - nWidth * 2 - 15, 23, SWP_NOACTIVATE | SWP_NOZORDER);
- pCtrlTaskID->GetWindowRect(rcCtrl);
- ScreenToClient(&rcCtrl);
- pLableTaskStatus->SetWindowPos(nullptr, rcCtrl.right + 5, rcCtrl.top, nWidth, 23, SWP_NOACTIVATE | SWP_NOZORDER);
- // 第六行;
- m_listTask.GetWindowRect(rcCtrl);
- ScreenToClient(&rcCtrl);
- m_listTask.SetWindowPos(nullptr, rcCtrl.left, rcCtrl.top, rcWnd.Width() - 10, rcWnd.Height() - rcCtrl.top - 10, SWP_NOACTIVATE | SWP_NOZORDER);
- }
- void CDlgService::OnBnClickedModifyRunnerName()
- {
- // TODO: 在此添加控件通知处理程序代码
- CString strActuator;
- GetDlgItemText(IDC_EDIT_RUNNER_NAME, strActuator);
- Global::g_Config.strActuator = strActuator.GetString();
- WritePrivateProfileString(_T("SATService"), _T("Actuator"), strActuator, Global::g_szConfig);
- CSATClient::GetInstance()->TCPLogin(Global::g_Config.strSATUserName, Global::g_Config.strSATPassword, Global::g_Config.strActuator);
- }
- void CDlgService::OnBnClickedAddAndroid()
- {
- // TODO: 在此添加控件通知处理程序代码
- CIPAddressCtrl* pIP = (CIPAddressCtrl*)GetDlgItem(IDC_IP_ANDROID);
- // 获取IP地址;
- BYTE nf1, nf2, nf3, nf4;
- pIP->GetAddress(nf1, nf2, nf3, nf4);
- CString str;
- str.Format("%d.%d.%d.%d", nf1, nf2, nf3, nf4);//这里的nf得到的值是IP值了
- if (str.IsEmpty())
- return;
- CSATClient::GetInstance()->TCPAddDevice(str.GetString());
- }
- void CDlgService::OnTimer(UINT_PTR nIDEvent)
- {
- // TODO: 在此添加消息处理程序代码和/或调用默认值
- CDialogEx::OnTimer(nIDEvent);
- }
- void CDlgService::OnOK()
- {
- // TODO: 在此添加专用代码和/或调用基类
- //CDialogEx::OnOK();
- }
- void CDlgService::OnCancel()
- {
- // TODO: 在此添加专用代码和/或调用基类
- //CDialogEx::OnCancel();
- }
- void CDlgService::OnNMRClickListDevices(NMHDR* pNMHDR, LRESULT* pResult)
- {
- LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
- // TODO: 在此添加控件通知处理程序代码
- NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
- if (pNMListView->iItem != -1)
- {
- CString strType = m_listDevices.GetItemText(pNMListView->iItem, 0);
- // 过滤掉虚拟设备;
- if (!strType.CompareNoCase(_T("虚拟")))
- return;
-
- DWORD dwPos = GetMessagePos();
- CPoint point(LOWORD(dwPos), HIWORD(dwPos));
- CMenu menu;
- //添加线程操作
- if (!menu.LoadMenu(IDR_POPUP_DEVICES)) //这里是我们在1中定义的MENU的文件名称
- return;
- CMenu* popup = menu.GetSubMenu(0);
- ASSERT(popup != NULL);
- popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
- }
- *pResult = 0;
- }
- void CDlgService::OnDevicesDel()
- {
- // TODO: 在此添加命令处理程序代码
- // 获取选中的设备;
- POSITION pos = m_listDevices.GetFirstSelectedItemPosition();
- if (pos != NULL)
- {
- int nSelCur = m_listDevices.GetNextSelectedItem(pos);
- if (nSelCur != -1)
- {
- CString strDeviceType = m_listDevices.GetItemText(nSelCur, 0);
- CString strDeviceName = m_listDevices.GetItemText(nSelCur, 1);
- if (!strDeviceName.IsEmpty() && strDeviceType.CompareNoCase(_T("虚拟")))
- {
- MessageBox(_T("即将删除设备:") + strDeviceName, _T("温馨提示!"), MB_ICONWARNING);
- CSATClient::GetInstance()->TCPDelDevice(strDeviceName.GetString());
- // 同时删除该项;
- m_listDevices.DeleteItem(nSelCur);
- }
- }
- }
- }
- void CDlgService::OnBnClickedMiInit()
- {
- // TODO: 在此添加控件通知处理程序代码
- if (Global::g_Config.strMIInitBat.size())
- {
- //WinExec(Global::g_Config.strMIInitBat.c_str(), SW_HIDE);
- ShellExecute(NULL, _T("open"), Global::g_Config.strMIInitBat.c_str(), NULL, NULL, SW_SHOW);
- }
- }
- void CDlgService::OnBnClickedScbcInit()
- {
- if (Global::g_Config.strSCBCInitBat.size())
- {
- // TODO: 在此添加控件通知处理程序代码
- //WinExec(Global::g_Config.strMIInitBat.c_str(), SW_HIDE);
- ShellExecute(NULL, _T("open"), Global::g_Config.strSCBCInitBat.c_str(), NULL, NULL, SW_SHOW);
- }
- }
- void CDlgService::OnSize(UINT nType, int cx, int cy)
- {
- CDialogEx::OnSize(nType, cx, cy);
- AdjustLayout();
- // TODO: 在此处添加消息处理程序代码
- }
- void CDlgService::OnNMDblclkListTask(NMHDR* pNMHDR, LRESULT* pResult)
- {
- LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
- // TODO: 在此添加控件通知处理程序代码
- *pResult = 0;
- NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
- if (pNMListView->iItem != -1)
- {
- CString strLogPath = m_listTask.GetItemText(pNMListView->iItem, 4);
- // 路径不存在,退出;
- if (!PathFileExists(strLogPath))
- return;
- ShellExecute(NULL, _T("open"), strLogPath.GetString(), NULL, NULL, SW_SHOW);
- }
- }
- void CDlgService::OnBnClickedSvnUpdate()
- {
- // TODO: 在此添加控件通知处理程序代码
- CSVNMgr::GetInstance()->Update();
- if (CSVNMgr::GetInstance()->HasNewVersion())
- {
- // 还要更新,则表示失败;
- MessageBox(_T("更新失败"), _T("更新结果:"), MB_OK|MB_ICONWARNING);
- }
- else
- {
- MessageBox(_T("更新成功,版本号为 ") + CSVNMgr::GetInstance()->GetVersion(), _T("更新结果:"), MB_OK);
- CString strVersionInfo;
- strVersionInfo.Format(_T("SATHelper 版本 %s, SAT 版本 %s"), Global::g_szVersion, CSVNMgr::GetInstance()->GetVersion());
- AfxGetMainWnd()->SetWindowText(strVersionInfo);
- CSVNMgr::GetInstance()->Store();
- }
- }
|