protected void BeginReceiveFrom() { rxBuffer.Reset(); try { ReceiveFromInternal(); } catch (ObjectDisposedException) { return; } catch (Exception e) { Trace.Warn("{0} recv error {1}", Name, e); BeginReceiveFrom(); } }
public void TestFullSerialization() { var eventFactory = new EventFactory(); eventFactory.Register <SampleEvent1>(); eventFactory.Register <SampleEvent2>(); eventFactory.Register <SampleEvent7>(); var buffer = new x2net.Buffer(); var event1 = new SampleEvent1 { // base Foo = 9, Bar = "hello" }; var event2 = new SampleEvent2 { // derived Foo = 9, Bar = "hello", Baz = true }; var e = new SampleEvent7 { // base > base > base SampleEvent = event1 }; // has base Serializer serializer = new Serializer(buffer); serializer.Write(e.GetTypeId()); e.Serialize(serializer); long bufferLength = buffer.Length; buffer.Rewind(); Deserializer deserializer = new Deserializer(buffer, eventFactory); int typeId; deserializer.Read(out typeId); var retrieved = eventFactory.Create(typeId); retrieved.Deserialize(deserializer); var e2 = retrieved as SampleEvent7; Assert.NotNull(e2); Assert.Equal(e.SampleEvent.Foo, e2.SampleEvent.Foo); Assert.Equal(e.SampleEvent.Bar, e2.SampleEvent.Bar); buffer.Reset(); // derived > base > base e.SampleEvent = event2; // base <= derived serializer = new Serializer(buffer); serializer.Write(e.GetTypeId()); e.Serialize(serializer); Assert.True(bufferLength < buffer.Length); { var e3 = new SampleEvent8 { SampleEvent = event2 // derived <= derived }; // has derived var buffer2 = new x2net.Buffer(); serializer = new Serializer(buffer2); serializer.Write(e3.GetTypeId()); e3.Serialize(serializer); Assert.Equal(buffer2.Length, buffer.Length); } buffer.Rewind(); deserializer = new Deserializer(buffer, eventFactory); deserializer.Read(out typeId); retrieved = eventFactory.Create(typeId); retrieved.Deserialize(deserializer); var e4 = retrieved as SampleEvent7; Assert.NotNull(e4); var deserialized = e4.SampleEvent as SampleEvent2; Assert.NotNull(deserialized); Assert.True(deserialized.Baz); Assert.Equal(e.SampleEvent.Foo, e4.SampleEvent.Foo); Assert.Equal(e.SampleEvent.Bar, e4.SampleEvent.Bar); }
public void TestPartialSerialization() { var eventFactory = new EventFactory(); eventFactory.Register <SampleEvent5>(); var buffer = new x2net.Buffer(); var cell1 = new SampleCell1 { // base Foo = 9, Bar = "hello" }; var cell2 = new SampleCell2 { // derived Foo = 9, Bar = "hello", Baz = true }; var event1 = new SampleEvent5 { // base > base > base SampleCell = cell1 }; // has base Serializer serializer = new Serializer(buffer); serializer.Write(event1.GetTypeId()); event1.Serialize(serializer); long bufferLength = buffer.Length; buffer.Rewind(); Deserializer deserializer = new Deserializer(buffer); int typeId; deserializer.Read(out typeId); var retrieved = eventFactory.Create(typeId); retrieved.Deserialize(deserializer); var event11 = retrieved as SampleEvent5; Assert.NotNull(event11); Assert.Equal(event1.SampleCell.Foo, event11.SampleCell.Foo); Assert.Equal(event1.SampleCell.Bar, event11.SampleCell.Bar); buffer.Reset(); // derived > base > base event1.SampleCell = cell2; // base <= derived serializer = new Serializer(buffer); serializer.Write(event1.GetTypeId()); event1.Serialize(serializer); Assert.Equal(bufferLength, buffer.Length); { var event2 = new SampleEvent6 { SampleCell = cell2 // derived <= derived }; // has derived var buffer2 = new x2net.Buffer(); serializer = new Serializer(buffer2); serializer.Write(event2.GetTypeId()); event2.Serialize(serializer); Assert.True(buffer2.Length > buffer.Length); } buffer.Rewind(); deserializer = new Deserializer(buffer); deserializer.Read(out typeId); retrieved = eventFactory.Create(typeId); retrieved.Deserialize(deserializer); var event12 = retrieved as SampleEvent5; Assert.NotNull(event12); Assert.True(event12.SampleCell is SampleCell1); Assert.Equal(event1.SampleCell.Foo, event12.SampleCell.Foo); Assert.Equal(event1.SampleCell.Bar, event12.SampleCell.Bar); }
public void TestCollections() { var buffer = new x2net.Buffer(); // List<int> var list = new List <int> { 1, 2, 3 }; var serializer = new Serializer(buffer); serializer.Write(list); buffer.Rewind(); var deserializer = new Deserializer(buffer); List <int> deserialized; deserializer.Read(out deserialized); Assert.NotNull(deserialized); Assert.True(list.EqualsEx(deserialized)); // List<string> var list2 = new List <string> { "one", "two", "three" }; buffer.Reset(); serializer = new Serializer(buffer); serializer.Write(list2); buffer.Rewind(); deserializer = new Deserializer(buffer); List <string> deserialized2; deserializer.Read(out deserialized2); Assert.NotNull(deserialized2); Assert.True(list2.EqualsEx(deserialized2)); // List<List<int>> var list3 = new List <List <int> >(); list3.Add(list); list3.Add(list); list3.Add(list); buffer.Reset(); serializer = new Serializer(buffer); serializer.Write(list3); buffer.Rewind(); deserializer = new Deserializer(buffer); List <List <int> > deserialized3; deserializer.Read(out deserialized3); Assert.NotNull(deserialized2); Assert.Equal(list3[0][0], deserialized3[0][0]); Assert.Equal(list3[1][1], deserialized3[1][1]); Assert.Equal(list3[2][1], deserialized3[2][1]); Assert.Equal(list3[2][2], deserialized3[2][2]); #if NET40 // Map var map = new Dictionary <int, string>(); map[1] = "one"; map[2] = "two"; map[3] = "three"; buffer.Reset(); serializer = new Serializer(buffer); serializer.Write(map); buffer.Rewind(); deserializer = new Deserializer(buffer); Dictionary <int, string> deserialized4; deserializer.Read(out deserialized4); Assert.NotNull(deserialized4); Assert.Equal(map[1], deserialized4[1]); // Map of lists var map2 = new Dictionary <string, List <SampleCell1> >(); map2.Add("key1", new List <SampleCell1> { new SampleCell1 { Foo = 1 } }); buffer.Reset(); serializer = new Serializer(buffer); serializer.Write(map2); buffer.Rewind(); deserializer = new Deserializer(buffer); Dictionary <string, List <SampleCell1> > deserialized5; deserializer.Read(out deserialized5); Assert.NotNull(deserialized5); var key = "key1"; Assert.Equal(map2[key][0].Foo, deserialized5[key][0].Foo); #endif }
private void BeginSendTo(Event e) { int handle = e._Handle; EndPoint endPoint; using (new ReadLock(rwlock)) { int count = map.Count; if (count == 0) { Trace.Error("{0} no known peers - dropped event {1}", Name, e); goto next; } if (count == 1 && handle == 0) { endPoint = map.Values[0]; } else { if (!map.TryGetValue(handle, out endPoint)) { Trace.Error("{0} unknown handle {1} - dropped event {2}", Name, handle, e); goto next; } } } // Apply the datagram length limit. int length = e.GetLength(); if (length > txBuffer.BlockSize) { Trace.Error("{0} dropped big event {1}", Name, e); goto next; } txBuffer.Reset(); Serializer serializer = new Serializer(txBuffer); serializer.Write(e.GetTypeId()); e.Serialize(serializer); if (BufferTransform != null) { BufferTransform.Transform(txBuffer, (int)txBuffer.Length); } try { SendToInternal(endPoint); Diag.IncrementEventsSent(); if (Trace.Handler != null && Config.TraceLevel <= TraceLevel.Debug) { // e.ToString() may crash if a composite property (list for example) // of the event is changed in other threads. string description; try { description = e.ToString(); } catch { description = e.GetTypeTag().RuntimeType.Name; } Trace.Emit(TraceLevel.Debug, "{0} {1} sent event {2}", Name, handle, description); } return; } catch (ObjectDisposedException) { return; } catch (Exception ex) { Trace.Info("{0} send error {1}", Name, ex); } next: OnSendToInternal(0); }
public void Reset() { headerLength = 0; buffer.Reset(); }