cocos2dx中protobuf的lua使用

原创 2015年11月18日 12:23:04

一、protobuf常规使用。

1 环境:win7-64机, 安装好python2.7,vs2013,cocos2dx-3.1.1,protobuf-2.6.1

2 准备:protobuf  下载地址:官方 https://github.com/google/protobuf     我的:http://download.csdn.net/detail/c471961491/9279185

protoc  下载地址: 官方  https://github.com/sean-lin/protoc-gen-lua  我的:http://download.csdn.net/detail/c471961491/9279199

3 感谢一下作者提供的帮助(参考文献)

http://blog.csdn.net/mergerly/article/details/16350871     在lua环境中使用protobuf

http://blog.csdn.net/weyson/article/details/17024325    cocos2dx使用lua和protobuf

http://ziplee.iteye.com/blog/2078851   lua下使用protobuf

http://bbs.csdn.net/topics/390930176  csdn论坛

http://www.cocoachina.com/bbs/read.php?tid=202657&keyword=proto    cocos论坛


步骤一:

将protobuf和protoc-gen-lua解压到桌面(本人是解压到桌面的)

进入protobuf/vsprojects 用vs进行编译。生成的protoc.exe放到protobuf/src下

步骤2:

打开cmd,进入目录protobuf/python下,运行命令 python setup.py build,之后等待下载完成,下载中出错就重新来吧(我是这样做的)。

下载完成之后运行命令 python setup.py install

步骤3:

制作转换协议

在protoc-gen-lua/plugin目录下编写批处理文件protoc-gen-lua.bat

、、、、、、、、、、、、、、、、、、、、、、、、、

@python <你的路径>\protoc-gen-lua\plugin\protoc-gen-lua

、、、、、、、、、、、、、、、、、、、、、、、、、、

在protoc-gen-lua目录编写批处理文件 buildproto.bat

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

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

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

luascript是自己新建的文件夹,用来存放  .proto  文件。在该文件夹下自己新建一个测试的proto文件

步骤4:

双击运行  buildproto.bat 文件,会在luascript文件加下就会生成一个proto对应的lua文件。假如生成失败了,在你的proto文件中所有的中文都删掉,包括注释,再试下。



接下来就是如何运用生成的lua文件了

步骤1:

自己生成一个cocos-lua工程(不解释)

步骤2:

把protoc-gen-lua/protobuf文件夹下的所有lua文件添加到工程

步骤3:

在<工程目录>\frameworks\cocos2d-x\external\lua下新建protobuf文件夹,在该文件夹下加入pb.c文件。pb.c文件在 protoc-gen-lua\protobuf 下

步骤4:

打开 lua_extensions.c文件

添加 :#include "protobuf/pb.c"

void luaopen_lua_extensions(lua_State *L)
{
    // load extensions
    luaL_Reg* lib = luax_exts;
    lua_getglobal(L, "package");
    lua_getfield(L, -1, "preload");
    for (; lib->func; lib++)
    {
        lua_pushcfunction(L, lib->func);
        lua_setfield(L, -2, lib->name);
    }
lua_pop(L, 2);

//此处是添加语句
luaopen_pb(L);
lua_pop(L, 2);
}


步骤5:

修改pb.c文件

1 增加平台判断

#ifndef _WIN32
#include <endian.h>
#endif

2 static int struct_unpack(lua_State *L) 中两语句位置互换

uint8_t out[8];
buffer += pos;

3 __declspec(dllexport) int luaopen_pb(lua_State *L) 增加语句修饰

步骤6:导出proto的lua文件加入到工程

例子:如下使用

require "Login_pb"  --这个是对用proto导出的对应lua文件

local charReq =Login_pb.LoginCharReq()  
    charReq.account="1"  
    charReq.accountid=10002
    charReq.token="076c7d373e55b1e9158a22e6df8f24e4"  
    charReq.platform=1  
    charReq.serverid=1
    local data = charReq:SerializeToString()
    print("data: ", data)

步骤7:

在main.lua的开头加上

package.path = package.path .. ';../protobuf/?.lua'
package.cpath = package.cpath .. ';../protobuf/?.so'

两句话



步骤8:

运行工程。无错结束


ps:遇见没有pb.lua文件错误,查看下是否和上面步骤一致(我就遇见了。通过上面方法就好了)。如果还是有错,就看看参考文档吧



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

在lua环境中使用protobuf

最近在cocos2dx的项目中,需要在LUA脚本层使用protobuf协议。官方已经推出了很多种语言的版本。但唯独LUA版本不全。于是开始研究protobuf在LUA下的实现,将完整的过程记录了下来,...
  • mergerly
  • mergerly
  • 2013年11月15日 23:52
  • 29029

cocos2d-x lua 中使用protobuf并对http进行处理

cocos2d-x lua 中使用protobuf并对http进行处理 本文介绍 cocos2d-x lua 中使用http 和 基于cocos2d-x 对lua http的封装(部分ok) 本博客链...

lua&protobuf使用

lua&protobuf使用 需要装好python,lua,protobuf并设置好环境 下载支持protobuf的lua插件,下来的文件有两个目录,一个protobuf支持,一个是plu...
  • chaimyu
  • chaimyu
  • 2015年02月05日 18:35
  • 1048

解决protobuf-lua导入其他proto的BUG

BUG示例protobuf-lua有个BUG:当import其他proto的消息类型时,会报错假如有两个proto:reward和mail。 其中mail的proto导入了reward的消息类型re...
  • wonbit
  • wonbit
  • 2015年11月16日 18:15
  • 4416

Lua protobuf相关API

以下在的protoBuf文件为例,他会生成一个名为peroson_pb的模块 #file:person.proto  message Person {    required int32 id = 1...

lua下使用protobuf

lua下使用protobuf 博客分类:  lua luaprotobufgooglewindows  下载地址:  protobuf:https://code.google...

Protobuf与lua服务端

lua编码protobuf下的小问题
  • it_wjw
  • it_wjw
  • 2017年03月11日 17:48
  • 523

在lua环境中使用protobuf

最近在cocos2dx的项目中,需要在LUA脚本层使用protobuf协议。官方已经推出了很多种语言的版本。但唯独LUA版本不全。于是开始研究protobuf在LUA下的实现,将完的过程记录了下来,希...

cocos2dx使用lua和protobuf

为了使游戏开发更加方便快捷,我继续了protobuf在lua下的尝试。 socket使用的是cocos2dx集成的websocket。 先说下环境:cocos2d-x-2.2.1 + protob...
  • weyson
  • weyson
  • 2013年11月29日 14:50
  • 14616

cocos2dx 3.x以上版本 lua中使用protobuf

参考 : http://my.oschina.net/ffs/blog/393574 1.  复制文件 protoc-gen-lua/protobuf/pb.c  到 frameworks\co...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:cocos2dx中protobuf的lua使用
举报原因:
原因补充:

(最多只允许输入30个字)