unity slua整合帥氣的lua-pb解析protobuf

瞭解到lua的一個protobuf庫,接口帥氣,比以前用過的一些lua protobuf庫要好不少,深得我心。並且能保持更新,比其餘庫幾年沒更新要放心。c++

 lua-pb動態解析protobuf協議,無需生成一大坨難看的預約義lua代碼,要的就是這個帥氣清爽。c#

lua-pb須要用到lpeg, luabitop和struct3個c庫,所以你本身項目基本須要從新編譯一遍。函數

我用的是slua,不熟,找slua的c代碼都費了好久,結果居然在slua工程下的build目錄下找到,話說在羣裏隨口問問居然無一人熱心解答,人心不古。ui

自恃高手什麼的最討厭了。lua

基本上,你須要slua.c這個文件,配合lua源碼,加入以上3個c庫,在slua.c的openlibs裏註冊c庫接口(開頭幾行有註釋),編譯之便可,記得編譯選項爲MT。spa

若是你不熟悉這個流程,請去翻閱programming in lua中關於lua接入c庫的章節。code

 

編譯好後,請把lua-pb工程下的pb文件夾和pb.lua拷貝到你的lua工做目錄便可。blog

接下來你按照例子接口

require "protos.person"

加載一個poroto文件會遇到問題,找不到該文件。事件

修改一下package.path,添加路徑便可。路徑通常是你的lua工程目錄。

大功告成,目前已成功在pc下運行。

 

實際使用中遇到一個較大的問題,該庫對負數的處理並無按照protobuf的標準,它自身解析和序列化負數是成功的,但解析其餘庫如c++庫生成的protobuf流,則遇到負數會有問題。你須要在unpack和pack2個文件裏對int32類型重寫下,參考c++代碼寫個函數,而後將varint32的pack和unpack回調替換下。

 

ps:

lua-pb用到的struct庫,更是一個帥氣的c庫,相見恨晚。用來解決傳參問題再合適不過了。用來改造下c#,lua事件機制,有這個庫代碼會更帥氣。

相關文章
相關標籤/搜索