软件更新

各位亲 有时间可以去看看我的  “金骏家居淘宝店” http://jinjun1688.taobao.com/shop/view_shop.htm?tracelog=twddp 买时说明在我的博客看到有优惠哦 还有意外礼品赠送  真正的程序员淘宝店

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;

    optional string package_big=5;

}


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;

}



//

//  XXBasePackageDataUtil.h

//  ServerClietMessage

//

//  Created by chengen on 13-8-6.

//  Copyright (c) 2013 chengen. All rights reserved.

//


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

    

    //服务器那边的数据

    

   XXPBBase::TipsInfo* PackageTipsInfo();

   XXPBBase::UpdateInfo* PackageUpdateInfo();

   XXPBBase::TimeControl* PackageTimeControl();

    

   /*

     *数据的打包

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

     */

   XXPBBase::ResponseUpdate * PackageResponseUpdate(XXPBBase::TipsInfo* tipsinfo,

                                                    XXPBBase::UpdateInfo* updateinfo,

                                                    XXPBBase::TimeControl* time_control,

                                                    XXPBBase::ResponseResultType check_result);


};


#endif /* defined(__ServerClietMessage__XXBasePackageDataUtil__) */




//

//  XXBasePackageDataUtil.cpp

//  ServerClietMessage

//

//  Created by chengen on 13-8-6.

//  Copyright (c) 2013 chengen. All rights reserved.

//


#include "XXBasePackageDataUtil.h"


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

{

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

    requestUpdate->set_allocated_requestbase(requestBase);

    requestUpdate->set_allocated_userinfo(userInfo);

    requestUpdate->set_request_type(requestType);

    requestUpdate->set_reserve(reserve);

    

   return requestUpdate;

}


//

//  XXUpdateManage.h

//  ServerClietMessage

//

//  Created by chengen on 13-8-7.

//  Copyright (c) 2013 chengen. All rights reserved.

//


#ifndef __ServerClietMessage__XXUpdateManage__

#define __ServerClietMessage__XXUpdateManage__


#include <iostream>

#include "XXPBBase.pb.h"

#include "curl.h"


class   UpdateMansge {

    

public:

    

   /*

     *数据的上传

     */

   static int RequestUpdatePost(conststd::string &aUrl,const std::string &RequestData,std::string &ResponseData);

    

   /*

     *数据的反序列化

     */

    

    int ResponseMessageBuf(std::string &ResponseData);

};


#endif /* defined(__ServerClietMessage__XXUpdateManage__) */




//

//  XXUpdateManage.cpp

//  ServerClietMessage

//

//  Created by chengen on 13-8-7.

//  Copyright (c) 2013 chengen. All rights reserved.

//


#include "XXUpdateManage.h"

#include "XXPBBase.pb.h"


#import "curl.h"


staticsize_t OnWriteData(void* buffer,size_t size, size_t nmemb,void* lpVoid)

{

   std::string* str =dynamic_cast<std::string*>((std::string *)lpVoid);

   if( NULL == str ||NULL == buffer )

    {

       return -1;

    }

    

   char* pData = (char*)buffer;

    str->append(pData, size * nmemb);

   return nmemb;

}



intUpdateMansge::RequestUpdatePost(conststd::string &aUrl,const std::string &RequestData,std::string &ResponseData)

{

    CURL *curl = curl_easy_init();

   CURLcode res;

   if (!curl) {

        returnCURLE_FAILED_INIT;

    }

    

   std::string jsonResponse;

    

    curl_easy_setopt(curl,CURLOPT_URL, aUrl.c_str()); //这个 URL 是一个以 '\0' 结尾的字符串或参数指针  这个选项是唯一一个必须在 curl_easy_perform() 调用之前就要设置的选项。

    curl_easy_setopt(curl,CURLOPT_POSTFIELDS, RequestData.c_str());//传递一个作为HTTP “POST”操作的所有数据的字符串

    curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION, OnWriteData);  //回调函数  用此来保存接收到的数据点大小

    curl_easy_setopt(curl,CURLOPT_WRITEDATA, (void *)&RequestData);//函数会将接收到的数据自动的写到这个 FILE 指针所指向的文件流中

   curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);     //curl需要进行毫秒超时使用

    curl_easy_setopt(curl,CURLOPT_CONNECTTIMEOUT, 10);

    curl_easy_setopt(curl,CURLOPT_TIMEOUT, 30); //设置一个长整形数,作为最大延续多少秒

    

    res =curl_easy_perform(curl);

    curl_easy_cleanup(curl);

    

   return res;

    

}


int UpdateMansge::ResponseMessageBuf(std::string &ResponseData)

{

    XXPBBase::ResponseUpdate* responseUpdate =new XXPBBase::ResponseUpdate();

    responseUpdate->ParseFromString(ResponseData);

    

    XXPBBase::ResponseResultType i = responseUpdate->check_result();


   switch(i)

    {

        

    caseXXPBBase::RRT_Update:

           //有更新没提示

            responseUpdate->updateinfo(0).update_control();

            responseUpdate->updateinfo(0).package_address();

            responseUpdate->updateinfo(0).package_md5();

            responseUpdate->updateinfo(0).package_type();

            responseUpdate->updateinfo(0).package_md5();

            responseUpdate->updateinfo(0).package_big();

            

            //更新时间限制

            responseUpdate->time_control().start_time();

            responseUpdate->time_control().end_time();

            responseUpdate->time_control().last_time();

            

    caseXXPBBase::RRT_Tips:

           //有提示没更新

            responseUpdate->tipsinfo(1).tips_control();

            responseUpdate->tipsinfo(1).title();

            responseUpdate->tipsinfo(1).detail();

            responseUpdate->tipsinfo(1).image_addr();

            responseUpdate->tipsinfo(1).image_md5();

            responseUpdate->tipsinfo(1).image_type();

            

           //更新时间限制

            responseUpdate->time_control().start_time();

            responseUpdate->time_control().end_time();

            responseUpdate->time_control().last_time();

            

    caseXXPBBase::BRT_UpdateTips:

           //有更新也有提示

            responseUpdate->updateinfo(0).update_control();

            responseUpdate->updateinfo(0).package_address();

            responseUpdate->updateinfo(0).package_md5();

            responseUpdate->updateinfo(0).package_type();

            responseUpdate->updateinfo(0).package_md5();

            responseUpdate->updateinfo(0).package_big();

            

            responseUpdate->tipsinfo(1).tips_control();

            responseUpdate->tipsinfo(1).title();

            responseUpdate->tipsinfo(1).detail();

            responseUpdate->tipsinfo(1).image_addr();

            responseUpdate->tipsinfo(1).image_md5();

            responseUpdate->tipsinfo(1).image_type();

            

            //更新时间限制

            responseUpdate->time_control().start_time();

            responseUpdate->time_control().end_time();

            responseUpdate->time_control().last_time();

            

    default:

           printf("NO update");

        

    }

}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值