code_app/modules/version/HGVersion.cpp

180 lines
4.6 KiB
C++

#include "HGVersion.h"
#include "HGVersionImpl.hpp"
#include "../base/HGInc.h"
#include <vector>
#include <assert.h>
#include <string>
HGResult HGAPI HGVersion_CreateMgr(HGVersionMgr* mgr)
{
if (NULL == mgr)
{
return HGBASE_ERR_INVALIDARG;
}
HGVersionMgrImpl* versionMgrImpl = new HGVersionMgrImpl;
*mgr = (HGVersionMgr)versionMgrImpl;
return HGBASE_ERR_OK;
}
HGResult HGAPI HGVersion_DestroyMgr(HGVersionMgr mgr)
{
if (NULL == mgr)
{
return HGBASE_ERR_INVALIDARG;
}
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl *)mgr;
delete versionMgrImpl;
return HGBASE_ERR_OK;
}
HGResult HGAPI HGVersion_GetServerConfig(HGVersionMgr mgr, HGServerConfig* config)
{
if (NULL == mgr)
{
return HGBASE_ERR_INVALIDARG;
}
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
return versionMgrImpl->GetServerConfig(config);
}
HGResult HGAPI HGVersion_PostInstallInfo(HGVersionMgr mgr, const HGChar* appName, const HGChar* desc)
{
if (NULL == mgr)
{
return HGBASE_ERR_INVALIDARG;
}
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
return versionMgrImpl->PostInstallInfo(appName, desc);
}
HGResult HGAPI HGVersion_PostUninstallInfo(HGVersionMgr mgr, const HGChar* appName, const HGChar* desc)
{
if (NULL == mgr)
{
return HGBASE_ERR_INVALIDARG;
}
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
return versionMgrImpl->PostUninstallInfo(appName, desc);
}
HGResult HGAPI HGVersion_PostCrashInfo(HGVersionMgr mgr, const HGChar* appName, const HGChar* desc, const HGChar* crashFilePath, const HGChar* exceptionAddr)
{
if (NULL == mgr)
{
return HGBASE_ERR_INVALIDARG;
}
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
return versionMgrImpl->PostCrashInfo(appName, desc, crashFilePath, exceptionAddr);
}
HGResult HGAPI HGVersion_PostUserFeedback(HGVersionMgr mgr, const HGChar* appName, const HGChar* desc, const HGChar* feedback, const HGChar* contact)
{
if (NULL == mgr)
{
return HGBASE_ERR_INVALIDARG;
}
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
return versionMgrImpl->PostUserFeedback(appName, desc, feedback, contact);
}
HGResult HGAPI HGVersion_GetVersionList(HGVersionMgr mgr, const HGChar* appName, HGVersionInfo** info, HGUInt* count)
{
if (NULL == mgr)
{
return HGBASE_ERR_INVALIDARG;
}
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
return versionMgrImpl->GetVersionList(appName, info, count);
}
HGResult HGAPI HGVersion_HttpDownload(HGVersionMgr mgr, const HGChar* url, const HGChar* saveFilePath, HGHttpDownloadFunc func, HGPointer param)
{
if (NULL == mgr)
{
return HGBASE_ERR_INVALIDARG;
}
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
return versionMgrImpl->HttpDownload(url, saveFilePath, func, param);
}
HGResult HGAPI HGVersion_ReleaseVersionList(HGVersionInfo* info, HGUInt count)
{
return HGVersionMgrImpl::ReleaseVersionList(info, count);
}
HGResult HGAPI HGVersion_GetCurrVersion(const HGChar* appName, HGChar* version, HGUInt maxLen)
{
return HGVersionMgrImpl::GetCurrVersion(appName, version, maxLen);
}
static std::vector<std::string> split(std::string strtem, char a)
{
std::vector<std::string> strvec;
std::string::size_type pos1, pos2;
pos2 = strtem.find(a);
pos1 = 0;
while (std::string::npos != pos2)
{
strvec.push_back(strtem.substr(pos1, pos2 - pos1));
pos1 = pos2 + 1;
pos2 = strtem.find(a, pos1);
}
strvec.push_back(strtem.substr(pos1));
return strvec;
}
static int CompareVersion(const std::string& version1, const std::string& version2)
{
std::vector<std::string> versionList1 = split(version1, '.');
std::vector<std::string> versionList2 = split(version2, '.');
int size1 = (int)versionList1.size();
int size2 = (int)versionList2.size();
int i = 0;
while (i < size1 && i < size2)
{
if (atoi(versionList1[i].c_str()) < atoi(versionList2[i].c_str()))
{
return -1;
}
else if (atoi(versionList1[i].c_str()) > atoi(versionList2[i].c_str()))
{
return 1;
}
++i;
}
if (i == size1 && i < size2)
return -1;
else if (i < size1 && i == size2)
return 1;
assert(i == size1 && i == size2);
return 0;
}
HGResult HGAPI HGVersion_CompareVersion(const HGChar* version1, const HGChar* version2, HGInt* result)
{
if (NULL == result)
{
return HGBASE_ERR_INVALIDARG;
}
int ret = ::CompareVersion(version1, version2);
*result = ret;
return HGBASE_ERR_OK;
}