按照乙方提供的接口,在HGVersion库中实现上报设备信息和用户行为的功能

This commit is contained in:
luoliangyi 2022-07-25 16:49:48 +08:00
parent 7b71fbaaaa
commit 046643a767
8 changed files with 715 additions and 6 deletions

View File

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

View File

@ -26,6 +26,7 @@
<ItemGroup>
<ClInclude Include="..\..\..\modules\version\HGVersion.h" />
<ClInclude Include="..\..\..\modules\version\HGVersionImpl.hpp" />
<ClInclude Include="..\..\..\modules\version\HGVersionMsg.h" />
<ClInclude Include="..\..\..\third_party\json\cJSON.h" />
</ItemGroup>
<ItemGroup>

View File

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

View File

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

View File

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

View File

@ -3,6 +3,7 @@
#include "../base/HGInfo.h"
#include "../base/HGMd5.h"
#include "../base/HGUtility.h"
#include "HGVersionMsg.h"
#include <string>
#include <vector>
#include <list>
@ -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<std::string> 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<VersionInfoImpl> &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;
}
}

View File

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

View File

@ -0,0 +1,53 @@
#ifndef __HGVERSIONMSG_H__
#define __HGVERSIONMSG_H__
#include "../base/HGDef.h"
#include <string>
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__ */