U3d热更新初试sproto

发表于2017-11-18
评论0 3.3k浏览

在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

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引