public void Run() { //Test constuctor values var m = new MyMessageV2(); TestDefault(m); //Test deserialization m.FieldA = 0; m.FieldB = 0; m.FieldC = 0; m.FieldD = 0; m.FieldE = 0; m.FieldF = 0; m.FieldG = 0; m.FieldI = 0; m.FieldJ = 0; m.FieldK = 0; m.FieldL = 0; m.FieldM = 0; m.FieldN = true; m.FieldO = null; MyMessageV2.Deserialize(new byte[0], m); TestDefault(m); }
public void Run() { MyMessageV2 msgIn1 = MyMessageV2.TestInstance(); msgIn1.NullableEnum = MyMessageV2.AliasedEnum.Nada; msgIn1.NullableInt = 123; var ms1 = new MemoryStream(); MyMessageV2.Serialize(ms1, msgIn1); var msgOut1 = MyMessageV2.Deserialize(ms1.ToArray()); Assert.AreEqual(msgIn1.NullableEnum, msgOut1.NullableEnum); Assert.AreEqual(msgIn1.NullableInt, msgOut1.NullableInt); MyMessageV2 msgIn2 = MyMessageV2.TestInstance(); var ms2 = new MemoryStream(); MyMessageV2.Serialize(ms2, msgIn2); var msgOut2 = MyMessageV2.Deserialize(ms2.ToArray()); Assert.IsNull(msgOut2.NullableEnum); Assert.IsNull(msgOut2.NullableInt); }
public void Run() { MyMessageV2 version2before = MyMessageV2.TestInstance(); //Write MemoryStream ms = new MemoryStream(); MyMessageV2.Serialize(ms, version2before); Console.WriteLine("Wire bytes: " + ms.Length); //Read MemoryStream msread = new MemoryStream(ms.ToArray()); MyMessageV2 version2after = MyMessageV2.Deserialize(msread); //Verify Assert.IsTrue(version2before.Equals(version2after), "MyMessageV2 WriteRead"); //Read by older version MemoryStream msread1 = new MemoryStream(ms.ToArray()); MyMessageV1 version1 = MyMessageV1.Deserialize(msread1); Console.WriteLine("Version 1"); Assert.AreEqual(version2before.FieldA, version1.FieldA); }
public void SkipKey() { var version2before = MyMessageV2.TestInstance(); //Write var buffer = MyMessageV2.SerializeToBytes(version2before); //Read by older version, lots of values will be skipped var noseek = new NonSeekableMemoryStream(buffer); var ps = new PositionStream(noseek); var version1 = MyMessageV1NoPreserve.Deserialize(ps); Assert.AreEqual(version2before.FieldA, version1.FieldA); }
public void SkipKeyFail() { MyMessageV2 version2before = MyMessageV2.TestInstance(); //Write var buffer = MyMessageV2.SerializeToBytes(version2before); //Read by older version, lots of values will be skipped var noseek = new NonSeekableMemoryStream(buffer); //This should trigger a NotSupportedException var version1 = MyMessageV1NoPreserve.Deserialize(noseek); Assert.AreEqual(version2before.FieldA, version1.FieldA); }
static void TestDefault(MyMessageV2 m) { Assert.AreEqual(-1, m.FieldA); Assert.AreEqual(4.5, m.FieldB); Assert.AreEqual(5.4f, m.FieldC); Assert.AreEqual(-2, m.FieldD); Assert.AreEqual(-3, m.FieldE); Assert.AreEqual(4, m.FieldF); Assert.AreEqual(5, m.FieldG); Assert.AreEqual(-6, m.FieldH); Assert.AreEqual(-7, m.FieldI); Assert.AreEqual(8, m.FieldJ); Assert.AreEqual(9, m.FieldK); Assert.AreEqual(-10, m.FieldL); Assert.AreEqual(-11, m.FieldM); Assert.AreEqual(false, m.FieldN); Assert.AreEqual("test", m.FieldO); }
/// <summary>Helper: Serialize into a MemoryStream and return its byte array</summary> public static byte[] SerializeToBytes(MyMessageV2 instance) { using (var ms = new MemoryStream()) { Serialize(ms, instance); return ms.ToArray(); } }
/// <summary>Helper: Serialize with a varint length prefix</summary> public static void SerializeLengthDelimited(Stream stream, MyMessageV2 instance) { var data = SerializeToBytes(instance); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt32(stream, (uint)data.Length); stream.Write(data, 0, data.Length); }
/// <summary>Serialize the instance into the stream</summary> public static void Serialize(Stream stream, MyMessageV2 instance) { BinaryWriter bw = new BinaryWriter(stream); // Key for field: 1, Varint stream.WriteByte(8); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream,(ulong)instance.FieldA); // Key for field: 2, Fixed64 stream.WriteByte(17); bw.Write(instance.FieldB); // Key for field: 3, Fixed32 stream.WriteByte(29); bw.Write(instance.FieldC); // Key for field: 4, Varint stream.WriteByte(32); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream,(ulong)instance.FieldD); // Key for field: 5, Varint stream.WriteByte(40); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream,(ulong)instance.FieldE); // Key for field: 6, Varint stream.WriteByte(48); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt32(stream, instance.FieldF); // Key for field: 7, Varint stream.WriteByte(56); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream, instance.FieldG); // Key for field: 8, Varint stream.WriteByte(64); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteZInt32(stream, instance.FieldH); // Key for field: 9, Varint stream.WriteByte(72); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteZInt64(stream, instance.FieldI); // Key for field: 10, Fixed32 stream.WriteByte(85); bw.Write(instance.FieldJ); // Key for field: 11, Fixed64 stream.WriteByte(89); bw.Write(instance.FieldK); // Key for field: 12, Fixed32 stream.WriteByte(101); bw.Write(instance.FieldL); // Key for field: 13, Fixed64 stream.WriteByte(105); bw.Write(instance.FieldM); // Key for field: 14, Varint stream.WriteByte(112); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteBool(stream, instance.FieldN); if (instance.FieldO == null) throw new ArgumentNullException("FieldO", "Required by proto specification."); // Key for field: 15, LengthDelimited stream.WriteByte(122); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteBytes(stream, Encoding.UTF8.GetBytes(instance.FieldO)); if (instance.FieldP == null) throw new ArgumentNullException("FieldP", "Required by proto specification."); // Key for field: 16, LengthDelimited stream.Write(new byte[]{130, 1}, 0, 2); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteBytes(stream, instance.FieldP); // Key for field: 17, Varint stream.Write(new byte[]{136, 1}, 0, 2); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream,(ulong)instance.FieldQ); if (instance.FieldR != MyEnum.ETest2) { // Key for field: 18, Varint stream.Write(new byte[]{144, 1}, 0, 2); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream,(ulong)instance.FieldR); } if (instance.Dummy != null) { // Key for field: 19, LengthDelimited stream.Write(new byte[]{154, 1}, 0, 2); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteBytes(stream, Encoding.UTF8.GetBytes(instance.Dummy)); } if (instance.FieldT != null) { // Key for field: 20, LengthDelimited stream.Write(new byte[]{162, 1}, 0, 2); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt32(stream, 4u * (uint)instance.FieldT.Count); foreach (var i20 in instance.FieldT) { bw.Write(i20); } } if (instance.FieldS != null) { foreach (var i21 in instance.FieldS) { // Key for field: 21, Varint stream.Write(new byte[]{168, 1}, 0, 2); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt32(stream, i21); } } if (instance.FieldU != null) { // Key for field: 22, LengthDelimited stream.Write(new byte[]{178, 1}, 0, 2); using (var ms22 = new MemoryStream()) { Theirs.TheirMessage.Serialize(ms22, instance.FieldU); // Length delimited byte array uint ms22Length = (uint)ms22.Length; global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt32(stream, ms22Length); stream.Write(ms22.GetBuffer(), 0, (int)ms22Length); } } if (instance.FieldV != null) { foreach (var i23 in instance.FieldV) { // Key for field: 23, LengthDelimited stream.Write(new byte[]{186, 1}, 0, 2); using (var ms23 = new MemoryStream()) { Theirs.TheirMessage.Serialize(ms23, i23); // Length delimited byte array uint ms23Length = (uint)ms23.Length; global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt32(stream, ms23Length); stream.Write(ms23.GetBuffer(), 0, (int)ms23Length); } } } }
/// <summary>Helper: create a new instance to deserializing into</summary> public static MyMessageV2 DeserializeLengthDelimited(Stream stream) { MyMessageV2 instance = new MyMessageV2(); DeserializeLengthDelimited(stream, instance); return instance; }
/// <summary>Helper: create a new instance to deserializing into</summary> public static MyMessageV2 DeserializeLength(Stream stream, int length) { MyMessageV2 instance = new MyMessageV2(); DeserializeLength(stream, length, instance); return instance; }
/// <summary>Helper: put the buffer into a MemoryStream and create a new instance to deserializing into</summary> public static MyMessageV2 Deserialize(byte[] buffer) { MyMessageV2 instance = new MyMessageV2(); using (var ms = new MemoryStream(buffer)) Deserialize(ms, instance); return instance; }
/// <summary>Helper: create a new instance to deserializing into</summary> public static MyMessageV2 Deserialize(Stream stream) { MyMessageV2 instance = new MyMessageV2(); Deserialize(stream, instance); return instance; }
/// <summary>Serialize the instance into the stream</summary> public static void Serialize(Stream stream, MyMessageV2 instance) { var bw = new BinaryWriter(stream); var msField = global::SilentOrbit.ProtocolBuffers.ProtocolParser.Stack.Pop(); // Key for field: 1, Varint stream.WriteByte(8); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream,(ulong)instance.FieldA); // Key for field: 2, Fixed64 stream.WriteByte(17); bw.Write(instance.FieldB); // Key for field: 3, Fixed32 stream.WriteByte(29); bw.Write(instance.FieldC); // Key for field: 4, Varint stream.WriteByte(32); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream,(ulong)instance.FieldD); // Key for field: 5, Varint stream.WriteByte(40); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream,(ulong)instance.FieldE); // Key for field: 6, Varint stream.WriteByte(48); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt32(stream, instance.FieldF); // Key for field: 7, Varint stream.WriteByte(56); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream, instance.FieldG); // Key for field: 8, Varint stream.WriteByte(64); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteZInt32(stream, instance.FieldH); // Key for field: 9, Varint stream.WriteByte(72); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteZInt64(stream, instance.FieldI); // Key for field: 10, Fixed32 stream.WriteByte(85); bw.Write(instance.FieldJ); // Key for field: 11, Fixed64 stream.WriteByte(89); bw.Write(instance.FieldK); // Key for field: 12, Fixed32 stream.WriteByte(101); bw.Write(instance.FieldL); // Key for field: 13, Fixed64 stream.WriteByte(105); bw.Write(instance.FieldM); // Key for field: 14, Varint stream.WriteByte(112); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteBool(stream, instance.FieldN); if (instance.FieldO == null) throw new global::SilentOrbit.ProtocolBuffers.ProtocolBufferException("FieldO is required by the proto specification."); // Key for field: 15, LengthDelimited stream.WriteByte(122); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteBytes(stream, Encoding.UTF8.GetBytes(instance.FieldO)); #pragma warning disable 612 if (instance.FieldP == null) throw new global::SilentOrbit.ProtocolBuffers.ProtocolBufferException("FieldP is required by the proto specification."); // Key for field: 16, LengthDelimited stream.WriteByte(130); stream.WriteByte(1); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteBytes(stream, instance.FieldP); #pragma warning restore 612 // Key for field: 17, Varint stream.WriteByte(136); stream.WriteByte(1); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream,(ulong)instance.FieldQ); if (instance.FieldR != MyEnum.ETest2) { // Key for field: 18, Varint stream.WriteByte(144); stream.WriteByte(1); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream,(ulong)instance.FieldR); } #pragma warning disable 612 if (instance.Dummy != null) { // Key for field: 19, LengthDelimited stream.WriteByte(154); stream.WriteByte(1); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteBytes(stream, Encoding.UTF8.GetBytes(instance.Dummy)); } #pragma warning restore 612 if (instance.FieldT != null) { // Key for field: 20, LengthDelimited stream.WriteByte(162); stream.WriteByte(1); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt32(stream, 4u * (uint)instance.FieldT.Count); foreach (var i20 in instance.FieldT) { bw.Write(i20); } } if (instance.FieldS != null) { foreach (var i21 in instance.FieldS) { // Key for field: 21, Varint stream.WriteByte(168); stream.WriteByte(1); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt32(stream, i21); } } if (instance.FieldU != null) { // Key for field: 22, LengthDelimited stream.WriteByte(178); stream.WriteByte(1); msField.SetLength(0); Theirs.TheirMessage.Serialize(msField, instance.FieldU); // Length delimited byte array uint length22 = (uint)msField.Length; global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt32(stream, length22); msField.WriteTo(stream); } if (instance.FieldV != null) { foreach (var i23 in instance.FieldV) { // Key for field: 23, LengthDelimited stream.WriteByte(186); stream.WriteByte(1); msField.SetLength(0); Theirs.TheirMessage.Serialize(msField, i23); // Length delimited byte array uint length23 = (uint)msField.Length; global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt32(stream, length23); msField.WriteTo(stream); } } // Key for field: 24, Varint stream.WriteByte(192); stream.WriteByte(1); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream,(ulong)instance.NullableInt); // Key for field: 25, Varint stream.WriteByte(200); stream.WriteByte(1); global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt64(stream,(ulong)instance.NullableEnum); global::SilentOrbit.ProtocolBuffers.ProtocolParser.Stack.Push(msField); }
/// <summary> /// Test wire format of the person example against protobuf-net - another c# protocol buffers library /// </summary> public static void Run() { LocalFeatures local = new LocalFeatures("139pt2m7"); local.Uptime = TimeSpan.FromHours(37.8); local.DueDate = DateTime.Now.AddMinutes(1); local.Internal = "assembly"; local.PR = "Hi"; local.Amount = Math.E; local.Deny("they exist"); local.MyInterface = new MyImplementeInterface(); local.MyEnum = LocalFeatureTest.TopEnum.Last; MemoryStream ms1 = new MemoryStream(); LocalFeatures.Serialize(ms1, local); MemoryStream ms2 = new MemoryStream(ms1.ToArray()); LocalFeatures l2 = new LocalFeatures("Secret"); //Since this property is an interface AND required we must set it before calling Deserialize l2.MyInterface = new MyImplementeInterface(); LocalFeatures.Deserialize(ms2, l2); //Test in Equals to have access to all fields Test("Local Features", local.Equals(l2)); //Test preservation of unknown fields byte[] streamBuffer; byte[] streamBufferV2Orig; byte[] streamBufferV1Mod; MyMessageV2 v2original = MyMessageV2.TestInstance(); //Write using (MemoryStream ms = new MemoryStream()) { MyMessageV2.Serialize(ms, v2original); streamBuffer = ms.ToArray(); streamBufferV2Orig = streamBuffer; } //Read V1, modify and write back MyMessageV1 v1 = MyMessageV1.Deserialize(new MemoryStream(streamBuffer)); v1.FieldA = 42; using (MemoryStream ms = new MemoryStream()) { MyMessageV1.Serialize(ms, v1); streamBuffer = ms.ToArray(); streamBufferV1Mod = streamBuffer; } //Compare stream buffers //Test ( // "Stream buffer length", // streamBufferV2Orig.Length == streamBufferV1Mod.Length //); for (int n = 0; n < streamBufferV2Orig.Length; n++) { if (n == 1) { continue; //expected difference for FieldA } if (streamBufferV2Orig [n] != streamBufferV1Mod [n]) { throw new InvalidDataException("Stream buffers do not match at byte " + n); } } //Read V2 and test MyMessageV2 v2test = MyMessageV2.Deserialize(new MemoryStream(streamBuffer)); //Test FieldA Test("Modified in v1", v2test.FieldA == v1.FieldA); //Restore and test entire v2 v2test.FieldA = v2original.FieldA; Test("MyMessageV2 WriteRead", v2original.Equals(v2test)); }