|  | @@ -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);	
 | 
	
		
			
				|  |  |  			}
 |