客户端版本比较大小比较类
来源:互联网 发布:hive sql 进制转换 编辑:程序博客网 时间:2024/06/05 05:51
在客户端软件开发过程中,有时候会设计到客户端软件版本的升级问题,客户端有个守护进程或者在客户端启动的时候,服务器返回一个版本号,这时候,需要通过返回的版本号去判断是否需要升级,从而达到升级的目的。
现在,本人在开发过程中写的一个客户端软件版本比较的类,与大家分享,如果代码有什么问题,欢迎大家指正。
好了,直接上代码。
ClientVersionMgr.h
#pragma once#include <iostream>#include <string>// 客户端版本管理类class ClientVersionMgr{public:enum COMPARE_RESULT{NO_NEED_UPATE = 0,HAVE_MORE_NEW_VERSION =1,NEED_FORCE_UPDATE = 2};/***@brief ClientVersionMgr默认构造函数*@param[in] none*@author long.an@quanshi.com*@date 2013-08-03 17:46:12*/ClientVersionMgr(void);/***@brief ClientVersionMgr构造函数*@param[in] strVersion 版本号字符串*@author long.an@quanshi.com*@warning strVersion须为合法的版本格式:如a.b.c.d\n 如果不合法,将不做处理,将版本号作为1.0.0.0处理。*@date 2013-08-03 17:46:12*/ClientVersionMgr(std::string strVersion);public:/***@brief ClientVersionMgr析构函数*@author long.an@quanshi.com*@date 2013-08-03 17:50:22*/~ClientVersionMgr(void);public:/***@brief 检测是否需要更新版本*@param[in] MaxVersion 服务器支持的最高版本号*@param[in] MinVersion 服务器支持的最小版本号*@param[in] IgnoreBuild_Number 是否忽略编译版本号,默认忽略*@return NO_NEED_UPATE 无需更新*@return HAVE_MORE_NEW_VERSION 检测到有新版本*@return NEED_FORCE_UPDATE 必须更新,否则不可用*@author An Long*@date 2013-07-29 18:06:49*/int CheckUpgrade(const ClientVersionMgr& MaxVersion, const ClientVersionMgr& MinVersion, bool IgnoreBuild_Number = true);/***@brief 从string中获得版本号*@param[in] strVersion 版本号*@return ClientVersionMgr对象*@author long.an@quanshi.com*@date 2013-07-29 18:13:30*/bool ParseVersionByString(const std::string& strVersion, ClientVersionMgr& Version);/***@brief 设置版本号*@param[in] strVersion 版本号字符串*@return none*@author long.an@quanshi.com*@date 2013-08-03 17:50:55*/void SetClientVersion(std::string strVersion);/***@brief 获取版本号字符串*@param[in] none*@return 版本号字符串*@author long.an@quanshi.com*@date 2013-08-03 17:51:57*/const std::string GetClientVersion() const;/***@brief 小于操作*@param[in] Version 小于比较的右值,this为左值*@return true this小于Version的版本号*@author long.an@quanshi.com*@date 2013-08-03 17:52:50*/bool operator <(const ClientVersionMgr& Version);/***@brief 大于操作*@param[in] Version 大于比较的右值,this为左值*@return true this大于Version的版本号*@author long.an@quanshi.com*@date 2013-08-03 17:52:50*/bool operator >(const ClientVersionMgr& Version);/***@brief 等于操作*@param[in] Version 等于比较的右值,this为左值*@return true this等于Version的版本号*@author long.an@quanshi.com*@date 2013-08-03 17:52:50*/bool operator ==(const ClientVersionMgr& Version);public:unsigned int Major_Version_Number;// 主版本号unsigned int Minor_Version_Number;// 子版本号unsigned int Revision_Number;// 修正版本号unsigned int Build_Number;// 编译版本号};
#include "StdAfx.h"#include "ClientVersionMgr.h"ClientVersionMgr::ClientVersionMgr(void){Major_Version_Number = 1;Minor_Version_Number = 0;Revision_Number = 0;Build_Number = 0;}ClientVersionMgr::ClientVersionMgr(std::string strVersion){if(!ParseVersionByString(strVersion, *this)){Major_Version_Number = 1;Minor_Version_Number = 0;Revision_Number = 0;Build_Number = 0;}}ClientVersionMgr::~ClientVersionMgr(void){}/***@brief 检测更新*@param[in] MaxVersion 服务器支持的最高版本号*@param[in] MinVersion 服务器支持的最小版本号*@param[in] IgnoreBuild_Number 是否忽略编译版本号,默认忽略*@return *@req MeetMeMobile1.0-Outlook-05-001*@author long.an@quanshi.com*@date 2013-07-29 18:06:49*/int ClientVersionMgr::CheckUpgrade(const ClientVersionMgr& MaxVersion, const ClientVersionMgr& MinVersion, bool IgnoreBuild_Number){if (IgnoreBuild_Number == true){ClientVersionMgr _MaxVersion(MaxVersion);ClientVersionMgr _MinVersion(MinVersion);_MaxVersion.Build_Number = this->Build_Number;_MinVersion.Build_Number = this->Build_Number;if (*this == _MaxVersion){return NO_NEED_UPATE;}else if(*this < _MaxVersion && (*this > _MinVersion || *this == _MinVersion)){return HAVE_MORE_NEW_VERSION;}else if (*this < _MinVersion){return NEED_FORCE_UPDATE;}}else{if (*this == MaxVersion){return NO_NEED_UPATE;}else if(*this < MaxVersion && (*this > MinVersion || *this == MinVersion)){return HAVE_MORE_NEW_VERSION;}else if (*this < MinVersion){return NEED_FORCE_UPDATE;}else{return NEED_FORCE_UPDATE;}}}/***@brief 从string中获得版本号*@param[in] strVersion 版本号*@return ClientVersionMgr对象*@req MeetMeMobile1.0-Outlook-05-001*@author long.an@quanshi.com*@date 2013-07-29 18:13:30*/bool ClientVersionMgr::ParseVersionByString(const std::string& strVersion, ClientVersionMgr& Version){if (strVersion.empty()){return false;}size_t nPos1 = strVersion.find('.',0);size_t nPos2 = strVersion.find('.',nPos1+1);size_t nPos3 = strVersion.find('.',nPos2+1);if (nPos1 == -1 || nPos2 == -1){return false;}Version.Major_Version_Number = atoi(strVersion.substr(0,nPos1).c_str());Version.Minor_Version_Number = atoi(strVersion.substr(nPos1+1,nPos2-nPos1).c_str());Version.Revision_Number = atoi(strVersion.substr(nPos2+1,nPos3-nPos2).c_str());if (nPos3 != -1){Version.Build_Number = atoi(strVersion.substr(nPos3+1,strVersion.length()-nPos3).c_str());}else{Version.Build_Number = 0;}return true;}void ClientVersionMgr::SetClientVersion(std::string strVersion){ParseVersionByString(strVersion.c_str(), *this);}const std::string ClientVersionMgr::GetClientVersion() const{std::string strVersion;char szBuffer[100] = {0};sprintf(szBuffer, "%d.%d.%d.%d", Major_Version_Number, Minor_Version_Number, Revision_Number, Build_Number);return std::string(szBuffer);}bool ClientVersionMgr::operator <(const ClientVersionMgr& Version){// Major_Version_Number <if (this->Major_Version_Number < Version.Major_Version_Number){return true;}else if (this->Major_Version_Number > Version.Major_Version_Number) // Major_Version_Number >{return false;}else // Major_Version_Number ={// compare Minor_Version_Number// condition: the Major_Version_Number of this version has equal Major_Version_Number of version then Minor_Version_Number<if ( this->Minor_Version_Number < Version.Minor_Version_Number ){return true;}else if (this->Minor_Version_Number > Version.Minor_Version_Number)// Minor_Version_Number >{return false;}else{if ( this->Revision_Number < Version.Revision_Number ){return true;}else if (this->Revision_Number > Version.Revision_Number)// Minor_Version_Number >{return false;}else{if ( this->Build_Number < Version.Build_Number ){return true;}else{return false;}}}}}bool ClientVersionMgr::operator >(const ClientVersionMgr& Version){if (*this < Version || *this == Version){return false;}else{return true;}}bool ClientVersionMgr::operator ==(const ClientVersionMgr& Version){if ( Major_Version_Number == Version.Major_Version_Number && Minor_Version_Number == Version.Minor_Version_Number&&Revision_Number == Version.Revision_Number&&Build_Number == Version.Build_Number ){return true;}else{return false;}}
测试代码
int _tmain(int argc, _TCHAR* argv[]){std::string strVersion1 = "1.0.0.0";std::string strVersion2 = "2.4.3.4254";ClientVersionMgr MaxVersion(strVersion2);ClientVersionMgr MinVersion(strVersion1);ClientVersionMgr CurVersion("2.0.4.3");// 忽略编译版本号int nRet = CurVersion.CheckUpgrade(MaxVersion, MinVersion, true);if (ClientVersionMgr::HAVE_MORE_NEW_VERSION == nRet){printf("存在新版本");}else if (ClientVersionMgr::NEED_FORCE_UPDATE == nRet){printf("当前版本已不可用,需要升级后才可以使用");}else{printf("已经是最新的版本");}return 0;}
- 客户端版本比较大小比较类
- 比较版本大小java代码
- iOS客户端学习-字符串比较大小
- 比较大小-类模板
- 比较大小-类模板
- leetcode_165. Compare Version Numbers 比较版本大小
- iOS APP版本更新比较版本号大小
- android应用版本的大小比较
- 版本管理应用,及客户端工具比较
- 比较大小
- 比较大小
- 比较大小
- 比较大小
- 比较大小
- 比较大小
- 比较大小
- 比较大小
- 比较大小
- hdu1151 Air Raid (最小路径覆盖)
- 过滤器处理乱码 Android Web
- Node.js 应用于视频监控
- 修复从 app 包里面抓出的 png 图片的文件头(破解,ipa)I
- Android 基础知识 Message MessageQueue Handler Looper 关系 图示
- 客户端版本比较大小比较类
- linux 下压缩解压命令
- helloworld 带参的写法,让我们显示循环10次
- Qt对象new以后的删除
- poj 3264 Balanced Lineup 线段树+RMQ_ST算法 一题多解
- Java匿名内部类的说明——“他爸是李刚”
- 关于VMWARE虚拟机安装GHOST版XP后不能硬盘启动问题
- MFC 设置启动画面
- oracle检查点checkpoint信息