diff --git a/build/windows/HGVersion/HGVersion.def b/build/windows/HGVersion/HGVersion.def
index b40b9671..a3a453c8 100644
--- a/build/windows/HGVersion/HGVersion.def
+++ b/build/windows/HGVersion/HGVersion.def
@@ -9,6 +9,18 @@ HGVersion_PostInstallInfo
HGVersion_PostUninstallInfo
HGVersion_PostCrashInfo
HGVersion_PostUserFeedback
+
+HGVersion_PostDeviceOpenInfo
+HGVersion_PostDeviceCloseInfo
+HGVersion_PostDeviceScanCountInfo
+HGVersion_PostDeviceClearRollerInfo
+HGVersion_PostDeviceHistroyCountInfo
+HGVersion_PostDeviceRollerCountInfo
+HGVersion_PostUserOpenInfo
+HGVersion_PostUserCloseInfo
+HGVersion_PostUserLoginInfo
+HGVersion_PostUserLogoutInfo
+
HGVersion_GetVersionList
HGVersion_HttpDownload
HGVersion_ReleaseVersionList
diff --git a/build/windows/HGVersion/HGVersion.vcxproj b/build/windows/HGVersion/HGVersion.vcxproj
index 51d16693..6464690e 100644
--- a/build/windows/HGVersion/HGVersion.vcxproj
+++ b/build/windows/HGVersion/HGVersion.vcxproj
@@ -26,6 +26,7 @@
+
diff --git a/modules/base/HGMsgPumpImpl.cpp b/modules/base/HGMsgPumpImpl.cpp
index 6764955a..e78cb6a2 100644
--- a/modules/base/HGMsgPumpImpl.cpp
+++ b/modules/base/HGMsgPumpImpl.cpp
@@ -84,7 +84,7 @@ HGResult HGMsgPumpImpl::PostMessage(const HGMsg* msg)
HGResult HGMsgPumpImpl::Exit()
{
HGMsg msg;
- msg.data = 0;
+ msg.id = 0;
msg.data = NULL;
HGResult ret = HGBASE_ERR_FAIL;
diff --git a/modules/version/HGVersion.cpp b/modules/version/HGVersion.cpp
index 75d8523c..bd89f9c8 100644
--- a/modules/version/HGVersion.cpp
+++ b/modules/version/HGVersion.cpp
@@ -84,6 +84,122 @@ HGResult HGAPI HGVersion_PostUserFeedback(HGVersionMgr mgr, const HGChar* appNam
return versionMgrImpl->PostUserFeedback(appName, desc, feedback, contact);
}
+HGResult HGAPI HGVersion_PostDeviceOpenInfo(HGVersionMgr mgr, const HGChar* devName, const HGChar* devSN,
+ const HGChar* devType, const HGChar* devFW)
+{
+ if (NULL == mgr)
+ {
+ return HGBASE_ERR_INVALIDARG;
+ }
+
+ HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
+ return versionMgrImpl->PostDeviceOpenInfo(devName, devSN, devType, devFW);
+}
+
+HGResult HGAPI HGVersion_PostDeviceCloseInfo(HGVersionMgr mgr, const HGChar* devName, const HGChar* devSN,
+ const HGChar* devType, const HGChar* devFW)
+{
+ if (NULL == mgr)
+ {
+ return HGBASE_ERR_INVALIDARG;
+ }
+
+ HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
+ return versionMgrImpl->PostDeviceCloseInfo(devName, devSN, devType, devFW);
+}
+
+HGResult HGAPI HGVersion_PostDeviceScanCountInfo(HGVersionMgr mgr, const HGChar* devName, const HGChar* devSN,
+ const HGChar* devType, const HGChar* devFW, HGUInt scanCount)
+{
+ if (NULL == mgr)
+ {
+ return HGBASE_ERR_INVALIDARG;
+ }
+
+ HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
+ return versionMgrImpl->PostDeviceScanCountInfo(devName, devSN, devType, devFW, scanCount);
+}
+
+HGResult HGAPI HGVersion_PostDeviceClearRollerInfo(HGVersionMgr mgr, const HGChar* devName, const HGChar* devSN,
+ const HGChar* devType, const HGChar* devFW)
+{
+ if (NULL == mgr)
+ {
+ return HGBASE_ERR_INVALIDARG;
+ }
+
+ HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
+ return versionMgrImpl->PostDeviceClearRollerInfo(devName, devSN, devType, devFW);
+}
+
+HGResult HGAPI HGVersion_PostDeviceHistroyCountInfo(HGVersionMgr mgr, const HGChar* devName, const HGChar* devSN,
+ const HGChar* devType, const HGChar* devFW, HGUInt histroyCount)
+{
+ if (NULL == mgr)
+ {
+ return HGBASE_ERR_INVALIDARG;
+ }
+
+ HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
+ return versionMgrImpl->PostDeviceHistroyCountInfo(devName, devSN, devType, devFW, histroyCount);
+}
+
+HGResult HGAPI HGVersion_PostDeviceRollerCountInfo(HGVersionMgr mgr, const HGChar* devName, const HGChar* devSN,
+ const HGChar* devType, const HGChar* devFW, HGUInt rollerCount)
+{
+ if (NULL == mgr)
+ {
+ return HGBASE_ERR_INVALIDARG;
+ }
+
+ HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
+ return versionMgrImpl->PostDeviceRollerCountInfo(devName, devSN, devType, devFW, rollerCount);
+}
+
+HGResult HGAPI HGVersion_PostUserOpenInfo(HGVersionMgr mgr, const HGChar* appName)
+{
+ if (NULL == mgr)
+ {
+ return HGBASE_ERR_INVALIDARG;
+ }
+
+ HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
+ return versionMgrImpl->PostUserOpenInfo(appName);
+}
+
+HGResult HGAPI HGVersion_PostUserCloseInfo(HGVersionMgr mgr, const HGChar* appName)
+{
+ if (NULL == mgr)
+ {
+ return HGBASE_ERR_INVALIDARG;
+ }
+
+ HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
+ return versionMgrImpl->PostUserCloseInfo(appName);
+}
+
+HGResult HGAPI HGVersion_PostUserLoginInfo(HGVersionMgr mgr, const HGChar* appName)
+{
+ if (NULL == mgr)
+ {
+ return HGBASE_ERR_INVALIDARG;
+ }
+
+ HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
+ return versionMgrImpl->PostUserLoginInfo(appName);
+}
+
+HGResult HGAPI HGVersion_PostUserLogoutInfo(HGVersionMgr mgr, const HGChar* appName)
+{
+ if (NULL == mgr)
+ {
+ return HGBASE_ERR_INVALIDARG;
+ }
+
+ HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
+ return versionMgrImpl->PostUserLogoutInfo(appName);
+}
+
HGResult HGAPI HGVersion_GetVersionList(HGVersionMgr mgr, const HGChar* appName, HGVersionInfo** info, HGUInt* count)
{
if (NULL == mgr)
diff --git a/modules/version/HGVersion.h b/modules/version/HGVersion.h
index b519995a..fca3347c 100644
--- a/modules/version/HGVersion.h
+++ b/modules/version/HGVersion.h
@@ -12,7 +12,7 @@ HG_DECLARE_HANDLE(HGVersionMgr);
typedef struct
{
HGBool postCrashInfo; /* 是否上报崩溃信息 */
- HGBool postUserBehavior; /* 是否上报用户行为 */
+ HGBool postUserBehaviorInfo; /* 是否上报用户行为 */
HGBool postDeviceInfo; /* 是否上报设备信息 */
}HGServerConfig;
@@ -44,6 +44,26 @@ HGEXPORT HGResult HGAPI HGVersion_PostCrashInfo(HGVersionMgr mgr, const HGChar*
HGEXPORT HGResult HGAPI HGVersion_PostUserFeedback(HGVersionMgr mgr, const HGChar* appName, const HGChar* desc, const HGChar* feedback, const HGChar* contact);
+// 设备信息
+HGEXPORT HGResult HGAPI HGVersion_PostDeviceOpenInfo(HGVersionMgr mgr, const HGChar* devName, const HGChar* devSN,
+ const HGChar* devType, const HGChar* devFW);
+HGEXPORT HGResult HGAPI HGVersion_PostDeviceCloseInfo(HGVersionMgr mgr, const HGChar* devName, const HGChar* devSN,
+ const HGChar* devType, const HGChar* devFW);
+HGEXPORT HGResult HGAPI HGVersion_PostDeviceScanCountInfo(HGVersionMgr mgr, const HGChar* devName, const HGChar* devSN,
+ const HGChar* devType, const HGChar* devFW, HGUInt scanCount);
+HGEXPORT HGResult HGAPI HGVersion_PostDeviceClearRollerInfo(HGVersionMgr mgr, const HGChar* devName, const HGChar* devSN,
+ const HGChar* devType, const HGChar* devFW);
+HGEXPORT HGResult HGAPI HGVersion_PostDeviceHistroyCountInfo(HGVersionMgr mgr, const HGChar* devName, const HGChar* devSN,
+ const HGChar* devType, const HGChar* devFW, HGUInt histroyCount);
+HGEXPORT HGResult HGAPI HGVersion_PostDeviceRollerCountInfo(HGVersionMgr mgr, const HGChar* devName, const HGChar* devSN,
+ const HGChar* devType, const HGChar* devFW, HGUInt rollerCount);
+
+// 用户行为
+HGEXPORT HGResult HGAPI HGVersion_PostUserOpenInfo(HGVersionMgr mgr, const HGChar* appName);
+HGEXPORT HGResult HGAPI HGVersion_PostUserCloseInfo(HGVersionMgr mgr, const HGChar* appName);
+HGEXPORT HGResult HGAPI HGVersion_PostUserLoginInfo(HGVersionMgr mgr, const HGChar* appName);
+HGEXPORT HGResult HGAPI HGVersion_PostUserLogoutInfo(HGVersionMgr mgr, const HGChar* appName);
+
HGEXPORT HGResult HGAPI HGVersion_GetVersionList(HGVersionMgr mgr, const HGChar* appName, HGVersionInfo **info, HGUInt *count);
HGEXPORT HGResult HGAPI HGVersion_HttpDownload(HGVersionMgr mgr, const HGChar *url, const HGChar *saveFilePath, HGHttpDownloadFunc func, HGPointer param);
diff --git a/modules/version/HGVersionImpl.cpp b/modules/version/HGVersionImpl.cpp
index 06afbbd8..9f71461f 100644
--- a/modules/version/HGVersionImpl.cpp
+++ b/modules/version/HGVersionImpl.cpp
@@ -3,6 +3,7 @@
#include "../base/HGInfo.h"
#include "../base/HGMd5.h"
#include "../base/HGUtility.h"
+#include "HGVersionMsg.h"
#include
#include
#include
@@ -42,7 +43,7 @@ static size_t write_data(void* ptr, size_t size, size_t nmemb, void* stream)
static HGResult GetServerConfig(HGServerConfig& config)
{
config.postCrashInfo = HGFALSE;
- config.postUserBehavior = HGFALSE;
+ config.postUserBehaviorInfo = HGFALSE;
config.postDeviceInfo = HGFALSE;
HGResult ret = HGBASE_ERR_FAIL;
@@ -92,7 +93,7 @@ static HGResult GetServerConfig(HGServerConfig& config)
while (NULL != p2)
{
if (0 == strcmp(p2->string, "report_switch"))
- config.postUserBehavior = (HGBool)p2->valueint;
+ config.postUserBehaviorInfo = (HGBool)p2->valueint;
else if (0 == strcmp(p2->string, "collapse_switch"))
config.postCrashInfo = (HGBool)p2->valueint;
else if (0 == strcmp(p2->string, "device_info_switch"))
@@ -532,7 +533,6 @@ static HGResult PostInfo(int type, const std::string& appName, const std::string
}
std::string version = GetCurrVersion(appName);
-
std::string osName = GetOSName();
std::string archName = GetArchName();
std::string oemName = GetOemName();
@@ -639,6 +639,187 @@ static HGResult PostUserFeedback(const std::string& appName, const std::string&
return PostInfo(4, appName, desc, "", "", feedback, contact);
}
+static HGResult PostDeviceInfo(const std::string& devName, const std::string& devSN, const std::string& devType,
+ const std::string& devFW, HGUInt start, HGUInt close, HGUInt scan, HGUInt clean, HGUInt count, HGUInt pages)
+{
+ HGResult ret = HGBASE_ERR_FAIL;
+ CURL* curl = curl_easy_init();
+ if (NULL != curl)
+ {
+ std::stringstream out;
+
+ std::string url = "http://cd.holdtecs.net:50080/api/bhs";
+ curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 2);
+ curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
+
+ std::string jsonStr;
+ cJSON* json = cJSON_CreateObject();
+ if (NULL != json)
+ {
+ cJSON_AddItemToObject(json, "name", cJSON_CreateString(devName.c_str()));
+ cJSON_AddItemToObject(json, "sn", cJSON_CreateString(devSN.c_str()));
+ cJSON_AddItemToObject(json, "type", cJSON_CreateString(devType.c_str()));
+ cJSON_AddItemToObject(json, "fw", cJSON_CreateString(devFW.c_str()));
+
+ cJSON_AddItemToObject(json, "start", cJSON_CreateNumber(start));
+ cJSON_AddItemToObject(json, "close", cJSON_CreateNumber(close));
+ cJSON_AddItemToObject(json, "scan", cJSON_CreateNumber(scan));
+ cJSON_AddItemToObject(json, "clean", cJSON_CreateNumber(clean));
+ cJSON_AddItemToObject(json, "count", cJSON_CreateNumber(count));
+ cJSON_AddItemToObject(json, "pages", cJSON_CreateNumber(pages));
+
+ jsonStr = cJSON_Print(json);
+ cJSON_Delete(json);
+ }
+
+ struct curl_slist* headers = NULL;
+ headers = curl_slist_append(headers, "Content-Type:application/json;charset=UTF-8");
+ curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
+ curl_easy_setopt(curl, CURLOPT_POST, 1);
+ curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jsonStr.c_str());
+
+ curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
+ curl_easy_setopt(curl, CURLOPT_WRITEDATA, &out);
+
+ /* Perform the request, res will get the return code */
+ CURLcode res = curl_easy_perform(curl);
+ /* Check for errors */
+ if (res != CURLE_OK)
+ fprintf(stderr, "curl_easy_perform() failed: %s", curl_easy_strerror(res));
+ else
+ {
+ std::string str_json = out.str(); // 返回值
+ HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "str_json=%s", str_json.c_str());
+
+ cJSON* json = cJSON_Parse(str_json.c_str());
+ if (NULL != json)
+ {
+ cJSON* p = json->child;
+ while (NULL != p)
+ {
+ if (0 == strcmp(p->string, "code") && p->type == cJSON_Number)
+ {
+ if (1 == p->valueint)
+ ret = HGBASE_ERR_OK;
+ }
+
+ p = p->next;
+ }
+
+ cJSON_Delete(json);
+ }
+ }
+
+ curl_slist_free_all(headers);
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+
+ return ret;
+}
+
+static HGResult PostUserInfo(const std::string& appName, const std::string& action)
+{
+ HGResult ret = HGBASE_ERR_FAIL;
+ CURL* curl = curl_easy_init();
+ if (NULL != curl)
+ {
+ std::stringstream out;
+
+ std::string url = "http://cd.holdtecs.net:50080/api/behaviors";
+ curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 2);
+ curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
+
+ std::vector macList;
+ GetMacAddrList(macList);
+ if (macList.empty())
+ macList.push_back("00-00-00-00-00-00");
+
+ std::sort(macList.begin(), macList.end(), Greater);
+ std::string strMacAddrTotal;
+ for (int i = 0; i < (int)macList.size(); ++i)
+ {
+ strMacAddrTotal += macList[i];
+ }
+
+ HGByte md5[16] = { 0 };
+ HGBase_MakeMd5((const HGByte*)strMacAddrTotal.c_str(), (HGUInt)strMacAddrTotal.size(), md5);
+ char md5Str[64] = { 0 };
+ char* pstr = md5Str;
+ for (int i = 0; i < 16; ++i)
+ {
+ sprintf(pstr, "%02x", md5[i]);
+ pstr += 2;
+ }
+
+ std::string version = GetCurrVersion(appName);
+ std::string osName = GetOSName();
+ std::string archName = GetArchName();
+ std::string oemName = GetOemName();
+
+ std::string jsonStr;
+ cJSON* json = cJSON_CreateObject();
+ if (NULL != json)
+ {
+ cJSON_AddItemToObject(json, "mac", cJSON_CreateString(macList[0].c_str()));
+ cJSON_AddItemToObject(json, "localid", cJSON_CreateString(md5Str));
+ cJSON_AddItemToObject(json, "v", cJSON_CreateString(version.c_str()));
+ cJSON_AddItemToObject(json, "sys", cJSON_CreateString(osName.c_str()));
+ cJSON_AddItemToObject(json, "cpu", cJSON_CreateString(archName.c_str()));
+ cJSON_AddItemToObject(json, "oem", cJSON_CreateString(oemName.c_str()));
+ cJSON_AddItemToObject(json, "app_name", cJSON_CreateString(appName.c_str()));
+ cJSON_AddItemToObject(json, "act", cJSON_CreateString(action.c_str()));
+
+ jsonStr = cJSON_Print(json);
+ cJSON_Delete(json);
+ }
+
+ struct curl_slist* headers = NULL;
+ headers = curl_slist_append(headers, "Content-Type:application/json;charset=UTF-8");
+ curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
+ curl_easy_setopt(curl, CURLOPT_POST, 1);
+ curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jsonStr.c_str());
+
+ curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
+ curl_easy_setopt(curl, CURLOPT_WRITEDATA, &out);
+
+ /* Perform the request, res will get the return code */
+ CURLcode res = curl_easy_perform(curl);
+ /* Check for errors */
+ if (res != CURLE_OK)
+ fprintf(stderr, "curl_easy_perform() failed: %s", curl_easy_strerror(res));
+ else
+ {
+ std::string str_json = out.str(); // 返回值
+ HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "str_json=%s", str_json.c_str());
+
+ cJSON* json = cJSON_Parse(str_json.c_str());
+ if (NULL != json)
+ {
+ cJSON* p = json->child;
+ while (NULL != p)
+ {
+ if (0 == strcmp(p->string, "code") && p->type == cJSON_Number)
+ {
+ if (1 == p->valueint)
+ ret = HGBASE_ERR_OK;
+ }
+
+ p = p->next;
+ }
+
+ cJSON_Delete(json);
+ }
+ }
+
+ curl_slist_free_all(headers);
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+
+ return ret;
+}
+
static HGResult GetVersionList(const std::string& appName, std::list &versionList)
{
versionList.clear();
@@ -799,16 +980,28 @@ static HGResult HttpDownload(const std::string& url, const std::string& saveFile
HGVersionMgrImpl::HGVersionMgrImpl()
{
m_serverCfg.postCrashInfo = HGFALSE;
- m_serverCfg.postUserBehavior = HGFALSE;
+ m_serverCfg.postUserBehaviorInfo = HGFALSE;
m_serverCfg.postDeviceInfo = HGFALSE;
+ m_msgPump = NULL;
m_thread = NULL;
curl_global_init(CURL_GLOBAL_ALL);
::GetServerConfig(m_serverCfg);
+ if (m_serverCfg.postDeviceInfo || m_serverCfg.postUserBehaviorInfo)
+ {
+ HGBase_CreateMsgPump(&m_msgPump);
+ HGBase_OpenThread(ThreadFunc, this, &m_thread);
+ }
}
HGVersionMgrImpl::~HGVersionMgrImpl()
{
+ HGBase_ExitMsgPump(m_msgPump);
+ HGBase_CloseThread(m_thread);
+ m_thread = NULL;
+ HGBase_DestroyMsgPump(m_msgPump);
+ m_msgPump = NULL;
+
curl_global_cleanup();
}
@@ -846,6 +1039,203 @@ HGResult HGVersionMgrImpl::PostUserFeedback(const HGChar* appName, const HGChar*
return ::PostUserFeedback(appName, desc, feedback, contact);
}
+HGResult HGVersionMgrImpl::PostDeviceOpenInfo(const HGChar* devName, const HGChar* devSN, const HGChar* devType,
+ const HGChar* devFW)
+{
+ if (!m_serverCfg.postDeviceInfo)
+ return HGBASE_ERR_FAIL;
+
+ PostDeviceInfoParam* param = new PostDeviceInfoParam;
+ param->devName = devName;
+ param->devSN = devSN;
+ param->devType = devType;
+ param->devFW = devFW;
+
+ HGMsg msg;
+ msg.id = MsgId_PostDeviceOpenInfo;
+ msg.data = param;
+ HGResult ret = HGBase_PostPumpMessage(m_msgPump, &msg);
+ if (HGBASE_ERR_OK != ret)
+ delete param;
+ return ret;
+}
+
+HGResult HGVersionMgrImpl::PostDeviceCloseInfo(const HGChar* devName, const HGChar* devSN, const HGChar* devType,
+ const HGChar* devFW)
+{
+ if (!m_serverCfg.postDeviceInfo)
+ return HGBASE_ERR_FAIL;
+
+ PostDeviceInfoParam* param = new PostDeviceInfoParam;
+ param->devName = devName;
+ param->devSN = devSN;
+ param->devType = devType;
+ param->devFW = devFW;
+
+ HGMsg msg;
+ msg.id = MsgId_PostDeviceCloseInfo;
+ msg.data = param;
+ HGResult ret = HGBase_PostPumpMessage(m_msgPump, &msg);
+ if (HGBASE_ERR_OK != ret)
+ delete param;
+ return ret;
+}
+
+HGResult HGVersionMgrImpl::PostDeviceScanCountInfo(const HGChar* devName, const HGChar* devSN, const HGChar* devType,
+ const HGChar* devFW, HGUInt scanCount)
+{
+ if (!m_serverCfg.postDeviceInfo)
+ return HGBASE_ERR_FAIL;
+
+ PostDeviceScanCountInfoParam* param = new PostDeviceScanCountInfoParam;
+ param->baseInfo.devName = devName;
+ param->baseInfo.devSN = devSN;
+ param->baseInfo.devType = devType;
+ param->baseInfo.devFW = devFW;
+ param->scanCount = scanCount;
+
+ HGMsg msg;
+ msg.id = MsgId_PostDeviceScanCountInfo;
+ msg.data = param;
+ HGResult ret = HGBase_PostPumpMessage(m_msgPump, &msg);
+ if (HGBASE_ERR_OK != ret)
+ delete param;
+ return ret;
+}
+
+HGResult HGVersionMgrImpl::PostDeviceClearRollerInfo(const HGChar* devName, const HGChar* devSN, const HGChar* devType,
+ const HGChar* devFW)
+{
+ if (!m_serverCfg.postDeviceInfo)
+ return HGBASE_ERR_FAIL;
+
+ PostDeviceInfoParam* param = new PostDeviceInfoParam;
+ param->devName = devName;
+ param->devSN = devSN;
+ param->devType = devType;
+ param->devFW = devFW;
+
+ HGMsg msg;
+ msg.id = MsgId_PostDeviceClearRollerInfo;
+ msg.data = param;
+ HGResult ret = HGBase_PostPumpMessage(m_msgPump, &msg);
+ if (HGBASE_ERR_OK != ret)
+ delete param;
+ return ret;
+}
+
+HGResult HGVersionMgrImpl::PostDeviceHistroyCountInfo(const HGChar* devName, const HGChar* devSN, const HGChar* devType,
+ const HGChar* devFW, HGUInt histroyCount)
+{
+ if (!m_serverCfg.postDeviceInfo)
+ return HGBASE_ERR_FAIL;
+
+ PostDeviceHistroyCountInfoParam* param = new PostDeviceHistroyCountInfoParam;
+ param->baseInfo.devName = devName;
+ param->baseInfo.devSN = devSN;
+ param->baseInfo.devType = devType;
+ param->baseInfo.devFW = devFW;
+ param->histroyCount = histroyCount;
+
+ HGMsg msg;
+ msg.id = MsgId_PostDeviceHistroyCountInfo;
+ msg.data = param;
+ HGResult ret = HGBase_PostPumpMessage(m_msgPump, &msg);
+ if (HGBASE_ERR_OK != ret)
+ delete param;
+ return ret;
+}
+
+HGResult HGVersionMgrImpl::PostDeviceRollerCountInfo(const HGChar* devName, const HGChar* devSN, const HGChar* devType,
+ const HGChar* devFW, HGUInt rollerCount)
+{
+ if (!m_serverCfg.postDeviceInfo)
+ return HGBASE_ERR_FAIL;
+
+ PostDeviceRollerCountInfoParam* param = new PostDeviceRollerCountInfoParam;
+ param->baseInfo.devName = devName;
+ param->baseInfo.devSN = devSN;
+ param->baseInfo.devType = devType;
+ param->baseInfo.devFW = devFW;
+ param->rollerCount = rollerCount;
+
+ HGMsg msg;
+ msg.id = MsgId_PostDeviceRollerCountInfo;
+ msg.data = param;
+ HGResult ret = HGBase_PostPumpMessage(m_msgPump, &msg);
+ if (HGBASE_ERR_OK != ret)
+ delete param;
+ return ret;
+}
+
+HGResult HGVersionMgrImpl::PostUserOpenInfo(const HGChar* appName)
+{
+ if (!m_serverCfg.postUserBehaviorInfo)
+ return HGBASE_ERR_FAIL;
+
+ PostUserInfoParam* param = new PostUserInfoParam;
+ param->appName = appName;
+
+ HGMsg msg;
+ msg.id = MsgId_PostUserOpenInfo;
+ msg.data = param;
+ HGResult ret = HGBase_PostPumpMessage(m_msgPump, &msg);
+ if (HGBASE_ERR_OK != ret)
+ delete param;
+ return ret;
+}
+
+HGResult HGVersionMgrImpl::PostUserCloseInfo(const HGChar* appName)
+{
+ if (!m_serverCfg.postUserBehaviorInfo)
+ return HGBASE_ERR_FAIL;
+
+ PostUserInfoParam* param = new PostUserInfoParam;
+ param->appName = appName;
+
+ HGMsg msg;
+ msg.id = MsgId_PostUserCloseInfo;
+ msg.data = param;
+ HGResult ret = HGBase_PostPumpMessage(m_msgPump, &msg);
+ if (HGBASE_ERR_OK != ret)
+ delete param;
+ return ret;
+}
+
+HGResult HGVersionMgrImpl::PostUserLoginInfo(const HGChar* appName)
+{
+ if (!m_serverCfg.postUserBehaviorInfo)
+ return HGBASE_ERR_FAIL;
+
+ PostUserInfoParam* param = new PostUserInfoParam;
+ param->appName = appName;
+
+ HGMsg msg;
+ msg.id = MsgId_PostUserLoginInfo;
+ msg.data = param;
+ HGResult ret = HGBase_PostPumpMessage(m_msgPump, &msg);
+ if (HGBASE_ERR_OK != ret)
+ delete param;
+ return ret;
+}
+
+HGResult HGVersionMgrImpl::PostUserLogoutInfo(const HGChar* appName)
+{
+ if (!m_serverCfg.postUserBehaviorInfo)
+ return HGBASE_ERR_FAIL;
+
+ PostUserInfoParam* param = new PostUserInfoParam;
+ param->appName = appName;
+
+ HGMsg msg;
+ msg.id = MsgId_PostUserLogoutInfo;
+ msg.data = param;
+ HGResult ret = HGBase_PostPumpMessage(m_msgPump, &msg);
+ if (HGBASE_ERR_OK != ret)
+ delete param;
+ return ret;
+}
+
HGResult HGVersionMgrImpl::GetVersionList(const HGChar* appName, HGVersionInfo** info, HGUInt* count)
{
if (NULL == info || NULL == count)
@@ -938,4 +1328,94 @@ HGResult HGVersionMgrImpl::GetCurrVersion(const HGChar* appName, HGChar* version
strcpy(version, ver.c_str());
return HGBASE_ERR_OK;
+}
+
+void HGVersionMgrImpl::ThreadFunc(HGThread thread, HGPointer param)
+{
+ HGVersionMgrImpl* p = (HGVersionMgrImpl*)param;
+ HGBase_RunMsgPump(p->m_msgPump, MsgPumpFunc, p);
+}
+
+void HGVersionMgrImpl::MsgPumpFunc(HGMsgPump msgPump, const HGMsg* msg, HGPointer param)
+{
+ (void)msgPump;
+ assert(NULL != msg);
+ HGVersionMgrImpl* p = (HGVersionMgrImpl*)param;
+
+ switch (msg->id)
+ {
+ case MsgId_PostDeviceOpenInfo:
+ {
+ PostDeviceInfoParam* param = (PostDeviceInfoParam*)msg->data;
+ ::PostDeviceInfo(param->devName, param->devSN, param->devType, param->devFW, 1, 0, 0, 0, 0, 0);
+ delete param;
+ }
+ break;
+ case MsgId_PostDeviceCloseInfo:
+ {
+ PostDeviceInfoParam* param = (PostDeviceInfoParam*)msg->data;
+ ::PostDeviceInfo(param->devName, param->devSN, param->devType, param->devFW, 0, 1, 0, 0, 0, 0);
+ delete param;
+ }
+ break;
+ case MsgId_PostDeviceScanCountInfo:
+ {
+ PostDeviceScanCountInfoParam* param = (PostDeviceScanCountInfoParam*)msg->data;
+ ::PostDeviceInfo(param->baseInfo.devName, param->baseInfo.devSN, param->baseInfo.devType,
+ param->baseInfo.devFW, 0, 0, param->scanCount, 0, 0, 0);
+ delete param;
+ }
+ break;
+ case MsgId_PostDeviceClearRollerInfo:
+ {
+ PostDeviceInfoParam* param = (PostDeviceInfoParam*)msg->data;
+ ::PostDeviceInfo(param->devName, param->devSN, param->devType, param->devFW, 0, 0, 0, 1, 0, 0);
+ delete param;
+ }
+ break;
+ case MsgId_PostDeviceHistroyCountInfo:
+ {
+ PostDeviceHistroyCountInfoParam* param = (PostDeviceHistroyCountInfoParam*)msg->data;
+ ::PostDeviceInfo(param->baseInfo.devName, param->baseInfo.devSN, param->baseInfo.devType,
+ param->baseInfo.devFW, 0, 0, 0, 0, 0, param->histroyCount);
+ delete param;
+ }
+ break;
+ case MsgId_PostDeviceRollerCountInfo:
+ {
+ PostDeviceRollerCountInfoParam* param = (PostDeviceRollerCountInfoParam*)msg->data;
+ ::PostDeviceInfo(param->baseInfo.devName, param->baseInfo.devSN, param->baseInfo.devType,
+ param->baseInfo.devFW, 0, 0, 0, 0, param->rollerCount, 0);
+ delete param;
+ }
+ break;
+ case MsgId_PostUserOpenInfo:
+ {
+ PostUserInfoParam* param = (PostUserInfoParam*)msg->data;
+ ::PostUserInfo(param->appName, "power_on");
+ delete param;
+ }
+ break;
+ case MsgId_PostUserCloseInfo:
+ {
+ PostUserInfoParam* param = (PostUserInfoParam*)msg->data;
+ ::PostUserInfo(param->appName, "power_off");
+ delete param;
+ }
+ break;
+ case MsgId_PostUserLoginInfo:
+ {
+ PostUserInfoParam* param = (PostUserInfoParam*)msg->data;
+ ::PostUserInfo(param->appName, "login");
+ delete param;
+ }
+ break;
+ case MsgId_PostUserLogoutInfo:
+ {
+ PostUserInfoParam* param = (PostUserInfoParam*)msg->data;
+ ::PostUserInfo(param->appName, "logout");
+ delete param;
+ }
+ break;
+ }
}
\ No newline at end of file
diff --git a/modules/version/HGVersionImpl.hpp b/modules/version/HGVersionImpl.hpp
index e29767f7..17da5f14 100644
--- a/modules/version/HGVersionImpl.hpp
+++ b/modules/version/HGVersionImpl.hpp
@@ -2,6 +2,7 @@
#define __HGVERSIONIMPL_HPP__
#include "HGVersion.h"
+#include "../base/HGMsgPump.h"
#include "../base/HGThread.h"
class HGVersionMgrImpl
@@ -15,13 +16,39 @@ public:
HGResult PostUninstallInfo(const HGChar* appName, const HGChar* desc);
HGResult PostCrashInfo(const HGChar* appName, const HGChar* desc, const HGChar* crashFilePath, const HGChar* exceptionAddr);
HGResult PostUserFeedback(const HGChar* appName, const HGChar* desc, const HGChar* feedback, const HGChar* contact);
+
+ // 设备信息
+ HGResult PostDeviceOpenInfo(const HGChar* devName, const HGChar* devSN, const HGChar* devType,
+ const HGChar* devFW);
+ HGResult PostDeviceCloseInfo(const HGChar* devName, const HGChar* devSN, const HGChar* devType,
+ const HGChar* devFW);
+ HGResult PostDeviceScanCountInfo(const HGChar* devName, const HGChar* devSN, const HGChar* devType,
+ const HGChar* devFW, HGUInt scanCount);
+ HGResult PostDeviceClearRollerInfo(const HGChar* devName, const HGChar* devSN, const HGChar* devType,
+ const HGChar* devFW);
+ HGResult PostDeviceHistroyCountInfo(const HGChar* devName, const HGChar* devSN, const HGChar* devType,
+ const HGChar* devFW, HGUInt histroyCount);
+ HGResult PostDeviceRollerCountInfo(const HGChar* devName, const HGChar* devSN, const HGChar* devType,
+ const HGChar* devFW, HGUInt rollerCount);
+
+ // 用户行为
+ HGResult PostUserOpenInfo(const HGChar* appName);
+ HGResult PostUserCloseInfo(const HGChar* appName);
+ HGResult PostUserLoginInfo(const HGChar* appName);
+ HGResult PostUserLogoutInfo(const HGChar* appName);
+
HGResult GetVersionList(const HGChar* appName, HGVersionInfo** info, HGUInt* count);
HGResult HttpDownload(const HGChar* url, const HGChar* saveFilePath, HGHttpDownloadFunc func, HGPointer param);
static HGResult ReleaseVersionList(HGVersionInfo *info, HGUInt count);
static HGResult GetCurrVersion(const HGChar* appName, HGChar* version, HGUInt maxLen);
+private:
+ static void ThreadFunc(HGThread thread, HGPointer param);
+ static void MsgPumpFunc(HGMsgPump msgPump, const HGMsg* msg, HGPointer param);
+
private:
HGServerConfig m_serverCfg;
+ HGMsgPump m_msgPump;
HGThread m_thread;
};
diff --git a/modules/version/HGVersionMsg.h b/modules/version/HGVersionMsg.h
new file mode 100644
index 00000000..ad16b227
--- /dev/null
+++ b/modules/version/HGVersionMsg.h
@@ -0,0 +1,53 @@
+#ifndef __HGVERSIONMSG_H__
+#define __HGVERSIONMSG_H__
+
+#include "../base/HGDef.h"
+#include
+
+enum
+{
+ MsgId_PostDeviceOpenInfo = 1,
+ MsgId_PostDeviceCloseInfo,
+ MsgId_PostDeviceScanCountInfo,
+ MsgId_PostDeviceClearRollerInfo,
+ MsgId_PostDeviceHistroyCountInfo,
+ MsgId_PostDeviceRollerCountInfo,
+
+ MsgId_PostUserOpenInfo,
+ MsgId_PostUserCloseInfo,
+ MsgId_PostUserLoginInfo,
+ MsgId_PostUserLogoutInfo
+};
+
+struct PostDeviceInfoParam
+{
+ std::string devName;
+ std::string devSN;
+ std::string devType;
+ std::string devFW;
+};
+
+struct PostDeviceScanCountInfoParam
+{
+ PostDeviceInfoParam baseInfo;
+ HGUInt scanCount;
+};
+
+struct PostDeviceHistroyCountInfoParam
+{
+ PostDeviceInfoParam baseInfo;
+ HGUInt histroyCount;
+};
+
+struct PostDeviceRollerCountInfoParam
+{
+ PostDeviceInfoParam baseInfo;
+ HGUInt rollerCount;
+};
+
+struct PostUserInfoParam
+{
+ std::string appName;
+};
+
+#endif /* __HGVERSIONMSG_H__ */
\ No newline at end of file