cocos2d-lua 集成protobuf

1.下载相关文件

https://github.com/google/protobuf

https://github.com/sean-lin/protoc-gen-lua

https://github.com/google/protobuf/tree/v3.1.0 上把3.10 下来得到 protobuf-master

2.编译得到 protoc.exe 文件

这个文件可以在 https://github.com/google/protobuf/releases 下面有个protoc-3.1.0-win32.zip  
把protoc.exe拷贝到protobuf-master/src下

这个压缩包里里面已经有编译好的 protoc.exe 文件

3.将第一步下载好的 protoc-gen-lua-master.zip 解压出来

1)在protobuf文件夹里面找到pb.c 文件,拷到工程目录并创建一个pbc_lua.h 文件

pbc/pb.c

pbc/pbc_lua.h

#ifndef PBC_LUA_H  
#define PBC_LUA_H  
 
#if __cplusplus
extern "C" {
#endif
 
    #include <lua.h>
    extern int luaopen_pb(lua_State *L);
 
#if __cplusplus
}
#endif
 
 
#endif

       2)修改pb.c 文件
extern int luaopen_pb(lua_State *L)    

#if __cplusplus
extern "C" {
#endif
 
#include "lualib.h"
#include "lauxlib.h"
#include "pbc_lua.h"


     3)在class/AppDelegate.cpp 引入头文件,加入pb模块


<pre name="code" class="cpp">#include "pbc/pbc_lua.h"
lua_State* L = engine->getLuaStack()->getLuaState();
lua_module_register(L);
luaopen_pb(L);

4.将protoc-gen-lua-master\protobuf拷贝到src下

src/protobuf

5.在protobuf里面新建一个init.lua

require "pb" 
require "wire_format"
require "type_checkers"
require "encoder"
require "decoder"
require "listener"
require "containers"
require "descriptor"
require "text_format"
require "protobuf"
6.在main.lua 顶上加上   package.path = package.path .. ";./src/protobuf/?.lua"

  在require "config" 前面加上 require "protobuf.init"

7.修改encoder.lua(244): 


for element in ipairs(value) do
改为
for _, element in ipairs(value) do

8.制作转换协议的批处理

1)在protobuf-master/python

下运行python setup.py build,然后再执行python setup.py install。

2)在protoc-gen-lua-master/plugin目录下编写批处理:protoc-gen-lua.bat,就下面一行代码。

@python "%~dp0protoc-gen-lua"

3)拷贝protoc.exe到protoc-gen-lua-master目录。在protoc-gen-lua-master目录编写批处理:buildproto.bat 来转换协议。


rem 切换到.proto协议所在的目录  
cd ../lua  
rem 将当前文件夹中的所有协议文件转换为lua文件  
for %%i in (*.proto) do (    
echo %%i  
"..\protoc-gen-lua-master\protoc.exe" --plugin=protoc-gen-lua="..\protoc-gen-lua-master\plugin\protoc-gen-lua.bat" --lua_out=. %%i  
  
)  
echo end  
pause  
lua 是你存放proto的文件夹

9.嵌套多个proto不能用BUG解决

https://github.com/sean-lin/protoc-gen-lua/pull/7

还有protobuf/encoder.lua第244行改成 for _, element in ipairs(value) do

这样差不多可以使用protobuf 了!

亲测:

function MainScene:msgTest()
    local person= person_pb.Person()
    person.id = 10001
    person.name = "ycc"
    person.email = "yangchang2chen@yeah.net"
 
    local home = person.Extensions[person_pb.Phone.phones]:add()
    home.num = "2147483647"
    home.type = person_pb.Phone.HOME
 
    local data = person:SerializeToString()
 
    local msg = person_pb.Person()
    msg:ParseFromString(data)
    local msg1 = msg.Extensions[person_pb.Phone.phones]
    --dump(msg1,"msg1")
    print("parser:", msg.id, msg.name, msg.email,msg1[1].num) 
end

[LUA-print] parser: 10001,ycc,yangchang2chen@yeah.net,2147483647
 

 


原文:https://blog.csdn.net/litter_star/article/details/53022546 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值