Ver código fonte

接口:updateDeviceMessage

scbc.sat2 5 anos atrás
pai
commit
9b899192a7

+ 7 - 7
SATHTTP/SATHTTP/CurlClient.cpp

@@ -5,7 +5,7 @@
 
 CCurlClient::CCurlClient(void)
 {
-	m_bDebug = FALSE;
+	m_bDebug = TRUE;
 	m_headers = NULL;
 }
 
@@ -32,27 +32,27 @@ static int OnDebug(CURL *, curl_infotype itype, char * pData, size_t size, void
 {   
 	if(itype == CURLINFO_TEXT)   
 	{   
-		//TRACE("[TEXT]%s\n", pData); 
+		TRACE("[TEXT]%s\n", pData); 
 		//LOG4C((LOG_WARN, "[TEXT]%s\n", pData));   
 	}   
 	else if(itype == CURLINFO_HEADER_IN)   
 	{   
-		//TRACE("[HEADER_IN]%s\n", pData); 
+		TRACE("[HEADER_IN]%s\n", pData); 
 		//LOG4C((LOG_WARN, "[HEADER_IN]%s\n", pData));
 	}   
 	else if(itype == CURLINFO_HEADER_OUT)   
 	{   
-		//TRACE("[HEADER_OUT]%s\n", pData);   
+		TRACE("[HEADER_OUT]%s\n", pData);   
 		//LOG4C((LOG_WARN, "[HEADER_OUT]%s\n", pData));
 	}   
 	else if(itype == CURLINFO_DATA_IN)   
 	{   
-		//TRACE("[DATA_IN]%s\n", pData);   
+		TRACE("[DATA_IN]%s\n", pData);   
 		//LOG4C((LOG_WARN, "[DATA_IN]%s\n", pData));
 	}   
 	else if(itype == CURLINFO_DATA_OUT)   
 	{   
-		//TRACE("[DATA_OUT]%s\n", pData);   
+		TRACE("[DATA_OUT]%s\n", pData);   
 		//LOG4C((LOG_WARN, "[DATA_OUT]%s\n", pData));
 	}   
 	return 0;   
@@ -67,7 +67,7 @@ size_t CCurlClient::OnWriteData(const void *ptr, size_t size, size_t nmemb, std:
 	return nmemb;   
 }   
 
-int CCurlClient::Post(const std::string & strUrl, const std::string & strPost, std::string & strResponse, long time_out /*= 3*/)
+CURLcode CCurlClient::Post(const std::string & strUrl, const std::string & strPost, std::string & strResponse, long time_out /*= 3*/)
 {   
 	CURLcode res;   
 	CURL* curl = curl_easy_init();   

+ 1 - 1
SATHTTP/SATHTTP/CurlClient.h

@@ -34,7 +34,7 @@ public:
 	* @param strResponse 输出参数,返回的内容  
 	* @return 返回是否Post成功  
 	*/   
-	int Post(const std::string & strUrl, const std::string & strPost, std::string & strResponse, long time_out = 3000);
+	CURLcode Post(const std::string & strUrl, const std::string & strPost, std::string & strResponse, long time_out = 3000);
 	int Post(IN LPCTSTR lpUrl, IN LPCTSTR lpPost, OUT LPTSTR lpResponse, IN CONST INT& nMaxlen, long time_out = 3000);
 	int Post(IN CString& strUrl, IN CString& strPost, OUT CString& strResponse, long time_out = 3000);
 

+ 411 - 8
SATHTTP/SATHTTP/SATHTTP.cpp

@@ -30,10 +30,12 @@ int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
 	else
 	{
 		// TODO: 在此处为应用程序的行为编写代码。
+		std::string host = "10.118.158.52:8580";//"http://10.118.158.198:8090";
+		//////////////////////////////////////////////////////////////////////////
 		SATParameters::STLoginReq stLoginReq;
 		SATParameters::STLoginResp stLoginResp;
-		std::string url = "http://10.118.158.198:8090/btc_execute_se/ajaxInteractiveManage!executeLogin.action";
-		
+		std::string url = host + "/btc_execute_se/ajaxInteractiveManage!executeLogin.action";
+
 		// 示例值;
 		stLoginReq.strUserName = "superAdmin";
 		stLoginReq.strStatus = "0";
@@ -47,16 +49,91 @@ int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
 		stLoginReq.strPassword = "123456";
 		stLoginReq.strCPU = "";
 
-		if ( Login(url, stLoginReq, stLoginResp) )
+		// ##########################先登录##############################;
+		if ( !Login(url, stLoginReq, stLoginResp) )
+		{
+			system("pause");
+			return -1;
+		}
+
+		printf("登录返回:code=%s, msg=%s, str=%s, portCount=%d, companyid=%d, runnertoken=%s\n",
+			stLoginResp.strCode.c_str(),
+			stLoginResp.strMessage.c_str(),
+			stLoginResp.strStr.c_str(),
+			stLoginResp.nPortCount,
+			stLoginResp.nCompanyId,
+			stLoginResp.strRunnerToken.c_str());
+
+		SATParameters::STDevice stDevice;
+		stDevice.strStatus = "0";
+		stDevice.strDeviceSerial = "192.168.1.119:5555";
+
+		// ##########################更新设备信息##############################;
+		SATParameters::STUpdateDeviceReq stUpdateDeviceReq;
+		SATParameters::STUpdateDeviceResp stUpdateDeviceResp;
+		__if_not_exists(url)
+		{			
+			std::string url = host + "/btc_execute_se/ajaxInteractiveManage!updateDeviceMessage.action";
+		}
+		__if_exists(url)
+		{
+			url = host + "/btc_execute_se/ajaxInteractiveManage!updateDeviceMessage.action";
+		}
+
+		stUpdateDeviceReq.strStatus = "0";
+		stUpdateDeviceReq.strUserName = "superAdmin";		
+		stUpdateDeviceReq.strIP = "10.118.158.175";
+		stUpdateDeviceReq.strStorage = "228092536KB";
+		stUpdateDeviceReq.strRunnerName = "SAT-Admin";
+		stUpdateDeviceReq.strMAC = "40:16:7e:23:10:53";
+		stUpdateDeviceReq.strReportType = "1";
+		stUpdateDeviceReq.strStartTime = "2019-12-16 19:15:30";
+		stUpdateDeviceReq.strMemory = "8938544KB";
+		stUpdateDeviceReq.strEndTime = "";
+		stUpdateDeviceReq.strCPU = "24.7%";
+		if ( UpdateDeviceMessage(url, stUpdateDeviceReq, stUpdateDeviceResp) )
+		{
+			printf("更新设备信息成功:code=%s, msg=%s, str=%s\n",
+				stLoginResp.strCode.c_str(),
+				stLoginResp.strMessage.c_str(),
+				stLoginResp.strStr.c_str());
+		}
+		else
+		{
+			printf("更新设备信息失败!\n");
+		}
+
+		// ##########################心跳包机制##############################;
+		SATParameters::STHeartbeatReq stHeartbeatReq;
+		SATParameters::STHeartbeatResp stHeartbeatResp;
+		__if_not_exists(url)
+		{			
+			std::string url = host + "/btc_execute_se/ajaxInteractiveManage!executeHeartbeat.action";
+		}
+		__if_exists(url)
+		{
+			url = host + "/btc_execute_se/ajaxInteractiveManage!executeHeartbeat.action";
+		}
+
+		// 示例值;
+		stDevice.strStatus = "0";
+		stDevice.strDeviceSerial = "192.168.1.119:5555";
+
+		stHeartbeatReq.strUserName = "superAdmin";
+		stHeartbeatReq.strRunnerMac = "40:16:7e:23:10:53";
+		stHeartbeatReq.devicelist.push_back(stDevice);
+		if ( Heartbeat(url, stHeartbeatReq, stHeartbeatResp) )
 		{
 			printf("登录返回:code=%s, msg=%s, str=%s, portCount=%d, companyid=%d, runnertoken=%s\n",
 				stLoginResp.strCode.c_str(),
 				stLoginResp.strMessage.c_str(),
-				stLoginResp.strDesc.c_str(),
+				stLoginResp.strStr.c_str(),
 				stLoginResp.nPortCount,
 				stLoginResp.nCompanyId,
 				stLoginResp.strRunnerToken.c_str());
 		}
+		
+		
 	}
 
 	system("pause");
@@ -101,7 +178,7 @@ SATHTTP_API int Login(std::string url, const SATParameters::STLoginReq &stLoginR
 
 	char *pText = cJSON_Print(pRoot);
 	std::string post_data = "requestMsg=";
-	post_data.append(pText);
+	post_data.append(pText, strlen(pText));
 
 	// 释放堆内存;
 	if (pText)
@@ -120,7 +197,7 @@ SATHTTP_API int Login(std::string url, const SATParameters::STLoginReq &stLoginR
 		if (_tcsstr(url.c_str(), "https://") || _tcsstr(url.c_str(), "HTTPS://") )
 			curlCode = curl.Posts(url, post_data, reponse);
 		else
-			curlCode = curl.Posts(url, post_data, reponse);
+			curlCode = curl.Post(url, post_data, reponse);
 
 		if ( curlCode == CURLE_OK )
 		{
@@ -135,7 +212,7 @@ SATHTTP_API int Login(std::string url, const SATParameters::STLoginReq &stLoginR
 				{
 					stLoginResp.strCode = cJSON_GetObjectItem(pMsg, "code") ? cJSON_GetObjectItem(pMsg, "code")->valuestring : "";
 					stLoginResp.strMessage = cJSON_GetObjectItem(pMsg, "message") ? cJSON_GetObjectItem(pMsg, "message")->valuestring : "";
-					stLoginResp.strDesc = cJSON_GetObjectItem(pMsg, "str") ? (cJSON_GetObjectItem(pMsg, "str")->valuestring ? cJSON_GetObjectItem(pMsg, "str")->valuestring : "") : "";
+					stLoginResp.strStr = cJSON_GetObjectItem(pMsg, "str") ? (cJSON_GetObjectItem(pMsg, "str")->valuestring ? cJSON_GetObjectItem(pMsg, "str")->valuestring : "") : "";
 					if ( stLoginResp.strCode == "00" )
 					{				
 						cJSON *pObj = cJSON_GetObjectItem(pMsg, "data");
@@ -152,7 +229,333 @@ SATHTTP_API int Login(std::string url, const SATParameters::STLoginReq &stLoginR
 						}
 					}
 				}
-				
+
+				// 错误产生,可输出msg方便查询;
+				cJSON_Delete(pRoot);	
+			}
+		}
+	}
+
+	return FALSE;
+}
+
+SATHTTP_API int UpdateDeviceMessage(std::string url, const SATParameters::STUpdateDeviceReq &stUpdateDeviceReq, SATParameters::STUpdateDeviceResp &stUpdateDeviceResp)
+{
+	// 转化为Json;
+	cJSON *pRoot = cJSON_CreateObject();
+	if ( pRoot == NULL )
+	{
+		return -1;
+	}
+
+	ASSERT(cJSON_AddStringToObject(pRoot, "sysCode", "Execute"));
+	cJSON *pData = cJSON_CreateObject();
+	if ( pData )
+	{
+		ASSERT(cJSON_AddStringToObject(pData, "status", stUpdateDeviceReq.strStatus.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "userName", stUpdateDeviceReq.strUserName.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "ip", stUpdateDeviceReq.strIP.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "storage", stUpdateDeviceReq.strStorage.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "runnerName", stUpdateDeviceReq.strRunnerName.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "mac", stUpdateDeviceReq.strMAC.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "reportType", stUpdateDeviceReq.strReportType.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "startTime", stUpdateDeviceReq.strStartTime.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "memory", stUpdateDeviceReq.strMemory.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "endTime", stUpdateDeviceReq.strEndTime.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "cpu", stUpdateDeviceReq.strCPU.c_str()));
+		cJSON *pDeviceList = cJSON_CreateArray();
+		if ( pDeviceList )
+		{
+			cJSON_AddItemToObject(pData, "devicelist", pDeviceList);
+			for ( std::vector<SATParameters::STDevice>::const_iterator it = stUpdateDeviceReq.devicelist.begin(); it != stUpdateDeviceReq.devicelist.end(); it++ )
+			{
+				cJSON *pObj = cJSON_CreateObject();
+				if ( pObj )
+				{
+					ASSERT(cJSON_AddStringToObject(pObj, "status", it->strStatus.c_str()));
+					ASSERT(cJSON_AddStringToObject(pObj, "deviceSerial", it->strDeviceSerial.c_str()));
+
+					cJSON_AddItemToObject(pDeviceList, "", pObj);
+				}
+			}
+		}
+
+		// 添加到根结点中;
+		cJSON_AddItemToObject(pRoot, "data", pData);
+	}
+
+	char *pText = cJSON_Print(pRoot);
+	std::string post_data = "requestMsg=";
+	post_data.append(pText, strlen(pText));
+
+	// 释放堆内存;
+	if (pText)
+		delete pText;
+	pText = NULL;
+
+	if ( pRoot )
+		cJSON_Delete(pRoot);
+	pRoot = NULL;		
+
+	CCurlClient curl;
+	std::string reponse;	
+	CURLcode curlCode = CURLE_OK;
+	if ( CURLE_OK == curl.Initialize() )
+	{
+		//curl.SetHeaders("Content-Type: application/json");
+		curl.SetHeaders("Accept: */*");
+		curl.SetHeaders("Connection: Keep-Alive");
+		//curl.SetHeaders("Accept-Encoding: gzip, deflate");
+		curl.SetHeaders("user-agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+		//post_data = CharEncoding::EnCode_UTF8URL(post_data.c_str());
+		//post_data = CharEncoding::EnCode_UNICODEURL(post_data.c_str());
+		//post_data = CharEncoding::EnCode_GB2312URL(post_data.c_str());
+		if (_tcsstr(url.c_str(), "https://") || _tcsstr(url.c_str(), "HTTPS://") )
+			curlCode = curl.Posts(url, post_data, reponse);
+		else
+			curlCode = curl.Post(url, post_data, reponse);
+
+		if ( curlCode == CURLE_OK )
+		{
+			reponse = CharEncoding::DeCode_URLUTF8(reponse.c_str());
+
+			// 解析返回值;
+			pRoot = cJSON_Parse(reponse.c_str());
+			if (pRoot != NULL)
+			{
+				cJSON *pMsg = cJSON_GetObjectItem(pRoot, "responseMsg");
+				if ( pMsg )
+				{
+					stUpdateDeviceResp.strCode = cJSON_GetObjectItem(pMsg, "code") ? cJSON_GetObjectItem(pMsg, "code")->valuestring : "";
+					stUpdateDeviceResp.strMessage = cJSON_GetObjectItem(pMsg, "message") ? cJSON_GetObjectItem(pMsg, "message")->valuestring : "";
+					stUpdateDeviceResp.strStr = cJSON_GetObjectItem(pMsg, "str") ? (cJSON_GetObjectItem(pMsg, "str")->valuestring ? cJSON_GetObjectItem(pMsg, "str")->valuestring : "") : "";
+					if ( stUpdateDeviceResp.strCode == "00" )
+					{				
+						cJSON *pObj = cJSON_GetObjectItem(pMsg, "data");
+						if (pObj != NULL)
+						{
+							//stLoginResp.nPortCount = cJSON_GetObjectItem(pObj, "portCount") ? cJSON_GetObjectItem(pObj, "portCount")->valueint : -1;
+							//stLoginResp.nCompanyId = cJSON_GetObjectItem(pObj, "companyId") ? cJSON_GetObjectItem(pObj, "companyId")->valueint : -1;
+							//stLoginResp.strRunnerToken = cJSON_GetObjectItem(pObj, "runnerToken") ? cJSON_GetObjectItem(pObj, "runnerToken")->valuestring : "";
+							// 释放内存;
+							cJSON_Delete(pRoot);
+
+							// 返回结果;
+							return TRUE;
+						}
+					}
+				}
+
+				// 错误产生,可输出msg方便查询;
+				cJSON_Delete(pRoot);	
+			}
+		}
+	}
+
+	return FALSE;
+}
+
+
+SATHTTP_API int Heartbeat(std::string url, const SATParameters::STHeartbeatReq &stHeartbeatReq, SATParameters::STHeartbeatResp &stHeartbeatResp) 
+{
+	// 转化为Json;
+	cJSON *pRoot = cJSON_CreateObject();
+	if ( pRoot == NULL )
+	{
+		return -1;
+	}
+
+	ASSERT(cJSON_AddStringToObject(pRoot, "sysCode", "EXECUTE"));
+	cJSON *pData = cJSON_CreateObject();
+	if ( pData )
+	{
+		ASSERT(cJSON_AddStringToObject(pData, "userName", stHeartbeatReq.strUserName.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "runnerMac", stHeartbeatReq.strRunnerMac.c_str()));
+		cJSON *pDeviceList = cJSON_CreateArray();
+		if ( pDeviceList )
+		{
+			cJSON_AddItemToObject(pData, "deviceList", pDeviceList);
+			for ( std::vector<SATParameters::STDevice>::const_iterator it = stHeartbeatReq.devicelist.begin(); it != stHeartbeatReq.devicelist.end(); it++ )
+			{
+				cJSON *pObj = cJSON_CreateObject();
+				if ( pObj )
+				{
+					ASSERT(cJSON_AddStringToObject(pObj, "status", it->strStatus.c_str()));
+					ASSERT(cJSON_AddStringToObject(pObj, "deviceSerial", it->strDeviceSerial.c_str()));
+
+					cJSON_AddItemToObject(pDeviceList, "", pObj);
+				}
+			}
+		}
+
+		// 添加到根结点中;
+		cJSON_AddItemToObject(pRoot, "data", pData);
+	}
+
+	char *pText = cJSON_Print(pRoot);
+	std::string post_data = "requestMsg=";
+	post_data.append(pText);
+
+	// 释放堆内存;
+	if (pText)
+		delete pText;
+	pText = NULL;
+
+	if ( pRoot )
+		cJSON_Delete(pRoot);
+	pRoot = NULL;		
+
+	CCurlClient curl;
+	std::string reponse;	
+	CURLcode curlCode = CURLE_OK;
+	if ( CURLE_OK == curl.Initialize() )
+	{
+		if (_tcsstr(url.c_str(), "https://") || _tcsstr(url.c_str(), "HTTPS://") )
+			curlCode = curl.Posts(url, post_data, reponse);
+		else
+			curlCode = curl.Post(url, post_data, reponse);
+
+		if ( curlCode == CURLE_OK )
+		{
+			reponse = CharEncoding::DeCode_URLUTF8(reponse.c_str());
+
+			// 解析返回值;
+			pRoot = cJSON_Parse(reponse.c_str());
+			if (pRoot != NULL)
+			{
+				cJSON *pMsg = cJSON_GetObjectItem(pRoot, "responseMsg");
+				if ( pMsg )
+				{
+					stHeartbeatResp.strCode = cJSON_GetObjectItem(pMsg, "code") ? cJSON_GetObjectItem(pMsg, "code")->valuestring : "";
+					stHeartbeatResp.strMessage = cJSON_GetObjectItem(pMsg, "message") ? cJSON_GetObjectItem(pMsg, "message")->valuestring : "";
+					stHeartbeatResp.strStr = cJSON_GetObjectItem(pMsg, "str") ? (cJSON_GetObjectItem(pMsg, "str")->valuestring ? cJSON_GetObjectItem(pMsg, "str")->valuestring : "") : "";
+					if ( stHeartbeatResp.strCode == "00" )
+					{				
+						cJSON *pObj = cJSON_GetObjectItem(pMsg, "data");
+						if (pObj != NULL)
+						{							
+							int nSise = cJSON_GetArraySize(pObj);
+							for ( int i = 0; i < nSise; i++ )
+							{
+								cJSON *pTask = cJSON_GetArrayItem(pObj, i);
+								if ( pTask )
+								{
+									SATParameters::STTask stTask;
+									stTask.strInstanceName = cJSON_GetObjectItem(pTask, "instanceName") ? cJSON_GetObjectItem(pTask, "instanceName")->valuestring : "";
+									stTask.strExecutionStatus = cJSON_GetObjectItem(pTask, "executionStatus") ? cJSON_GetObjectItem(pTask, "executionStatus")->valuestring : "";
+									stTask.strInstanceType = cJSON_GetObjectItem(pTask, "instanceType") ? cJSON_GetObjectItem(pTask, "instanceType")->valuestring : "";
+									stTask.nExecuteId = cJSON_GetObjectItem(pTask, "executeId") ? cJSON_GetObjectItem(pTask, "executeId")->valueint : -1;
+									stTask.strRequestIP = cJSON_GetObjectItem(pTask, "requestIp") ? cJSON_GetObjectItem(pTask, "requestIp")->valuestring : "";
+									stTask.strTaskUseType = cJSON_GetObjectItem(pTask, "taskUseType") ? cJSON_GetObjectItem(pTask, "taskUseType")->valuestring : "";
+									stTask.nDeviceId = cJSON_GetObjectItem(pTask, "deviceId") ? cJSON_GetObjectItem(pTask, "deviceId")->valueint : -1;
+									stTask.strDiffTaskInstanceFlag = cJSON_GetObjectItem(pTask, "diffTaskInstanceFlag") ? cJSON_GetObjectItem(pTask, "diffTaskInstanceFlag")->valuestring : "";
+									stTask.strTaskType = cJSON_GetObjectItem(pTask, "taskType") ? cJSON_GetObjectItem(pTask, "taskType")->valuestring : "";
+									stTask.nInstanceId = cJSON_GetObjectItem(pTask, "instanceId") ? cJSON_GetObjectItem(pTask, "instanceId")->valueint : -1;
+									stTask.strProgress = cJSON_GetObjectItem(pTask, "progress") ? cJSON_GetObjectItem(pTask, "progress")->valuestring : "";
+									stTask.strStartTime = cJSON_GetObjectItem(pTask, "startTime") ? cJSON_GetObjectItem(pTask, "startTime")->valuestring : "";
+									stTask.strStopTime = cJSON_GetObjectItem(pTask, "stopTime") ? cJSON_GetObjectItem(pTask, "stopTime")->valuestring : "";
+									stTask.strTaskName = cJSON_GetObjectItem(pTask, "taskName") ? cJSON_GetObjectItem(pTask, "taskName")->valuestring : "";
+									stTask.Id = cJSON_GetObjectItem(pTask, "id") ? cJSON_GetObjectItem(pTask, "id")->valueint : -1;
+									stTask.fd = cJSON_GetObjectItem(pTask, "fd") ? cJSON_GetObjectItem(pTask, "fd")->valueint : -1;
+									stTask.nTaskId = cJSON_GetObjectItem(pTask, "taskId") ? cJSON_GetObjectItem(pTask, "taskId")->valueint : -1;
+									// email其实可忽略;
+									cJSON *pEmals = cJSON_GetObjectItem(pTask, "emails");
+									if ( pEmals )
+									{
+										int nEmailSize = cJSON_GetArraySize(pEmals);
+										for ( int ii = 0; ii < nEmailSize; ii++ )
+										{
+											cJSON *pEmail = cJSON_GetArrayItem(pEmals, ii);
+											if ( pEmail )
+											{
+												std::string email = pEmail->valuestring;
+												stTask.vtEmails.push_back(email);
+											}
+										}
+									}
+									// Job内容;
+									cJSON *pJob = cJSON_GetObjectItem(pTask, "taskJson");
+									if ( pJob )
+									{
+										pJob = cJSON_GetObjectItem(pJob, "job");
+										if ( pJob )
+										{
+											stTask.Job.strCloudPort = cJSON_GetObjectItem(pJob, "cloudPort") ? cJSON_GetObjectItem(pJob, "cloudPort")->valuestring : "";
+											stTask.Job.strExecuteIP = cJSON_GetObjectItem(pJob, "executeIp") ? cJSON_GetObjectItem(pJob, "executeIp")->valuestring : "";
+											stTask.Job.strMonkeyPctSysKeys = cJSON_GetObjectItem(pJob, "monkeyPctSyskeys") ? cJSON_GetObjectItem(pJob, "monkeyPctSyskeys")->valuestring : "";
+											stTask.Job.strRedRatDeviceName = cJSON_GetObjectItem(pJob, "redRatDeviceName") ? cJSON_GetObjectItem(pJob, "redRatDeviceName")->valuestring : "";
+											stTask.Job.strExecuteId = cJSON_GetObjectItem(pJob, "executeId") ? cJSON_GetObjectItem(pJob, "executeId")->valuestring : "";
+											stTask.Job.strMonkeyPctAppSwitch = cJSON_GetObjectItem(pJob, "monkeyPctAppswitch") ? cJSON_GetObjectItem(pJob, "monkeyPctAppswitch")->valuestring : "";
+											stTask.Job.strDeviceId = cJSON_GetObjectItem(pJob, "deviceId") ? cJSON_GetObjectItem(pJob, "deviceId")->valuestring : "";
+											stTask.Job.strLoopNumber = cJSON_GetObjectItem(pJob, "loopNumber") ? cJSON_GetObjectItem(pJob, "loopNumber")->valuestring : "";
+											stTask.Job.strTaskType = cJSON_GetObjectItem(pJob, "taskType") ? cJSON_GetObjectItem(pJob, "taskType")->valuestring : "";
+											stTask.Job.strMonkeyFrequency = cJSON_GetObjectItem(pJob, "monkeyFrequency") ? cJSON_GetObjectItem(pJob, "monkeyFrequency")->valuestring : "";
+											stTask.Job.strCloudVersion = cJSON_GetObjectItem(pJob, "cloudVersion") ? cJSON_GetObjectItem(pJob, "cloudVersion")->valuestring : "";
+											stTask.Job.strTaskInstanceName = cJSON_GetObjectItem(pJob, "taskInstanceName") ? cJSON_GetObjectItem(pJob, "taskInstanceName")->valuestring : "";
+											stTask.Job.strRepeatRunTime = cJSON_GetObjectItem(pJob, "repeatRunTime") ? cJSON_GetObjectItem(pJob, "repeatRunTime")->valuestring : "";
+											stTask.Job.strMonkeyTime = cJSON_GetObjectItem(pJob, "monkeyTime") ? cJSON_GetObjectItem(pJob, "monkeyTime")->valuestring : "";
+											stTask.Job.strOutEquipmentId = cJSON_GetObjectItem(pJob, "outEquipmentId") ? cJSON_GetObjectItem(pJob, "outEquipmentId")->valuestring : "";
+											stTask.Job.strPoweroff = cJSON_GetObjectItem(pJob, "poweroff") ? cJSON_GetObjectItem(pJob, "poweroff")->valuestring : "";
+											stTask.Job.strFilePath = cJSON_GetObjectItem(pJob, "filePath") ? cJSON_GetObjectItem(pJob, "filePath")->valuestring : "";
+											stTask.Job.strScriptFailRepeart = cJSON_GetObjectItem(pJob, "scriptFailRepeat") ? cJSON_GetObjectItem(pJob, "scriptFailRepeat")->valuestring : "";
+											stTask.Job.strTaskInstanceId = cJSON_GetObjectItem(pJob, "taskInstanceId") ? cJSON_GetObjectItem(pJob, "taskInstanceId")->valuestring : "";
+											stTask.Job.strUserId = cJSON_GetObjectItem(pJob, "userId") ? cJSON_GetObjectItem(pJob, "userId")->valuestring : "";
+											stTask.Job.strDiffTaskInstanceFlag = cJSON_GetObjectItem(pJob, "diffTaskInstanceFlag") ? cJSON_GetObjectItem(pJob, "diffTaskInstanceFlag")->valuestring : "";
+											stTask.Job.strBusCode = cJSON_GetObjectItem(pJob, "busCode") ? cJSON_GetObjectItem(pJob, "busCode")->valuestring : "";
+											stTask.Job.strRound = cJSON_GetObjectItem(pJob, "round") ? cJSON_GetObjectItem(pJob, "round")->valuestring : "";
+											stTask.Job.strControlType = cJSON_GetObjectItem(pJob, "controlType") ? cJSON_GetObjectItem(pJob, "controlType")->valuestring : "";
+											stTask.Job.strMonkeyPctMajornav = cJSON_GetObjectItem(pJob, "monkeyPctMajornav") ? cJSON_GetObjectItem(pJob, "monkeyPctMajornav")->valuestring : "";
+											stTask.Job.strTaskName = cJSON_GetObjectItem(pJob, "taskName") ? cJSON_GetObjectItem(pJob, "taskName")->valuestring : "";
+											stTask.Job.strMonkeyType = cJSON_GetObjectItem(pJob, "monkeyType") ? cJSON_GetObjectItem(pJob, "monkeyType")->valuestring : "";
+											stTask.Job.strMonkeyDictate = cJSON_GetObjectItem(pJob, "monkeyDictate") ? cJSON_GetObjectItem(pJob, "monkeyDictate")->valuestring : "";
+											stTask.Job.strDetectedDeviceName = cJSON_GetObjectItem(pJob, "detectedDeviceName") ? cJSON_GetObjectItem(pJob, "detectedDeviceName")->valuestring : "";
+											stTask.Job.strExecuteName = cJSON_GetObjectItem(pJob, "executeName") ? cJSON_GetObjectItem(pJob, "executeName")->valuestring : "";
+											stTask.Job.strProjectName = cJSON_GetObjectItem(pJob, "projectName") ? cJSON_GetObjectItem(pJob, "projectName")->valuestring : "";
+											stTask.Job.strProjectId = cJSON_GetObjectItem(pJob, "projectId") ? cJSON_GetObjectItem(pJob, "projectId")->valuestring : "";
+											stTask.Job.strUniqueId = cJSON_GetObjectItem(pJob, "uniqueId") ? cJSON_GetObjectItem(pJob, "uniqueId")->valuestring : "";
+											stTask.Job.strTaskId = cJSON_GetObjectItem(pJob, "taskId") ? cJSON_GetObjectItem(pJob, "taskId")->valuestring : "";
+											stTask.Job.strSoftwareVersion = cJSON_GetObjectItem(pJob, "softwareVersion") ? cJSON_GetObjectItem(pJob, "softwareVersion")->valuestring : "";
+											stTask.Job.strMonkeyPctNav = cJSON_GetObjectItem(pJob, "monkeyPctNav") ? cJSON_GetObjectItem(pJob, "monkeyPctNav")->valuestring : "";
+											// emails,已重复,忽略;
+											// cJSON *pEmals = cJSON_GetObjectItem(pJob, "emails");
+											// case list;
+											cJSON *pCaseList = cJSON_GetObjectItem(pJob, "caseList");
+											if ( pCaseList )
+											{
+												int nCaseSize = cJSON_GetArraySize(pCaseList);
+												for ( int ii = 0; ii < nCaseSize; ii++ )
+												{
+													cJSON *pCase = cJSON_GetArrayItem(pCaseList, ii);
+													if ( pCase )
+													{
+														SATParameters::STCase stCase;
+														stCase.strIndex = cJSON_GetObjectItem(pCase, "index") ? cJSON_GetObjectItem(pCase, "index")->valuestring : "";
+														stCase.strCaseName = cJSON_GetObjectItem(pCase, "caseName") ? cJSON_GetObjectItem(pCase, "caseName")->valuestring : "";
+														stCase.strMainFilePath = cJSON_GetObjectItem(pCase, "mainFilePath") ? cJSON_GetObjectItem(pCase, "mainFilePath")->valuestring : "";
+														stCase.strId = cJSON_GetObjectItem(pCase, "id") ? cJSON_GetObjectItem(pCase, "id")->valuestring : "";
+														stCase.strCaseType = cJSON_GetObjectItem(pCase, "caseType") ? cJSON_GetObjectItem(pCase, "caseType")->valuestring : "";
+														// 压入Job;
+														stTask.Job.vtCases.push_back(stCase);
+													}
+												}
+											}
+										}
+									}
+
+									// 保存任务信息;
+									stHeartbeatResp.vtTask.push_back(stTask);
+								}
+							}
+
+							// 释放内存;
+							cJSON_Delete(pRoot);
+
+							// 返回结果;
+							return TRUE;
+						}
+					}
+				}
+
 				// 错误产生,可输出msg方便查询;
 				cJSON_Delete(pRoot);	
 			}

+ 151 - 8
SATHTTP/SATHTTP/SATHTTP.h

@@ -18,7 +18,22 @@ public:
 };
 
 namespace SATParameters{
-	// 登录SAT的请求参数;
+	//////////////////////////////////////////////////////////////////////////
+	// 通用的结构体;
+	typedef struct __ST_DEVICE__{
+		std::string strStatus;
+		std::string strDeviceSerial;
+	}STDevice, *pSTDevice;
+
+	typedef struct __ST_RESPONE__
+	{
+		std::string strCode;
+		std::string strMessage;
+		std::string strStr;
+	}STRespone, *pSTRespone;
+
+	//////////////////////////////////////////////////////////////////////////
+	// 1、登录SAT的请求参数;
 	typedef struct __ST_LOGIN_REQ__{
 		std::string strUserName;
 		std::string strStatus;
@@ -35,21 +50,149 @@ namespace SATParameters{
 	}STLoginReq, *pSTLoginReq;
 
 	// 登录SAT返回结果;
-	typedef struct __ST_LOGIN_RESP__{
-		std::string strCode;
-		std::string strMessage;
-		std::string strDesc;
+	typedef struct __ST_LOGIN_RESP__:__ST_RESPONE__{
 		int	nPortCount;
 		int	nCompanyId;
 		std::string strRunnerToken;
 	}STLoginResp, *pSTLoginResp;
+
+	//////////////////////////////////////////////////////////////////////////
+	// 2、更新设备信息的请求参数;
+	typedef struct __ST_UPDATE_DEVICE_REQ__
+	{
+		std::string strStatus;
+		std::string strUserName;
+		std::string strIP;
+		std::string strStorage;
+		std::string strRunnerName;
+		std::string strMAC;
+		std::string strReportType;
+		std::string strStartTime;
+		std::string strMemory;
+		std::string strEndTime;
+		std::string strCPU;
+		std::vector<STDevice> devicelist;
+	}STUpdateDeviceReq, *pSTUpdateDeviceReq;
+
+	typedef struct __ST_UPDATE_DEVICE_RESP__:__ST_RESPONE__
+	{
+		
+	}STUpdateDeviceResp, *pSTUpdateDeviceResp;
+
+	//////////////////////////////////////////////////////////////////////////
+	// 3、SAT心跳请求参数;
+	typedef struct __ST_HEARTBEAT_REQ__{
+		std::string strUserName;
+		std::string strRunnerMac;
+		std::vector<STDevice> devicelist;
+	}STHeartbeatReq, *pSTHeartbeatReq;
+
+	typedef struct __ST_CASE__
+	{
+		std::string strIndex;
+		std::string strCaseName;
+		std::string strMainFilePath;
+		std::string strId;
+		std::string strCaseType;
+	}STCase, *pSTCase;
+
+	typedef struct __ST_JOB__
+	{
+		std::string strCloudPort;
+		std::string strExecuteIP;
+		std::string strMonkeyPctSysKeys;
+		std::string strRedRatDeviceName;
+		std::string strExecuteId;
+		// std::vector<std::string> vtRunSceneParams;
+		std::string strMonkeyPctAppSwitch;
+		std::string strDeviceId;
+		std::string strLoopNumber;
+		std::vector<std::string> vtEmails;
+		std::string strTaskType;
+		std::string strMonkeyFrequency;
+		std::string strCloudVersion;
+		std::string strTaskInstanceName;
+		std::string strRepeatRunTime;
+		std::string strMonkeyTime;
+		std::string strOutEquipmentId;
+		std::string strPoweroff;
+		std::string strFilePath;
+		std::string strScriptFailRepeart;
+		std::string strTaskInstanceId;
+		std::string strUserId;
+		std::string strDiffTaskInstanceFlag;
+		std::string strBusCode;
+		std::string strRound;
+		std::string strControlType;
+		std::string strMonkeyPctMajornav;
+		std::string strTaskName;
+		std::string strMonkeyType;
+		std::string strMonkeyDictate;
+		std::string strDetectedDeviceName;
+		std::string strExecuteName;
+		std::string strProjectName;
+		std::string strProjectId;
+		std::string strUniqueId;
+		std::string strTaskId;
+		std::string strSoftwareVersion;
+		std::string strMonkeyPctNav;
+		std::vector<STCase> vtCases;
+	}STJob, *pSTJob;
+
+	typedef struct __ST_TASK__
+	{
+		std::string strInstanceName;
+		std::string strExecutionStatus;
+		std::string strInstanceType;
+		int nExecuteId;
+		std::string strRequestIP;
+		std::string strTaskUseType;
+		int nDeviceId;
+		std::vector<std::string> vtEmails;
+		std::string strDiffTaskInstanceFlag;
+		std::string strTaskType;
+		int nInstanceId;
+		std::string strProgress;
+		std::string strStartTime;
+		std::string strStopTime;
+		std::string strTaskName;
+		int Id;
+		int fd;
+		int nTaskId;
+		STJob Job;
+	}STTask, *pSTTask;
+
+	// SAT心跳返回结果;
+	typedef struct __ST_HEARTBEAT_RESP__:__ST_RESPONE__{
+		std::vector<STTask> vtTask;
+	}STHeartbeatResp, *pSTHeartbeatResp;
 }
 
 extern SATHTTP_API int nSATHTTP;
 
-SATHTTP_API int Login(std::string url, const SATParameters::STLoginReq &stLoginReq, SATParameters::STLoginResp &stLoginResp) throw();
+// 登录接口;
+SATHTTP_API int Login(
+					  std::string url, 
+					  const SATParameters::STLoginReq &stLoginReq, 
+					  SATParameters::STLoginResp &stLoginResp
+					  ) throw();
+
+// 登录完后,必须向服务器更新设备信息,否则SAT上执行任务时无法更新Runner出来;
+SATHTTP_API int UpdateDeviceMessage(
+									std::string url, 
+									const SATParameters::STUpdateDeviceReq &stUpdateDeviceReq, 
+									SATParameters::STUpdateDeviceResp &stUpdateDeviceResp
+									) throw();
+
+// 更新完设备信息后,向服务器查询任务;
+SATHTTP_API int Heartbeat(
+						  std::string url, 
+						  const SATParameters::STHeartbeatReq &stHeartbeatReq, 
+						  SATParameters::STHeartbeatResp &stHeartbeatResp
+						  ) throw();
+
 SATHTTP_API int GetIdNumber();
-SATHTTP_API int updateDeviceMessage();
+
 SATHTTP_API int StopTaskFromRunner();
 SATHTTP_API int GetPyCaseInfo();
 SATHTTP_API int GetCaseFileListUrl();
@@ -59,5 +202,5 @@ SATHTTP_API int SaveResultFile();
 SATHTTP_API int SetResult();
 SATHTTP_API int SaveResultImg();
 SATHTTP_API int SetResultList();
-SATHTTP_API int Heartbeat();
+