#include "HGVersion.h" #include "HGVersionImpl.hpp" #include "../base/HGInc.h" #include #include #include 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 split(std::string strtem, char a) { std::vector 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 versionList1 = split(version1, '.'); std::vector 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; }