diff options
| author | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2020-08-19 01:45:02 +0300 |
|---|---|---|
| committer | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2020-08-19 01:45:02 +0300 |
| commit | 4e216a0ca8ad3608b845fa445b73034e1a67b8af (patch) | |
| tree | 67e0ea698cfe5a8320aa81d8c13579e8ae6a6860 /Software/Visual_Studio/Tango.Transport/GenericMessageSerializer.cs | |
| parent | f4c418cced4c6fb25ec5d4cb2bcb4ce0f766efd0 (diff) | |
| download | Tango-4e216a0ca8ad3608b845fa445b73034e1a67b8af.tar.gz Tango-4e216a0ca8ad3608b845fa445b73034e1a67b8af.zip | |
DB: Changed TechMonitors HeadZone5_6HeaterCurrent => HeadZone56HeaterCurrent
Working on insights and insights annotations.
Added insights events.
Added insights settings to PPC advanced settings.
Added compression support for transport adapters.
Implemented compression support on TCP/SignalR/WebRTC.
Added Compression flag to ExternalBridge discovery packet.
Added compression setting to PPC advanced settings.
Refactored transport layer to use Bson instead of Json for Generic Messages.
Added all SciChart referenced assemblies.
Registered EF Extensions license for FSE.
Added support for FSE PushTask notification cancel button.
Diffstat (limited to 'Software/Visual_Studio/Tango.Transport/GenericMessageSerializer.cs')
| -rw-r--r-- | Software/Visual_Studio/Tango.Transport/GenericMessageSerializer.cs | 64 |
1 files changed, 63 insertions, 1 deletions
diff --git a/Software/Visual_Studio/Tango.Transport/GenericMessageSerializer.cs b/Software/Visual_Studio/Tango.Transport/GenericMessageSerializer.cs index aa3486dc3..55d07ef37 100644 --- a/Software/Visual_Studio/Tango.Transport/GenericMessageSerializer.cs +++ b/Software/Visual_Studio/Tango.Transport/GenericMessageSerializer.cs @@ -1,5 +1,6 @@ using Google.Protobuf; using Newtonsoft.Json; +using Newtonsoft.Json.Bson; using ProtoBuf; using System; using System.Collections.Generic; @@ -18,6 +19,7 @@ namespace Tango.Transport public enum GenericMessageSerializerMode { Json, + Bson, Protobuf } @@ -25,6 +27,7 @@ namespace Tango.Transport static GenericMessageSerializer() { + Mode = GenericMessageSerializerMode.Bson; ProtoBuf.Meta.RuntimeTypeModel.Default.AutoAddMissingTypes = true; ProtoBuf.Meta.RuntimeTypeModel.Default.AutoAddProtoContractTypesOnly = false; ProtoBuf.Meta.RuntimeTypeModel.Default.InferTagFromNameDefault = true; @@ -37,6 +40,10 @@ namespace Tango.Transport { return JsonConvert.DeserializeObject(Encoding.UTF8.GetString(array), type); } + else if (Mode == GenericMessageSerializerMode.Bson) + { + return DeserializeFromBson(array, type); + } else { AutoProtobuf.Build(type); @@ -54,6 +61,10 @@ namespace Tango.Transport { return JsonConvert.DeserializeObject(byteString.ToStringUtf8(), type); } + else if (Mode == GenericMessageSerializerMode.Bson) + { + return DeserializeFromBson(byteString.ToByteArray(), type); + } else { AutoProtobuf.Build(type); @@ -69,6 +80,10 @@ namespace Tango.Transport { return Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(message)); } + else if (Mode == GenericMessageSerializerMode.Bson) + { + return SerializeToBson(message); + } else { AutoProtobuf.Build<T>(); @@ -87,6 +102,10 @@ namespace Tango.Transport { return (T)Deserialize(typeof(T), array); } + else if (Mode == GenericMessageSerializerMode.Bson) + { + return DeserializeFromBson<T>(array); + } else { AutoProtobuf.Build<T>(); @@ -102,8 +121,14 @@ namespace Tango.Transport { if (Mode == GenericMessageSerializerMode.Json) { - return ByteString.CopyFromUtf8(JsonConvert.SerializeObject(message)); + var byteString = ByteString.CopyFromUtf8(JsonConvert.SerializeObject(message)); + return byteString; } + else if (Mode == GenericMessageSerializerMode.Bson) + { + var byteString = ByteString.CopyFrom(SerializeToBson(message)); + return byteString; + } else { AutoProtobuf.Build<T>(); @@ -118,6 +143,10 @@ namespace Tango.Transport { return JsonConvert.DeserializeObject<T>(byteString.ToStringUtf8()); } + else if (Mode == GenericMessageSerializerMode.Bson) + { + return DeserializeFromBson<T>(byteString.ToByteArray()); + } else { AutoProtobuf.Build<T>(); @@ -133,5 +162,38 @@ namespace Tango.Transport var innerMessage = DeserializeFromByteString(genericType, (message as GenericRequest).Data); return innerMessage as T; } + + private static byte[] SerializeToBson(Object obj) + { + MemoryStream ms = new MemoryStream(); + using (BsonWriter writer = new BsonWriter(ms)) + { + JsonSerializer serializer = new JsonSerializer(); + serializer.Serialize(writer, obj); + return ms.ToArray(); + } + } + + private static Object DeserializeFromBson(byte[] data, Type type) + { + MemoryStream ms = new MemoryStream(data); + using (BsonReader reader = new BsonReader(ms)) + { + JsonSerializer serializer = new JsonSerializer(); + Object obj = serializer.Deserialize(reader, type); + return obj; + } + } + + private static T DeserializeFromBson<T>(byte[] data) + { + MemoryStream ms = new MemoryStream(data); + using (BsonReader reader = new BsonReader(ms)) + { + JsonSerializer serializer = new JsonSerializer(); + T obj = serializer.Deserialize<T>(reader); + return obj; + } + } } } |
