各位亲 有时间可以去看看我的 “金骏家居淘宝店” 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");
}
}