A pure C# implementation of sproto. and using sprotodump compiler for C# language on your .sproto
file to generate data access classes.
You write a Member.sproto
file :
.Person {
name 0 : string
id 1 : integer
email 2 : string
.PhoneNumber {
number 0 : string
type 1 : integer
}
phone 3 : *PhoneNumber
}
.AddressBook {
person 0 : *Person
}
Then you compile it with sprotodump, to produce code in C#.
$ lua sprotodump.lua
usage: lua sprotodump.lua [[<out_option> <out>] ...] <option> <sproto_file ...>
out_option:
-d dump to speciffic dircetory
-o dump to speciffic file
-p set package name(only cSharp code use)
option:
-cs dump to cSharp code file
-spb dump to binary spb file
$
$ lua sprotodump.lua -cs Member.sproto -o Member.cs
Then you use that code like this:
AddressBook address = new AddressBook (); address.person = new System.Collections.Generic.List<Person> (); Person person = new Person (); person.name = "Alice"; person.id = 10000; person.phone = new System.Collections.Generic.List<Person.PhoneNumber> (); Person.PhoneNumber num1 = new Person.PhoneNumber (); num1.number = "123456789"; num1.type = 1; person.phone.Add (num1);
serialize and deserialize :
byte[] data = address.encode (); // encode to bytes Sproto.SprotoStream stream = new SprotoStream (); // encode to stream address.encode(stream); Sproto.SprotoPack spack = new Sproto.SprotoPack (); byte[] pack_data = spack.pack (data); // pack byte[] unpack_data = spack.unpack(pack_data); // unpack AddressBook obj = new AddressBook(unpack_data); // decode
the Test.sproto
file:
Foobar 1 {
request {
what 0 : string
}
response {
ok 0 : boolean
}
}
dump to c# code:
public class Protocol : ProtocolBase { public static Protocol Instance = new Protocol(); static Protocol() { Protocol.SetProtocol<Foobar> (Foobar.Tag); Protocol.SetRequest<SprotoType.Foobar.request> (Foobar.Tag); Protocol.SetResponse<SprotoType.Foobar.response> (Foobar.Tag); } public class Foobar { public const int Tag = 1; } }
Read TestCaseRpc.cs for detail.
in my i5-3470 @3.20GHz :
library encode 1M times decode 1M times sproto-Csharp 2.84s 3.00s sproto-Csharp(unpack) 1.36s 2.12s protobuf-net 6.97s 8.09sRetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4