1. 程式人生 > >Protocol Buffers Lua API總結 -- 內建型別的repeated使用append() 複合型別的repeated使用add()

Protocol Buffers Lua API總結 -- 內建型別的repeated使用append() 複合型別的repeated使用add()

本文介紹的關於protocol buffers的api是基於protoc-gen-lua(see in github)這個專案的。

我的使用經驗都是在開發Cocosd-x遊戲的時候,lua指令碼與伺服器通訊採用了protocol buffer,協議編譯工具正是protoc-gen-lua這個外掛。外掛的安裝過程該專案的ReadMe已經描述的很清楚,這裡主要總結一下實際使用中需要注意的問題,和編譯生成的pb.lua的常用API。

基本用法

1.定義一個.proto檔案,假設叫做Test.proto
message Test {
    required int32 id = 1;
    optional string name = 2;
    repeated int32 ary = 3;
    message Foo {
        required int32 fid = 1;
        required string fname = 2;
    }
    repeated Foo foos = 4;
}
2.使用protoc-gen-lua外掛編譯proto,生成Test_pb.lua
protoc --lua_out=./ Test.proto
在專案中require(“Test_pb”)
-- 如果require失敗,請參考lua中`package.path`的使用
local pb =require("Test_pb")


local test = pb.Test()
test.id = 1
test.name = "hello"
test.ary:append(1) -- 內建型別的repeated使用append()
test.ary:append(2)


local foo1 = pb.foos:add() -- 複合型別的repeated使用add()
foo1.fid = 1
foo1.fname = "foo1"
local foo2 = pb.foos:add()
foo2.fid = 2
foo2.fname = "foo2"
-- 序列化為字串
local pb_data =test:SerializeToString()


-- 從字串解析
local recover = pb.Test()
recover:ParseFromString(pb_data)
print(recover.id, recover.foos[1].name, recover.foos[2].na
-- 如果require失敗,請參考lua中`package.path`的使用
local pb =require("Test_pb")


local test = pb.Test()
test.id = 1
test.name = "hello"
test.ary:append(1) -- 內建型別的repeated使用append()
test.ary:append(2)


local foo1 = pb.foos:add() -- 複合型別的repeated使用add()
foo1.fid = 1
foo1.fname = "foo1"
local foo2 = pb.foos:add()
foo2.fid = 2
foo2.fname = "foo2"
-- 序列化為字串
local pb_data =test:SerializeToString()


-- 從字串解析
local recover = pb.Test()
recover:ParseFromString(pb_data)
print(recover.id, recover.foos[1].name, recover.foos[2].na