`
vanadiumlin
  • 浏览: 504740 次
  • 性别: 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;...

    luaiconv使用说明见Blog

    下面将详细介绍Luaiconv的使用方法、核心功能以及相关的编程技巧。 1. 安装与引入 首先,你需要下载luaiconv的源代码包,然后将其解压到你的Lua项目目录下。通常,luaiconv是一个单独的`.lua`文件,你可以通过`...

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

    通过`luaL_newstate()`函数可以创建一个新的Lua环境,并通过`luaL_openlibs()`打开标准库,这样就可以在C++中使用Lua的基本功能了。 2. **加载和执行Lua脚本** 使用`luaL_dofile()`或`luaL_dostring()`函数加载并...

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

    在游戏开发、服务器应用和其他对性能有较高要求的领域,LUAC被广泛使用。 标题中的“LUAC脚本解密”涉及到的是LUAC字节码的逆向工程,即从已编译的LUAC脚本中恢复出原始的Lua源代码。这通常是出于调试、分析或者...

    Lua的最基本使用 C++与lua的互相调用

    使用`lua_pushnumber`、`lua_pushstring`等函数将C++数据推送到Lua栈,使用`lua_tonumber`、`lua_tostring`等函数从Lua栈获取数据。 6. 清理:调用`lua_settop(L, 0)`清空栈,防止内存泄漏。 二、Lua调用C++函数 ...

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

    总之,"LUAC反编译"涉及到的是将Lua字节码还原成近似的源代码过程,这需要使用到如"LUC lua反编译工具"这样的软件。同时,配合"luac解密工具"可以处理加密的字节码,以便于分析和理解。尽管反编译的结果可能与原始源...

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

    Lua因其小巧、高效和易于学习的特点,常被游戏开发者用于编写游戏逻辑、AI系统、UI控制等方面,如Cocos2d-x、Unity3D等游戏引擎都支持使用Lua作为脚本语言。 通过深入理解和掌握以上知识点,你将能够有效地利用Lua...

    lua curl(lcurl)for windows

    在Windows 7系统上,为了使lua.exe能够正确运行使用lcurl的脚本,需要将以下四个外部DLL文件与lua.exe放在同一目录下: 1. libcurl.dll:这是libcurl库的主要组件,负责处理所有网络通信。 2. lua51.dll(或对应...

    LUAC解密工具.zip_andlua解密工具_andlua解密软件_lua 4.2解密_luac转lua_lua解密工具

    "LUAC解密工具"就是针对Lua编译后的二进制文件(.luac)进行解密的工具,目的是为了让加密过的Lua代码能够恢复成可读的源代码格式(.lua)。 LUAC是Lua的编译器,它将Lua源代码转换为字节码,这个过程通常是为了...

    lua_stm32f4.rar_lua stm32_lua移植stm32_stm32 lua_stm32f407移植lua_st

    在嵌入式系统领域,为了提高代码的可读性、可维护性和灵活性,越来越多的开发者选择使用高级脚本语言,如Lua,来替代传统的C/C++编程。本文将详细探讨如何在STM32F407微控制器上移植并运行Lua,以及实现一些基本功能...

    C++控制台与Lua交互,打开浏览器网页

    5. **执行Lua脚本**:使用`luaL_loadfile()`或`luaL_dostring()`加载并执行Lua脚本。在你的案例中,可能有一个名为`main.lua`的脚本,里面包含了调用`openBrowser`函数的代码。 6. **在Lua中调用C++函数**:在Lua...

    进行C++与LUA交互编程的LUA库

    6. 传递和接收数据:使用`lua_pushXXX`和`lua_toXXX`在C++与LUA之间交换数据。 7. 错误处理:在调用`lua_pcall`时,检查返回值以捕获错误。 8. 关闭LUA状态机:完成交互后,记得使用`lua_close`关闭`lua_State`。 ...

    Java调用Lua脚本(LuaJava使用、安装及Linux安装编译)

    本文将详细介绍如何在Java环境中使用LuaJava库进行交互,并在Linux系统上进行安装和编译。 首先,让我们理解LuaJava。LuaJava是一个开源项目,它提供了一个Java接口,使得Java程序能够直接调用Lua脚本并执行,同时...

    protobuf-lua

    在Lua中使用protobuf-lua,可以方便地在各种应用程序之间交换数据,尤其是在需要高性能和低带宽消耗的场景下。 protobuf-lua的核心功能包括: 1. **编译器工具**:protobuf-lua提供了一个编译器,将.proto文件转换...

    所有版本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-...

    luaQrcode lua语言生成二维码

    **luaQrcode:使用Lua语言生成二维码** 在IT行业中,二维码已经成为数据交换和信息展示的常见方式,尤其在移动设备上。luaQrcode是这样一个工具,它允许开发人员使用Lua编程语言来生成二维码,从而扩展了Lua的应用...

    Lua中文编辑器luaEditor

    Lua是一种轻量级的脚本语言,常用于游戏开发、嵌入式系统和服务器配置等领域。LuaEditor是一款专为Lua编程设计的中文...对于那些需要在项目中使用Lua的开发者,尤其是中文使用者,luaEditor是一个值得考虑的工具选择。

    delphi使用LUA开发游戏

    1 使用ZenGl引擎,可以在 http://zengl.org/检查更新情况,此演示程序使用 0.3.11版zengl 2 LUA使用比较新的LUA5.2.1版 3 此演示只完成脚本调用LUA代码,图片加载功能在DELPHI中实现

    luaDll+ luacom+luaiconv.rar

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

    EmmyLua-AttachDebugger 可用

    在使用EmmyLua-AttachDebugger时,如果项目中同时有ToLua的绑定,可以结合使用,实现C#和lua代码的混合调试,这对于处理复杂的游戏逻辑尤其有用。 总的来说,EmmyLua-AttachDebugger是Unity lua开发者的得力助手,...

Global site tag (gtag.js) - Google Analytics