
1)集成 云风 云大侠的(博客)lua-pbc 标准c写的protobuf 具体看pbc的帮助很轻松集成
2) 生成pb文件(我自己写了个mac中批处理生成所有proto文件为pb文件)把pb 和proto文件都加入到项目资源中
[objc] view plaincopy在CODE上查看代码片派生到我的代码片
#!/bin/sh
#pb = "pb"
for i in proto
do
#echo $i
#echo ${i%}"pb"
#echo ${i%}
#pbn = $i | cut -d
pbname=${i%}"pb"
#echo $pbn
#echo $pbname
protoc --descriptor_set_out $pbname $i
done
echo "finish"
也可以用命令行手动生成
[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
protoc --descriptor_set_out aaapb aaaproto
3)本步骤可以忽略了,可以直接用io进行读取(Android是路径问题请看本文最下面解释)在lua中使用如下代码(我用的是cocos2d-x中绑定的CCFileUtils中的获取文件的方式,不过要手动用tolua++进行绑定到lua,可以参考我上个文章中的绑定方式,云大侠中的 用lua io形式获取在相关了解中不能跨平台所有就用这个了)
[javascript] view plaincopy在CODE上查看代码片派生到我的代码片
local protobuf = require "protobuf"
local buffer = CCFileUtils:sharedFileUtils():getFileData("entity/p_resultpb","r",0)
-- print(buffer)
protobufregister(buffer)
4)本步骤可以忽略了,可以直接用io进行读取(Android是路径问题请看本文最下面解释) 上一步完成后我们要对提到的CCFileUtilscpp中的类进行修改 如果不修改读文件pb文件会时好时坏 原因是 读文件的时候结束总是添加多余字节我也不清楚这个问题 进行修改cocos2d-x中CCFileUtilscpp的下面方法中的读取数据后处理并在tolua++ 中添加下面方法绑定到lua层
修改CCFileUtilscp getFileData(const char pszFileName, const char pszMode,unsignedlong pSize)方法(在最后添加\0,保证字节不多余)如下代码
[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
unsigned char CCFileUtils::getFileData(const char pszFileName, const char pszMode, unsigned long pSize)
{
unsigned char pBuffer = NULL;
CCAssert(pszFileName != NULL && pSize != NULL && pszMode != NULL, "Invalid parameters");
pSize = 0;
do
{
// read the file from hardware
std::string fullPath = fullPathForFilename(pszFileName);
FILE fp = fopen(fullPathc_str(), pszMode);
CC_BREAK_IF(!fp);
fseek(fp,0,SEEK_END);
pSize = ftell(fp);
fseek(fp,0,SEEK_SET);
pBuffer = new unsigned char[pSize];
pSize = fread(pBuffer,sizeof(unsigned char), pSize,fp);
fclose(fp);
} while (0);
if (pSize >0 && pBuffer[pSize] != '\0')
pBuffer[pSize] = '\0';
if (! pBuffer)
{
std::string msg = "Get data from file(";
msgappend(pszFileName)append(") failed!");
CCLOG("%s", msgc_str());
}
return pBuffer;
}
5)经过上一步骤lua层基本搞定可以创建本地的数据并encode成传输数据到服务器端了 如下代码
[javascript] view plaincopy在CODE上查看代码片派生到我的代码片
local major = {
majorId = "795f94a9-3466-41b4-bf16-043ba8081fab"
}
local buffer = protobufencode("comsjwebprotoMajor", major)
6)我们客户端数据传输到服务器端 服务器端会返回数据给我们 同样我们接收的数据肯定也是protobuf数据了 用 protobufdecode进行解数据
[javascript] view plaincopy在CODE上查看代码片派生到我的代码片
local t = protobufdecode("comsjwebprotoResult", request:getResponseString())--toluacast(eventdataCString))--toluacast(eventdataCString,"CCString"):getCString())
cclog(t)
print(tmajorgender)
print(tmajormajorId)
print(tuserusername)
7)上一步中的数据是服务器端过来的数据,不过在>
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)