`
vanadiumlin
  • 浏览: 493280 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Lua使用protocolbuf

 
阅读更多
在https://code.google.com/p/protoc-gen-lua/ 下载网易兄弟写的lua的protobuf插件(网易都把pb给弄完了,as3的也是他们写的..)



编译python版的protobuf模块

在https://code.google.com/p/protobuf/downloads/list 下载官方的原生版本protobuf, 这里发文时使用的是2.4.1版本

编译出protoc执行文件, 放一份在protobuf-2.4.1\src\下

下载python2.7版本, 在protobuf-2.4.1\python下运行python setup.py install(如果找不到python请给python绝对路径)

这一步, python会下一个蛋( 真的是一个python的egg文件 ), 然后编译出python版本的protobuf模块放置在python下



制作protoc-gen-lua的批处理

放一份protoc在protoc-gen-lua的plugin目录

编写批处理:protoc-gen-lua.bat

@python "%~dp0protoc-gen-lua"



协议目录生成脚本

在你需要放置协议的目录编写如下批处理

buildproto.bat

rd /S /Q .\%1%
"..\..\src\protoc-gen-lua\plugin\protoc.exe" --plugin=protoc-gen-lua="..\..\src\protoc-gen-lua\plugin\protoc-gen-lua.bat" --lua_out=. %1%.proto

注意protoc.exe及protoc-gen-lua.bat的路径符合你的路径

再编写要编译的proto协议的批处理generate.bat

call buildproto.bat loginsvc

执行generate.bat后, 将会编译同目录下的loginsvc.proto,输出loginsvc_pb.lua



编译链接lua的pb库

将protoc-gen-lua\protobuf\目录拷贝到之前的协议目录

将其下的pb.c链入你的工程, 注意VS2010的VC下需要修改源码

1.将 #include <endian.h>修改为

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

避免在windows下缺失文件报错.

2. 调整struct_unpack函数前几行为

static int struct_unpack(lua_State *L)
{
    uint8_t format = luaL_checkinteger(L, 1);
    size_t len;
    const uint8_t* buffer = (uint8_t*)luaL_checklstring(L, 2, &len);
    size_t pos = luaL_checkinteger(L, 3);
    uint8_t out[8];  

    buffer += pos;

避免VS2010的VC编译器过于标准, 严格要求C风格函数变量前置声明

在lua_State声明后添加如下代码

extern "C" { int luaopen_pb (lua_State *L);}   // 注意防在命名空间外的全局声明

    luaopen_pb( L );   // 直接注入全局pb, 避免动态加载pb.dll造成的一系列跨平台问题



lua中使用pb

local loginsvc_pb = require “loginsvc_pb”

local REQ = loginsvc_pb.CheckVersionREQ()
local Data = REQ:SerializeToString( )

local ACK = loginsvc_pb.CheckVersionACK()
ACK:ParseFromString( Data )


.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }

我的工程目录

script\
        protobuf\
            buildproto.bat
            generate.bat
            loginsvc_pb.lua
            loginsvc.proto
        Main.lua
    src\
        protoc-gen-lua\
            example\
            plugin\
            protobuf\

posted on 2013-04-24 15:44 战魂小筑 阅读(7740) 评论(4)  编辑 收藏 引用 所属分类: 脚本技术 、C++/ 编程语言


评论

# re: Lua使用protocolbuf 2013-05-18 13:14 何茂龙
这样子生成的代码不支持嵌套其他proto的message
不知道是用法不对还是怎么样。
如果把所有proto都写到一个文件就太麻烦了  回复  更多评论
 

# re: Lua使用protocolbuf 2013-06-25 10:37 战魂小筑
@何茂龙
使用bytes 手动解析下, 可以对消息间互相嵌套进行降耦
  回复  更多评论
 

# re: Lua使用protocolbuf 2013-09-06 20:32 myth
@战魂小筑
如何用bytes 手动解析?  回复  更多评论
 

# re: Lua使用protocolbuf 2014-05-25 02:44 xgg
这样子生成的代码不支持嵌套其他proto的message
这个问题解决了吗?我也遇到这个问题了~~  回复  更多评论
分享到:
评论

相关推荐

    Lua中直接使用ProtocolBuf的方案

    Lua中直接使用ProtocolBuf的方案 require("Luapb"); --package lm; --message test --{ -- required int32 uid = 1; -- required int32 param = 2; -- optional string param1 = 3; -- repeated string param2 = 4;...

    所有版本LUA源码

    所有版本LUA源码 lua-5.3.5 lua-5.3.4 lua-5.3.3 lua-5.3.2 lua-5.3.1 lua-5.3.0 lua-5.2.4 lua-5.2.3 lua-5.2.2 lua-5.2.1 lua-5.2.0 lua-5.1.5 lua-5.1.4 lua-5.1.3 lua-5.1.2 lua-5.1.1 lua-5.1 lua-5.0.3 lua-...

    lua参考使用手册

    Lua是一种为支持有数据描述机制的一般过程式编程语言而设计的扩展编程语言。它同样可以对面向对象语言、函数式程序设计(Functional Programming,如Lisp)以及数据驱动编程(data-driven programming)提供很好的...

    luaDll+ luacom+luaiconv.rar

    内含luaDll,luacom以及luaiconv源码。luaDll和luaiconv直接打开sln在Visual studio中即可进行编译。luacom可使用nmake进行编译。也可直接使用已经生成了的dll.

    mac下使用的luac 编译lua 基于5.1版本

    mac下使用的luac编译lua luac文件支持64位 基于5.1版本 mac下使用的luac编译lua luac文件支持64位 基于5.1版本 mac下使用的luac编译lua luac文件支持64位 基于5.1版本

    lua 5.3.5 windows预编译exe/dll文件 lua5.3.5.win.zip

    lua5.3(32位/64位)windows 预编译(exe/DLL) adding: lua5.3.5-x86/lua.exe (in=14336) (out=7311) (deflated 49%) adding: lua5.3.5-x86/lua.o (in=24873) (out=9654) (deflated 61%) adding: lua5.3.5-x86/lua...

    LUAC反编译_LUC_lua反编译工具_luac_luac解密工具_Lua解密_

    lua 反编译工具 用于学习lua 反编汇 游戏lua 解密

    lua加密成luac工具

    ios版本将lua加密成luac

    LUAC脚本解密_luac解密在线_luac4加密_luac反编译_luac4解密工具_luac解密工具

    LUAC 脚本加密 , 用于LUAC 脚本反编译,有用得同学可以下载,

    易语言LUA支持库1.0#0版(第三方)

    在易语言里使用LUA,您可以不必关心LUA栈的概念,但仍然要遵守一些规则。LUA脚本支持库 (1.0#0版)是对LUA5.1.4的封装,包含了 “LUA”数据类型,LUA函数操作函数等。下面对易语言中使用LUA做一个简单的介绍。LUAC...

    lua使用技巧与应用

    lua的使用技巧与应用、面向对象、继承、c++通讯

    LUA-JS.zip_js lua.js_js调用 lua_lua JavaScript_lua调用js_lua转js

    JS和LUA交互,主要是JS和LUA交互实现模版,可以作为参考

    lua解密工具.apk

    通过使用该工具,开发者可以对Lua脚本进行反编译、编辑和重新编译,从而实现对Lua脚本的分析和修改。 该工具的主要功能包括: 1. 反编译:可以将Lua脚本文件(.lua)反编译为可阅读的源代码,帮助开发者理解脚本的...

    LuaForWindows_v5.1.5-52 安装包

    lua for windows其实是一整套Lua的开发环境.Lua for Windows 为 Windows 系统下提供了 Lua 脚本语言的开发和运行环境。Lua 是一个小巧的脚本语言。作者是巴西人。该语言的设计目的是为了嵌入应用程序中,从而为应用...

    Lua的使用入门之在C++程序中调用lua函数1

    基本的调用lua变量与函数,实现文本的获取与显示策略,若要改变显示方式,只要修改move()函数即可.

    使用lua编写的YGoPro卡片脚本.zip

    使用lua编写的YGoPro卡片脚本.zip使用lua编写的YGoPro卡片脚本.zip使用lua编写的YGoPro卡片脚本.zip使用lua编写的YGoPro卡片脚本.zip使用lua编写的YGoPro卡片脚本.zip使用lua编写的YGoPro卡片脚本.zip使用lua编写的...

    Lua使用大全(详细介绍Lua这个脚本语言)

    详细的介绍Lua开发技术,让人们更全面的理解Lua,作为游戏爱好者,我希望在大家做游戏脚本时能有所帮助。

    luaEditor编译调试器

    luaEditor编译调试器最大特点就是可以注入到宿主程序内对lua脚本进行调试,还可以设置断点...但是与其他语言不同的是,不仅用Lua编写的软件易于扩展,而且用其他语言比如C/C++编写的软件也很容易使用Lua扩展其功能。

    cocos2dx_lua使用c++

    cocos2dx_lua使用c++cocos2dx_lua使用c++

Global site tag (gtag.js) - Google Analytics