U3d热更新初试sproto
发表于2017-11-18
在U3D 热更的路上,尝试了 SLua 和 Proto-gen-lua,但是集成sproto来做热更新也是可行的,考虑到有些人还不会,下面就给大家介绍下sproto。
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 : string id 1 : integer email 2 : string .PhoneNumber { number 0 : string type 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