|
@@ -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
|
|
|
{
|