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