aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Transport
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
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')
-rw-r--r--Software/Visual_Studio/Tango.Transport/Adapters/SignalRTransportAdapter.cs9
-rw-r--r--Software/Visual_Studio/Tango.Transport/Adapters/TcpTransportAdapter.cs11
-rw-r--r--Software/Visual_Studio/Tango.Transport/Compression/GZipHelper.cs42
-rw-r--r--Software/Visual_Studio/Tango.Transport/GenericMessageSerializer.cs64
-rw-r--r--Software/Visual_Studio/Tango.Transport/ITransportAdapter.cs5
-rw-r--r--Software/Visual_Studio/Tango.Transport/Tango.Transport.csproj3
-rw-r--r--Software/Visual_Studio/Tango.Transport/TransportAdapterBase.cs5
7 files changed, 130 insertions, 9 deletions
diff --git a/Software/Visual_Studio/Tango.Transport/Adapters/SignalRTransportAdapter.cs b/Software/Visual_Studio/Tango.Transport/Adapters/SignalRTransportAdapter.cs
index de472d993..f2692426f 100644
--- a/Software/Visual_Studio/Tango.Transport/Adapters/SignalRTransportAdapter.cs
+++ b/Software/Visual_Studio/Tango.Transport/Adapters/SignalRTransportAdapter.cs
@@ -51,11 +51,6 @@ namespace Tango.Transport.Adapters
public SignalRTransportAdapterMode Mode { get; set; }
/// <summary>
- /// Gets or sets a value indicating whether to enable compression/decompression of data.
- /// </summary>
- public bool EnableCompression { get; set; }
-
- /// <summary>
/// Gets or sets the adapter connection timeout.
/// </summary>
public TimeSpan ConnectionTimeout { get; set; }
@@ -300,7 +295,7 @@ namespace Tango.Transport.Adapters
if (EnableCompression)
{
- var compressed = Compression.SevenZipHelper.Compress(data);
+ var compressed = Compression.GZipHelper.Compress(data);
dataCollection.Add(compressed);
}
else
@@ -341,7 +336,7 @@ namespace Tango.Transport.Adapters
{
if (EnableCompression)
{
- OnDataAvailable(Compression.SevenZipHelper.Decompress(data));
+ OnDataAvailable(Compression.GZipHelper.Decompress(data));
}
else
{
diff --git a/Software/Visual_Studio/Tango.Transport/Adapters/TcpTransportAdapter.cs b/Software/Visual_Studio/Tango.Transport/Adapters/TcpTransportAdapter.cs
index 831f7c5dc..f4bfb0ba8 100644
--- a/Software/Visual_Studio/Tango.Transport/Adapters/TcpTransportAdapter.cs
+++ b/Software/Visual_Studio/Tango.Transport/Adapters/TcpTransportAdapter.cs
@@ -12,6 +12,7 @@ using System.Threading;
using System.Threading.Tasks;
using Tango.Core;
using Tango.Logging;
+using Tango.Transport.Compression;
namespace Tango.Transport.Adapters
{
@@ -176,6 +177,11 @@ namespace Tango.Transport.Adapters
try
{
+ if (EnableCompression)
+ {
+ data = GZipHelper.Compress(data);
+ }
+
data = PostProcessBuffer(data);
if (WriteMode == TcpTransportAdapterWriteMode.Direct || immidiate)
@@ -241,6 +247,11 @@ namespace Tango.Transport.Adapters
}
}
+ if (EnableCompression)
+ {
+ data = GZipHelper.Decompress(data);
+ }
+
OnDataAvailable(data);
}
else
diff --git a/Software/Visual_Studio/Tango.Transport/Compression/GZipHelper.cs b/Software/Visual_Studio/Tango.Transport/Compression/GZipHelper.cs
new file mode 100644
index 000000000..5ec17a35f
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Transport/Compression/GZipHelper.cs
@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.IO.Compression;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.Transport.Compression
+{
+ public static class GZipHelper
+ {
+ public static byte[] Compress(byte[] buffer)
+ {
+ using (MemoryStream ms = new MemoryStream())
+ {
+ using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true))
+ {
+ zip.Write(buffer, 0, buffer.Length);
+ }
+
+ return ms.ToArray();
+ }
+ }
+
+ public static byte[] Decompress(byte[] gzBuffer)
+ {
+ using (MemoryStream msOut = new MemoryStream())
+ {
+ using (MemoryStream ms = new MemoryStream(gzBuffer))
+ {
+ using (GZipStream zip = new GZipStream(ms, CompressionMode.Decompress))
+ {
+ zip.CopyTo(msOut);
+ }
+ }
+
+ return msOut.ToArray();
+ }
+ }
+ }
+}
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;
+ }
+ }
}
}
diff --git a/Software/Visual_Studio/Tango.Transport/ITransportAdapter.cs b/Software/Visual_Studio/Tango.Transport/ITransportAdapter.cs
index 1c397aae3..3c5bed9d0 100644
--- a/Software/Visual_Studio/Tango.Transport/ITransportAdapter.cs
+++ b/Software/Visual_Studio/Tango.Transport/ITransportAdapter.cs
@@ -36,6 +36,11 @@ namespace Tango.Transport
long TransferRate { get; }
/// <summary>
+ /// Gets or sets a value indicating whether to enable compression/decompression of data.
+ /// </summary>
+ bool EnableCompression { get; set; }
+
+ /// <summary>
/// Writes the specified data to the stream.
/// </summary>
/// <param name="data">The data.</param>
diff --git a/Software/Visual_Studio/Tango.Transport/Tango.Transport.csproj b/Software/Visual_Studio/Tango.Transport/Tango.Transport.csproj
index 8ed8c0345..2521daa2f 100644
--- a/Software/Visual_Studio/Tango.Transport/Tango.Transport.csproj
+++ b/Software/Visual_Studio/Tango.Transport/Tango.Transport.csproj
@@ -102,6 +102,7 @@
<Compile Include="Compression\Compress\RangeCoder\RangeCoder.cs" />
<Compile Include="Compression\Compress\RangeCoder\RangeCoderBit.cs" />
<Compile Include="Compression\Compress\RangeCoder\RangeCoderBitTree.cs" />
+ <Compile Include="Compression\GZipHelper.cs" />
<Compile Include="Compression\ICoder.cs" />
<Compile Include="Compression\SevenZipHelper.cs" />
<Compile Include="ContinuousResponseAbortedException.cs" />
@@ -187,7 +188,7 @@
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ProjectExtensions>
<VisualStudio>
- <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" />
+ <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" />
</VisualStudio>
</ProjectExtensions>
</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/Tango.Transport/TransportAdapterBase.cs b/Software/Visual_Studio/Tango.Transport/TransportAdapterBase.cs
index ebae5855a..09acc4ea5 100644
--- a/Software/Visual_Studio/Tango.Transport/TransportAdapterBase.cs
+++ b/Software/Visual_Studio/Tango.Transport/TransportAdapterBase.cs
@@ -109,6 +109,11 @@ namespace Tango.Transport
}
}
+ /// <summary>
+ /// Gets or sets a value indicating whether to enable compression/decompression of data.
+ /// </summary>
+ public bool EnableCompression { get; set; }
+
#endregion
#region Virtual Methods