aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Transport/GenericMessageSerializer.cs
diff options
context:
space:
mode:
authorRoy Ben Shabat <Roy.mail.net@gmail.com>2020-08-19 01:45:02 +0300
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2020-08-19 01:45:02 +0300
commit4e216a0ca8ad3608b845fa445b73034e1a67b8af (patch)
tree67e0ea698cfe5a8320aa81d8c13579e8ae6a6860 /Software/Visual_Studio/Tango.Transport/GenericMessageSerializer.cs
parentf4c418cced4c6fb25ec5d4cb2bcb4ce0f766efd0 (diff)
downloadTango-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.cs64
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;
+ }
+ }
}
}