Lua下如何支持ProtoBuffer

​ Google官方对pb的支持是通过protoc-gen-lua来实现的,这个与其他语言的实现有点差别,好像是通过python然后再转lua,效率上好像稍微低效。云风大牛用C语言实现了对lua的支持,使用起来也比较简单。pbc Github路径

一:云风pbc移植

​ 1,在github上下载pbc,https://github.com/cloudwu/pbc

​ 2,解压,将src下的文件放入,cocos2dx-版本 下的pbc放置路径,可新建pbc文件夹,放置在该文件夹里

​ 3,除了src的文件,下载后的pbc,解压后还能看到lua/lua53文件夹下有pbc-lua.c,根目录下有pbc.h,这两个文件也放入新建的pbc里

​ 4,需要将pbc作为模块注册进入,使得lua层可以调用,Lua下如何支持ProtoBuffer_第1张图片

​ 扩展模块注册方式如下,Lua下如何支持ProtoBuffer_第2张图片

​ 5,安卓,ios,win32在编译时需要导入具体的源文件,以window平台为例:在vs中导入pbc源文件
Lua下如何支持ProtoBuffer_第3张图片
​ 新建筛选器,然后导入前面放在cocos2d-x\external\lua\pbc下的所有文件,然后重新编译

​ 6,使用上,可以看下云风给的例子

**贴下移植pbc的博客:**https://blog.csdn.net/u010314160/article/details/78811858

二:官方protoc-gen-lua支持lua

protoc-gen-lua与pbc区别:

  1. protoc-gen-lua通过先安装python版本的pb,转换产生的是lua文件,使用是通过导入该文件。pbc是c语言编译,暴露出lua侧接口,使用时解析成table表。
  2. 使用protoc-gen-lua产生lua文件,需要python支持(python2.7,python3语法与python2有区别)

使用protoc-gen-lua产生lua文件步骤:

  1. 安装python2.7.15(python2.6以上的python2版本,注意不能是python3,因为下载下来的protoc-gen-lua中的语法是python2的,要求python2.6以上,是因为pb的最低支持版本)

    【protoc-gen-lua中的语法】
    Lua下如何支持ProtoBuffer_第4张图片

    【python版本pb要求】
    Lua下如何支持ProtoBuffer_第5张图片

  2. 下载pb,pb下载路径,需要下载python版本的,或是直接下载全版本的,我下载的是全版本的protobuf-3.6.1

  3. 下载protoc-gen-lua,protoc-gen-lua下载路径

  4. 在D盘新建文件夹pbtest,将下载后的pb,protoc-gen-lua解压到里面
    【目录结构】
    Lua下如何支持ProtoBuffer_第6张图片

  5. 编译下载的protobuf-3.6.1或是下载编译好的二进制文件,我是直接下载二进制文件protoc.exe,github地址 选择编译好的pb位置

    解压后,在bin路径下找到protoc.exe,将其复制到D:\pbtest\protobuf-3.6.1\src里

  6. cmd控制台,进入protobuf-3.6.1/python目录下,输入

    python setup.py install
    

    安装过程可能会更新python一些东西,最后出现下图表示安装成功。
    成功安装

  7. 在protoc-gen-lua-master下plugin下编写protoc-gen-lua.bat文件

    @python D:\pbtest\protoc-gen-lua-master\plugin\protoc-gen-lua
    
  8. 已经准备完成,可以对.proto进行转换成lua文件,在D:pbtest下新建pb_change_to_lua文件夹,将测试的test.proto放入pb_change_to_lua里。新建build.bat文件,输入

    D:\pbtest\protobuf-3.6.1\src\protoc.exe --lua_out=./ --plugin=protoc-gen-lua="D:\pbtest\protoc-gen-lua-master\plugin\protoc-gen-lua.bat" test.proto
    pause
    

    保存后,点击该bat,会产生test_pb.lua文件Lua下如何支持ProtoBuffer_第7张图片

  9. test_pb.lua在lua中使用,以window平台为例,在cocos2dx-版本 下的的external\lua下新建protobuf文件夹,将protoc-gen-lua-master\protobuf下的pb.c复制到protobuf,然后在该位置编写pb.h。

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

    在vs中导入,方法与上面导入pbc相同。然后将protoc-gen-lua-master\protobuf下的所有.lua文件放入项目中。将protoc-gen-lua-master\example下的放入。
    Lua下如何支持ProtoBuffer_第8张图片

    运行编译好的exe,选择某个位置,require(“app.pbtest.test”),则能看到打印的日志表明lua下支持pb试验成功。
    Lua下如何支持ProtoBuffer_第9张图片

注意:
Lua下如何支持ProtoBuffer_第10张图片

protobuf.lua中require和test.lua中的require除了require "pb"是正确的,其他都需要先导入一遍,原因是"pb"模块是在编译的时候已经导入了Lua下如何支持ProtoBuffer_第11张图片,然后其他模块自身并没有返回值,所以这时候如果第一次用require "wire_format"返回的是true或false,所以可以先写个init.lua,在里面先边所有需要先require的模块先导入。

你可能感兴趣的:(cocos)