sdc

来源:互联网 发布:洛奇英雄传优化设置 编辑:程序博客网 时间:2024/05/16 12:27


#ifndef __ServerClietMessage__XXBasePackageDataUtil__

#define __ServerClietMessage__XXBasePackageDataUtil__


#include <iostream>

#include "XXPBBase.pb.h"


class XXBasePackageDataUtil

{

public:

    XXBasePackageDataUtil* sharedUtil();

public:

    XXPBBase::RequestBase* PackageRequestBase();

    XXPBBase::UserInfo* PackageUserInfo();

    

    /*

     *

     *reserve:保留字段,无用时填""

     *

     */

    XXPBBase::RequestUpdate* PackageRequestUpdate(XXPBBase::RequestBase* requestBase,

                                                  XXPBBase::UserInfo* userInfo,

                                                  XXPBBase::RequestType requestType,

                                                  const std::string& reserve);

    

    

private:

};


#endif /* defined(__ServerClietMessage__XXBasePackageDataUtil__) */



//

//  XXBasePackageDataUtil.cpp

//  ServerClietMessage

//



#include "XXBasePackageDataUtil.h"



XXPBBase::RequestUpdate* XXBasePackageDataUtil::PackageRequestUpdate(XXPBBase::RequestBase *requestBase,XXPBBase::UserInfo *userInfo,XXPBBase::RequestType requestType,const std::string& reserve)

{

    XXPBBase::RequestUpdate* requestUpdate =newXXPBBase::RequestUpdate();

    requestUpdate->set_allocated_requestbase(requestBase);

    requestUpdate->set_allocated_userinfo(userInfo);

    requestUpdate->set_request_type(requestType);

    requestUpdate->set_reserve(reserve);

    

    return requestUpdate;

}




option optimize_for=LITE_RUNTIME;


package XXPBBase;


enum PlatformType 

{

    PT_None = 0;

    PT_iOS = 101;

    PT_Android = 102;

}


enum SubPlatform 

{

    SPT_None = 0;

    SPT_iPhone = 1001;

    SPT_iPad = 1002;

    SPT_iPod = 1003;

    SPT_Android_General = 1004;

    SPT_Android_Pad = 1005;

    SPT_Android_HD = 1006;

}


enum ProductID 

{

    PI_None = 0;

    PI_MT = 101;    //MT

    PI_LDT = 102;   //乱斗堂

}


message UserInfo 

{

    required string uuid = 1;  //通用唯一识别码,是一个软件建构的标准

    required ProductID product = 2 [ default = PI_None ];  //产品编号

    required string version = 3 [ default = "0.0" ]; //软件版本号

    optional string buildno = 4 [ default = "0" ];  //序列号

    optional int32 channelID = 5;   //渠道

    

    optional PlatformType platformtype = 6 [ default = PT_None ];   //平台类型

    optional SubPlatform subplatform = 7 [ default = SPT_None ];    //子平台  

    optional string sys_version = 8;    //系统版本号

    optional string imei = 9;   //国际移动装备辨识码

    optional string mac_address = 10;  //mac 地址    

    optional string imsi = 11;   //国际移动用户识别码

    optional bool isroot = 12;    //是否

}


message RequestBase

{

   required int32 request_id = 1;  //客户端请求ID

   required int32 server_id = 2;   //服务器ID  

   required string request_function = 3;  // 请求方式

}



enum RequestType

{

    RT_None = 0;

    RT_User = 1;    //用户请求更新

    RT_Auto = 2;    //自动请求更新

    RT_Tips = 3;

}


message RequestUpdate

{

    required RequestBase requestbase = 1;

    required UserInfo userinfo = 2;

    required RequestType request_type = 3;

    optional string reserve = 4;

}





enum UpdateControl

{

    UPCTL_None = 0;

    UPCTL_SlientUpdate = 101;   //静默更新

    UPCTL_UserOpt = 102;    //用户选择更新

    UPCTL_UserForce = 103;  //用户强制更新

}


enum FileType

{

    FT_None = 0;

    FT_IPA = 101;

    FT_DEB = 102;

    FT_APK = 103;

    FT_ZIP = 104;

    FT_PNG = 105;

    FT_JPG = 106;

}


message UpdateInfo

{

    required UpdateControl update_control = 1 [ default = UPCTL_None ];

    optional string package_address = 2;

    optional string package_md5 = 3;

    optional FileType package_type = 4;

}


enum TipsControl

{

    TIPSCTRL_None = 0;

    TIPSCTRL_Text = 1;

    TIPSCTRL_Image = 2;

}


message TipsInfo

{

    required TipsControl tips_control = 1 [ default = TIPSCTRL_None];

    optional string title = 2;

    optional string detail = 3;

    optional string image_addr = 4;

    optional string image_md5 = 5;

    optional FileType image_type = 6;

}



enum ResponseResultType

{

    RRT_None = 0;

    RRT_Update = 101;    //有更新没提示

    RRT_Tips = 102;    //有提示没更新

    BRT_UpdateTips = 103;   //更新并且提示tips, 如果是静默更新,则更新后弹tips, 如果是用户更新则更新前弹tips

}


message TimeControl

{

    required string start_time = 1; //"0"表示永久有效,"1"表示即时开始有效,其他表示有效的起始时间(unix s)

    optional string end_time = 2;   // (unix s)

    optional string last_time = 3;  //持续时间(s)

}


message ResponseUpdate 

{

    required ResponseResultType check_result = 1; 

    repeated UpdateInfo updateinfo = 2;

    repeated TipsInfo tipsinfo = 3;

    optional TimeControl time_control = 4;

}




程序设计文档

1.设计目的

2.程序结构图

3.针对结构图,对程序设计的各个细节进行说明,包括接口设计说明,和必要的实现逻辑说明

4.程序使用说明,比如有一些需要注意的地方

5.附录 ,比如协议的结构阐述等

这个更新模块,需要给外界调用,并且模块内部执行完逻辑之后,要返回结果给外部。

 

 

一、设计目的: 通过客户端(client)和服务器(server)之间的交互协议来实现软件的更新。

二、程序结构图

三、程序结构接口设计以及实现逻辑

   数据打包

        发送

   数据返回

        解析

 

     1.客户端通过post方法传递软件消息给服务器

ClientPost(const std::string& aUrl,conststd::string& aPostData,std::string &aResponseData)

通过返回check_result字段的数据来匹配相应的更新

     若:check_result = 0 ; //不作处理

          check_result = 101 ; //有更新但没提示

          check_result = 102 ; //有提示但没更新

          check_result = 103 ; //更新并且提示tips,如果是静默更新,则更新后弹tips, 如果是用户更新则更新前弹tips