cocos2d-x lua 中使用protobuf并对http进行处理
本文介绍 cocos2d-x lua 中使用http 和 基于cocos2d-x 对lua http的封装(部分ok)
本博客链接
http://blog.csdn.net/vpingchangxin/article/details/24458051
protobuf Google的一个非常好用的数据传输的封装 说实话Google的东西确实比較好用 所以我们前后端数据交换就用他了 只是Google没有对lua进行支持 还好社区有开源的大侠们贡献 找了全部关于lua protobuf 我仅仅找到 云风的 pbc 改动相关cocos2d-x中的类能够正常使用。protoc-gen-lua 我在使用的时候 总是报截断数据 在改动后cocs2d-x中的类之后没有对protoc-gen-lua 进行測试是否是这个问题导致
1)集成 云风 云大侠的(博客)lua-pbc 标准c写的protobuf 详细看pbc的帮助非常轻松集成
2) 生成pb文件(我自己写了个mac中批处理生成全部.proto文件为.pb文件)把pb 和proto文件都增加到项目资源中
#!/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"
也能够用命令行手动生成
protoc --descriptor_set_out aaa.pb aaa.proto3)本步骤能够忽略了,能够直接用io进行读取(Android是路径问题请看本文最以下解释)
local protobuf = require "protobuf"
local buffer = CCFileUtils:sharedFileUtils():getFileData("entity/p_result.pb","r",0)
-- print(buffer)
protobuf.register(buffer)4)本步骤能够忽略了。能够直接用io进行读取(Android是路径问题请看本文最以下解释) 改动CCFileUtils.cp getFileData(const
char* pszFileName, const char* pszMode,unsignedlong * pSize)方法(在最后加入 。保证字节不多余)例如以下代码
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(fullPath.c_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] != '