初试 sproto

来源:互联网 发布:python 打印日志 编辑:程序博客网 时间:2024/06/05 15:12

在U3D 热更的路上,尝试了 SLua 和 Proto-gen-lua,之前虽然打算过集成sproto ,但是一直没去弄,今天晚上下班早,就下过来尝试下。

转自http://www.liveslives.com http://www.thisisgame.com.cn

sproto的 git 地址:

https://github.com/cloudwu/sproto.git

sproto 的写法和 protobuf 差不多,但是按照云风的爱好被设计成 C 的模式。

.Person {    name 0 : string    id 1 : integer    email 2 : string    .PhoneNumber {        number 0 : string        type 1 : integer    }    phone 3 : *PhoneNumber}.AddressBook {    person 0 : *Person}

比如说 Person 这个 sproto,和下面的protobuf 是对应的

message Person {  required string name = 1;  required int32 id = 2;  optional string email = 3;  message PhoneNumber {    required string number = 1;    optional int32 type = 2 ;  }  repeated PhoneNumber phone = 4;}message AddressBook {  repeated Person person = 1;}

使用方法:

local sproto = require "sproto"local core = require "sproto.core"local print_r = require "print_r"local sprotoParse = sproto.parse [[.Person {name 0 : stringid 1 : integeremail 2 : string.PhoneNumber {number 0 : stringtype 1 : integer}phone 3 : *PhoneNumber}.AddressBook {person 0 : *Person(id)others 1 : *Person}]]local personDefault=sprotoParse:default "Person"print("default tabel for Person:")print_r(personDefault)local addressBook={person={[1]={name="captain1",id=1,email="1111@qq.com",phone={{number="137000001",type=1},{number="137000002",type=2},}},[2]={name="captain2",id=2,email="2222@qq.com",phone={{number="138000001",type=1},{number="138000002",type=2},}},},others={[1]={name="other",id=1,email="others@qq.com",phone={{number="139000001",type=1}}},}}local  encodeData = sprotoParse:encode("AddressBook",addressBook)local decodeData=sprotoParse:decode("AddressBook",encodeData)print("decodeData:")print_r(decodeData)
转自http://www.liveslives.com http://www.thisisgame.com.cn


因为云风的Repository中只有 sproto 源码,Wiki中没有介绍如何编译,所以新手还是建议 Clone 我的Repository。

https://github.com/ThisisGame/sproto


0 0
原创粉丝点击