找回密码
 立即注册
查看: 340|回复: 0

xlua使用pbc

[复制链接]
发表于 2021-11-19 16:31 | 显示全部楼层 |阅读模式
之前学了xlua整合proto-gen-lua,由于proto-gen-lua使用的lua5.1,相对于现在的5.3来说改动较大。
有兴趣的可以参考下:https://gitee.com/U3DDevelopment/xlua-framework
今天讲述一下xlua整合pbc的过程:

1.首先是xlua整合pbc编译xlua.dll

pbc的下载地址:https://github.com/cloudwu/pbc
xlua就用官方最新:https://github.com/Tencent/xLua
    将pbc整个文件夹复制到xlua\build文件夹下 修改xlua\build\CMakeLists.txt
#begin pbc set (PBC_SRC          pbc/src/alloc.c         pbc/src/array.c         pbc/src/array.c         pbc/src/bootstrap.c         pbc/src/context.c         pbc/src/decode.c         pbc/src/map.c         pbc/src/pattern.c         pbc/src/proto.c         pbc/src/register.c         pbc/src/rmessage.c         pbc/src/stringpool.c         pbc/src/varint.c         pbc/src/wmessage.c )  if (USING_LUAJIT)         list(APPEND PBC_SRC pbc pbc/binding/lua/pbc-lua.c) else ()         list(APPEND PBC_SRC pbc pbc/binding/lua53/pbc-lua53.c) endif ()  set_property(         SOURCE ${PBC_SRC}         APPEND         PROPERTY COMPILE_DEFINITIONS         LUA_LIB ) list(APPEND THIRDPART_INC pbc pbc/src) set (THIRDPART_SRC ${THIRDPART_SRC} ${PBC_SRC}) #end pbc
    运行make_win64_lua53.bat执行编译,编译默认的是vs2017。 编译执行完成后,在xlua\plugin_lua53\Plugins\x86_64下生成xlua.dll。 关闭unity,去文件夹中将上述xlua.dll替换Unity中Assets/Plugins/x86_64下的xlua.dll。

2.编译pbc能识别的pb文件

proto转pb工具:http://repo1.maven.org/maven2/com/google/protobuf/protoc/
    正常编写xxx.proto文件 新建bat文件,将.proto转为.pb文件,代码如下
for /R %%f in (.\proto\*.proto) do (      protoc.exe --descriptor_set_out=.\pb\%%~nf.pb .\proto\%%~nxf         )
    将.pb文件拷贝的unity工程下面

3.使用PBC

新建关联CS,BuildInit.cs,添加如下代码
namespace XLua.LuaDLL {     using System.Runtime.InteropServices;      public partial class Lua     {         //pbc         [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]         public static extern int luaopen_protobuf_c(System.IntPtr L);          [MonoPInvokeCallback(typeof(LuaDLL.lua_CSFunction))]         public static int LoadPBC(System.IntPtr L)         {             return luaopen_protobuf_c(L);         }      } }
    lua的启动脚本添加一句代码
luaenv.AddBuildin("protobuf.c", XLua.LuaDLL.Lua.LoadPBC);
    将pbc工程pbc-master\binding\lua53\protobuf.lua拷贝到unity默认lua目录下。 我的测试工程就将protobuf.lua放在Resources目录下,后缀加上.txt,否则unity不认。 编写测试代码
--加载 pb = require "protobuf"  --method1 本地读取方法1 addr = io.open("Assets/user.pb","rb") buffer = addr:read "*a" print(">>>>>>>> "..buffer) addr:close() pb.register(buffer)  --method1 本地读取方法2 pb.register_file "Assets/user.pb"  --method3 从AssetBundle中读取 buf = CS.ABLoader.Load() pb.register(buf) --新建一个表 local userinfo = {acc = "aaa",         pwd="123"         } --pb赋值加密 code = pb.encode("User",userinfo) --pb解析 decode = pb.decode("User",code)  print("decode.acc : "..decode.acc) print("decode.pwd : "..decode.pwd) 测试工程地址

链接:https://pan.baidu.com/s/18tchWaDEHt4DmaoSEZNt7Q
提取码:rnn6
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-25 13:17 , Processed in 0.093129 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表