|  | @@ -2,12 +2,14 @@
 | 
	
		
			
				|  |  |  #include "SDK.h"
 | 
	
		
			
				|  |  |  #include "CritSection.h"
 | 
	
		
			
				|  |  |  #include "Global.h"
 | 
	
		
			
				|  |  | +#include "DataImpl.h"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  ThreadSection g_csTask;
 | 
	
		
			
				|  |  |  std::list<STMid> CSDK::m_vtMidTask;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  CSDK::CSDK(void)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | +	Global::Init();
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  CSDK::~CSDK(void)
 | 
	
	
		
			
				|  | @@ -78,6 +80,58 @@ BOOL CSDK::PopDownloadTask(STMid &mid)
 | 
	
		
			
				|  |  |  	return FALSE;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +void CSDK::ParserKey(std::string file, std::vector<STKeys> &vtKyes)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	// 读取文件;
 | 
	
		
			
				|  |  | +	FILE* pf = NULL;
 | 
	
		
			
				|  |  | +	_tfopen_s(&pf, file.c_str(), _T("rb"));
 | 
	
		
			
				|  |  | +	if (!pf)
 | 
	
		
			
				|  |  | +		return;
 | 
	
		
			
				|  |  | +	// 获取文件长度;
 | 
	
		
			
				|  |  | +	fseek(pf, 0, SEEK_END);
 | 
	
		
			
				|  |  | +	size_t file_size = ftell(pf);
 | 
	
		
			
				|  |  | +	fseek(pf, 0, SEEK_SET);
 | 
	
		
			
				|  |  | +	// 读取文件内容;
 | 
	
		
			
				|  |  | +	byte* pdata = (byte*)malloc(file_size);
 | 
	
		
			
				|  |  | +	fread(pdata, file_size, 1, pf);
 | 
	
		
			
				|  |  | +	fclose(pf);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	// Json数据;
 | 
	
		
			
				|  |  | +	cJSON* pJson = cJSON_Parse((const char*)pdata);
 | 
	
		
			
				|  |  | +	if (pJson == NULL)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		goto end;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	//////////////////////////////////////////////////////////////////////////
 | 
	
		
			
				|  |  | +	// 解析Json;
 | 
	
		
			
				|  |  | +	cJSON *pItem = NULL;
 | 
	
		
			
				|  |  | +	cJSON *pKeys = cJSON_GetObjectItem(pJson, "");
 | 
	
		
			
				|  |  | +	if ( pKeys )
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		int nCount = cJSON_GetArraySize(pKeys);
 | 
	
		
			
				|  |  | +		for ( int i = 0; i < nCount; i++ )
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			pItem = cJSON_GetArrayItem(pKeys, i);
 | 
	
		
			
				|  |  | +			if ( pItem )
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				STKeys key;
 | 
	
		
			
				|  |  | +				// 序列号;
 | 
	
		
			
				|  |  | +				key.sn = cJSON_GetObjectItem(pItem, _T("sn")) ? cJSON_GetObjectItem(pItem, _T("sn"))->valuestring : "";
 | 
	
		
			
				|  |  | +				key.keys = cJSON_GetObjectItem(pItem, _T("keys")) ? cJSON_GetObjectItem(pItem, _T("keys"))->valuestring : "";
 | 
	
		
			
				|  |  | +				vtKyes.push_back(key);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +end:
 | 
	
		
			
				|  |  | +	if (pdata)
 | 
	
		
			
				|  |  | +		free(pdata);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (pJson)
 | 
	
		
			
				|  |  | +		cJSON_Delete(pJson);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  DWORD CSDK::ThreadDownload(LPVOID lpParam)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  	CSDK *that = (CSDK*)lpParam;
 | 
	
	
		
			
				|  | @@ -85,15 +139,32 @@ DWORD CSDK::ThreadDownload(LPVOID lpParam)
 | 
	
		
			
				|  |  |  	TCHAR szKeyPacket[MAX_PATH] = {0};
 | 
	
		
			
				|  |  |  	do 
 | 
	
		
			
				|  |  |  	{
 | 
	
		
			
				|  |  | -		// 取出任务;
 | 
	
		
			
				|  |  | -		STMid mid;
 | 
	
		
			
				|  |  | -		if ( PopDownloadTask(mid) )
 | 
	
		
			
				|  |  | +		if ( m_vtMidTask.size() )
 | 
	
		
			
				|  |  |  		{
 | 
	
		
			
				|  |  | +			// 取出任务;
 | 
	
		
			
				|  |  | +			STMid mid = m_vtMidTask.front();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  			// 判断文件是否存在,并检验md5值;
 | 
	
		
			
				|  |  | -			_stprintf_s(szKeyPacket, _T("%s%s.json"), Global::g_szCurModuleDir, mid.order.c_str());
 | 
	
		
			
				|  |  | +			_stprintf_s(szKeyPacket, _T("%scache\\%s.json"), Global::g_szCurModuleDir, mid.order.c_str());
 | 
	
		
			
				|  |  |  			if ( _taccess(szKeyPacket, 0) != -1 )
 | 
	
		
			
				|  |  |  			{
 | 
	
		
			
				|  |  |  				// 校验文件md5值;
 | 
	
		
			
				|  |  | +				std::string fileMd5 = GetFileMD5(szKeyPacket);
 | 
	
		
			
				|  |  | +				if ( _tcsicmp(fileMd5.c_str(), mid.pmd5.c_str()) == 0 )
 | 
	
		
			
				|  |  | +				{
 | 
	
		
			
				|  |  | +					// 文件下载成功,批量插入数据库;
 | 
	
		
			
				|  |  | +					std::vector<STKeys> vtKeys;
 | 
	
		
			
				|  |  | +					ParserKey(szKeyPacket, vtKeys);
 | 
	
		
			
				|  |  | +					if ( vtKeys.size() )
 | 
	
		
			
				|  |  | +					{
 | 
	
		
			
				|  |  | +						CDataImpl db;
 | 
	
		
			
				|  |  | +						if ( db.Open() )
 | 
	
		
			
				|  |  | +						{
 | 
	
		
			
				|  |  | +							db.BatchInsertKeyInfo(vtKeys);
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					continue;
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  			else
 | 
	
		
			
				|  |  |  			{
 |