瀏覽代碼

1、宏变量常量化;
2、魔数常量化;
3、新增函数:AttachTaskInfo2Buffer
4、TCP通信:查询任务;

scbc.sat2 5 年之前
父節點
當前提交
2b9ba32a24

+ 1 - 1
SATService/SATService/Global.cpp

@@ -222,7 +222,7 @@ namespace GLOBAL
 		GetPrivateProfileString(_T("LinuxDevice"), _T("model"), _T(""), g_stSATConfig.stLinuxDevice.szModel, MAX_PATH, szIniPath);
 
 		// 读取其他目录的配置文件;sat_result_dir
-		_stprintf_s(szIniPath, _T("%s%s"), g_szPython27Dir, "Lib\site-packages\ssat_sdk\config\resource_run.cfg");
+		_stprintf_s(szIniPath, _T("%s%s"), g_szPython27Dir, "Lib\\site-packages\\ssat_sdk\\config\\resource_run.cfg");
 		GetPrivateProfileString(_T("COMM"), _T("sat_result_dir"), _T(""), g_stSATConfig.szDetailXmlDir, MAX_PATH, szIniPath);
 		// 将反斜转正斜;
 		std::string dir = Replace(g_stSATConfig.szDetailXmlDir, "\\", "/");

+ 3 - 3
SATService/SATService/SATDevices.cpp

@@ -371,7 +371,7 @@ void CSATDevices::SetDeviceUsageStatus(std::string strDevName, SATDEV::DEVICE_US
 	}
 }
 
-int CSATDevices::AttachDeviceName2Buffer(SATPROTO::Device (&pbuff)[30])
+int CSATDevices::AttachDeviceName2Buffer(SATPROTO::Device (&pbuff)[SATPROTO::MAX_DEVS])
 {
 	int count = 0;
 	if ( pbuff ) {
@@ -381,8 +381,8 @@ int CSATDevices::AttachDeviceName2Buffer(SATPROTO::Device (&pbuff)[30])
 			pbuff[count].nType = it->nType;
 			pbuff[count].nStatus = it->nStatus;
 			memcpy_s(pbuff[count++].szName, MAX_PATH, it->strName.c_str(), it->strName.size());
-			// ³¬¹ý30Í˳ö;
-			if ( count == 30)
+			// ³¬¹ýMAX_DEVSÍ˳ö;
+			if ( count == SATPROTO::MAX_DEVS )
 				break;
 		}
 	}

+ 1 - 1
SATService/SATService/SATDevices.h

@@ -112,7 +112,7 @@ public:
 	static void SetDeviceUsageStatus(std::string strDevName, SATDEV::DEVICE_USAGE_STATUS status);
 
 	// ¸½¼ÓÉ豸Ãûµ½»º´æÖÐ;
-	static int AttachDeviceName2Buffer(SATPROTO::Device (&pbuff)[30]);
+	static int AttachDeviceName2Buffer(SATPROTO::Device (&pbuff)[SATPROTO::MAX_DEVS]);
 
 };
 

+ 31 - 1
SATService/SATService/SATExecutor.cpp

@@ -835,6 +835,36 @@ bool CSATExecutor::GetCaseXMLResult(std::string xmlpath, std::vector<STCaseItem>
 	return true;
 }
 
+int CSATExecutor::AttachTaskInfo2Buffer(SATPROTO::TaskInfo (&pbuff)[SATPROTO::MAX_TASKS])
+{
+	int count = 0;
+	if ( pbuff ) {
+		AutoThreadSection ats(&m_csTask);
+		std::list<SATHTTP::STTask>::iterator it = m_vtTask.begin();
+		for ( ;it != m_vtTask.end(); it++ ) {
+			pbuff[count].nStatus = it->_nExecutionState;
+			pbuff[count].nTaskId = it->Id;
+			memcpy_s(pbuff[count].szTaskNo, SATPROTO::MAX_NAME, it->Job.strUniqueId.c_str(), it->Job.strUniqueId.size());
+			memcpy_s(pbuff[count].szTaskName, SATPROTO::MAX_NAME, it->strTaskName.c_str(), it->strTaskName.size());
+
+			int nIndex = 0;
+			for (std::vector<SATHTTP::STCase>::iterator _case = it->Job.vtCases.begin(); _case != it->Job.vtCases.end(); _case++) {
+				pbuff[count].ssCases[nIndex].nStatus = _case->_nExecutionState;
+				//pbuff[count].ssCases[nIndex].nCaseId = _case->_nCaseStep;
+				memcpy_s(pbuff[count].ssCases[nIndex].szCaseName, SATPROTO::MAX_NAME, _case->strCaseName.c_str(), _case->strCaseName.size());
+				nIndex++;
+			}
+
+			count++;
+			// ³¬¹ýMAX_TASKSÍ˳ö;
+			if ( count == SATPROTO::MAX_TASKS )
+				break;
+		}
+	}
+
+	return count;
+}
+
 void CSATExecutor::StartWork()
 {
 	m_hEventHearbeat = CreateEvent(NULL, TRUE, FALSE, NULL);
@@ -1076,4 +1106,4 @@ DWORD CSATExecutor::ExecuteScriptThread(LPVOID lpVoid)
 	} while ( WaitForSingleObject(that->m_hEventExcuteScript, 10000) == WAIT_TIMEOUT );
 
 	return 0;
-}
+}

+ 3 - 0
SATService/SATService/SATExecutor.h

@@ -111,6 +111,9 @@ public:
 	bool ReportTaskFinish(SATHTTP::STTask* pTask);
 	// 获取用例xml结果;
 	bool GetCaseXMLResult(std::string xmlpath, std::vector<STCaseItem> &vtCaseItem);
+	// 将任务列表附加到缓存中;
+	int AttachTaskInfo2Buffer(SATPROTO::TaskInfo (&pbuff)[SATPROTO::MAX_TASKS]);
+
 	// 其他接口;
 public:
 	// 工作开始函数;	

+ 33 - 5
SATService/SATService/SATProtocol.h

@@ -4,6 +4,14 @@
 #pragma once
 
 namespace SATPROTO{
+	// 最大设备数;
+	const int MAX_DEVS(30);
+	// 文件名最大长度;
+	const int MAX_NAME(64);
+	// 最大用例数;
+	const int MAX_CASES(50);
+	// 最大任务数;
+	const int MAX_TASKS(10);
 	//////////////////////////////////////////////////////////////////////////
 	// 具体协议指令;
 	enum ProtocolCMD {
@@ -63,14 +71,34 @@ namespace SATPROTO{
 	typedef struct __QUERY_DEVICES_RESP__ {
 		// 设备数量;
 		int			nSize;
-		// 最多只能返回30个设备;
-		Device		ssDevs[30];
+		// 最多只能返回MAX_DEVS个设备;
+		Device		ssDevs[MAX_DEVS];
 	}DeviceResp, *pDeviceResp;
 
+	typedef struct __CASE_INFO__ {
+		//int			nCaseId;					// 用例ID;
+		int			nStatus;					// 用例状态;
+		int			szCaseName[MAX_NAME];		// 用例名称;
+		//int			szCaseLogPath[MAX_PATH];	// 用例日志路径;	
+	}CaseInfo, *pCaseInfo;
+
 	// 任务查询;
-	typedef struct __QUERY_TASK_RESP__{
-		
-	}TaskResp, *pTaskResp;
+	typedef struct __TASK_INFO__ {
+		int			nStatus;					// 任务状态;  0:执行中;1:执行完成;
+		int			nTaskId;					// 任务ID;
+		char		szTaskNo[MAX_NAME];			// 任务编号;
+		char		szTaskName[MAX_NAME];		// 任务名称;
+		//char		szDeviceId[MAX_PATH];		// 设备ID(序列号);
+		//char		szStartTime[MAX_PATH];		// 任务开始时间;
+		//char		szEndTime[MAX_PATH];		// 任务结束时间;
+		//char		szScriptDir[MAX_PATH];		// 脚本路径;
+		CaseInfo	ssCases[MAX_CASES];			// 每个任务上限MAX_CASES个用例脚本;
+	}TaskInfo, *pTaskInfo;
+
+	typedef struct __QUERY_TASK_RESP__ {
+		int			nSize;
+		TaskInfo	ssTasks[MAX_TASKS];
+	}TaskInfoResp, *pTaskInfoResp;
 
 #pragma pack(pop)
 }

+ 24 - 1
SATService/SATService/SATTCPServer.cpp

@@ -961,7 +961,7 @@ void CSATTCPServer::_TaskProcess(PER_IO_CONTEXT* pIoContext, SATPROTO::Package*
 					pSendPak->header.len = len;
 					// 转换pak->buf为结构体;
 					SATPROTO::DeviceResp *pDevResp = (SATPROTO::DeviceResp*)(pbuff+sizeof(SATPROTO::DataHeader));
-					memset(pDevResp->ssDevs, 0, 30*sizeof(SATPROTO::Device));
+					memset(pDevResp->ssDevs, 0, SATPROTO::MAX_DEVS*sizeof(SATPROTO::Device));
 					// 获取设备列表;
 					pDevResp->nSize = CSATDevices::AttachDeviceName2Buffer(pDevResp->ssDevs);
 
@@ -973,6 +973,29 @@ void CSATTCPServer::_TaskProcess(PER_IO_CONTEXT* pIoContext, SATPROTO::Package*
 					pbuff = NULL;
 				}
 				break;
+			case SATPROTO::CMD_QUERY_TASK:
+				{
+					long len = sizeof(SATPROTO::DataHeader) + sizeof(SATPROTO::TaskInfo)*SATPROTO::MAX_TASKS;
+					byte *pbuff = new byte[len];
+					memset(pbuff, 0, len);
+					SATPROTO::Package *pSendPak = (SATPROTO::Package *)pbuff;
+					pSendPak->header.protocol = 0xAA;
+					pSendPak->header.cmd = pHeader->cmd;
+					pSendPak->header.len = len;
+					// 转换pak->buf为结构体;
+					SATPROTO::TaskInfoResp *pTaskResp = (SATPROTO::TaskInfoResp*)(pbuff+sizeof(SATPROTO::DataHeader));
+					memset(pTaskResp->ssTasks, 0, SATPROTO::MAX_TASKS*sizeof(SATPROTO::TaskInfo));
+					// 获取设备列表;
+					pTaskResp->nSize = CSATExecutor::GetInstance()->AttachTaskInfo2Buffer(pTaskResp->ssTasks);
+
+					// 返回给客户端;
+					send(pIoContext->m_sockAccept, (const char*)pbuff, len, 0);
+
+					// 释放内存;
+					delete []pbuff;
+					pbuff = NULL;
+				}
+				break;
 			default:
 				break;
 		}