aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Transport
diff options
context:
space:
mode:
authorRoy Ben Shabat <Roy.mail.net@gmail.com>2020-03-30 00:56:02 +0300
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2020-03-30 00:56:02 +0300
commit091a4bdeb2feadb4962c6be5deb367ab56d81707 (patch)
tree289a672287063108b851b2831d4c699dcddd26d9 /Software/Visual_Studio/Tango.Transport
parent3d6a882cf14f36297d8b379e0fdf65376064edf7 (diff)
downloadTango-091a4bdeb2feadb4962c6be5deb367ab56d81707.tar.gz
Tango-091a4bdeb2feadb4962c6be5deb367ab56d81707.zip
Implemented PPC Updates & Packages.
Moved PPC/FSE interfaces to PPC.Shared. Changes Generic Serialization to json.
Diffstat (limited to 'Software/Visual_Studio/Tango.Transport')
-rw-r--r--Software/Visual_Studio/Tango.Transport/GenericMessageSerializer.cs137
-rw-r--r--Software/Visual_Studio/Tango.Transport/ProtoSerializer.cs87
-rw-r--r--Software/Visual_Studio/Tango.Transport/Tango.Transport.csproj4
-rw-r--r--Software/Visual_Studio/Tango.Transport/TransporterBase.cs12
4 files changed, 145 insertions, 95 deletions
diff --git a/Software/Visual_Studio/Tango.Transport/GenericMessageSerializer.cs b/Software/Visual_Studio/Tango.Transport/GenericMessageSerializer.cs
new file mode 100644
index 000000000..aa3486dc3
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Transport/GenericMessageSerializer.cs
@@ -0,0 +1,137 @@
+using Google.Protobuf;
+using Newtonsoft.Json;
+using ProtoBuf;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.PMR;
+using Tango.PMR.Common;
+using Tango.PMR.Integration;
+
+namespace Tango.Transport
+{
+ public static class GenericMessageSerializer
+ {
+ public enum GenericMessageSerializerMode
+ {
+ Json,
+ Protobuf
+ }
+
+ public static GenericMessageSerializerMode Mode { get; set; }
+
+ static GenericMessageSerializer()
+ {
+ ProtoBuf.Meta.RuntimeTypeModel.Default.AutoAddMissingTypes = true;
+ ProtoBuf.Meta.RuntimeTypeModel.Default.AutoAddProtoContractTypesOnly = false;
+ ProtoBuf.Meta.RuntimeTypeModel.Default.InferTagFromNameDefault = true;
+ ProtoBuf.Meta.RuntimeTypeModel.Default.UseImplicitZeroDefaults = true;
+ }
+
+ public static object Deserialize(Type type, byte[] array)
+ {
+ if (Mode == GenericMessageSerializerMode.Json)
+ {
+ return JsonConvert.DeserializeObject(Encoding.UTF8.GetString(array), type);
+ }
+ else
+ {
+ AutoProtobuf.Build(type);
+
+ using (MemoryStream ms = new MemoryStream(array))
+ {
+ return Serializer.Deserialize(type, ms);
+ }
+ }
+ }
+
+ public static object DeserializeFromByteString(Type type, ByteString byteString)
+ {
+ if (Mode == GenericMessageSerializerMode.Json)
+ {
+ return JsonConvert.DeserializeObject(byteString.ToStringUtf8(), type);
+ }
+ else
+ {
+ AutoProtobuf.Build(type);
+ return Deserialize(type, byteString.ToByteArray());
+ }
+ }
+
+ //---------------------------------------------------------------------
+
+ public static byte[] Serialize<T>(T message)
+ {
+ if (Mode == GenericMessageSerializerMode.Json)
+ {
+ return Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(message));
+ }
+ else
+ {
+ AutoProtobuf.Build<T>();
+
+ using (MemoryStream ms = new MemoryStream())
+ {
+ Serializer.Serialize<T>(ms, message);
+ return ms.ToArray();
+ }
+ }
+ }
+
+ public static T Deserialize<T>(byte[] array)
+ {
+ if (Mode == GenericMessageSerializerMode.Json)
+ {
+ return (T)Deserialize(typeof(T), array);
+ }
+ else
+ {
+ AutoProtobuf.Build<T>();
+
+ using (MemoryStream ms = new MemoryStream(array))
+ {
+ return Serializer.Deserialize<T>(ms);
+ }
+ }
+ }
+
+ public static ByteString SerializeToByteString<T>(T message)
+ {
+ if (Mode == GenericMessageSerializerMode.Json)
+ {
+ return ByteString.CopyFromUtf8(JsonConvert.SerializeObject(message));
+ }
+ else
+ {
+ AutoProtobuf.Build<T>();
+
+ return ByteString.CopyFrom(Serialize<T>(message));
+ }
+ }
+
+ public static T DeserializeFromByteString<T>(ByteString byteString)
+ {
+ if (Mode == GenericMessageSerializerMode.Json)
+ {
+ return JsonConvert.DeserializeObject<T>(byteString.ToStringUtf8());
+ }
+ else
+ {
+ AutoProtobuf.Build<T>();
+
+ return Deserialize<T>(byteString.ToByteArray());
+ }
+ }
+
+ public static T ExtractGenericRequestFromContainer<T>(MessageContainer container) where T : class
+ {
+ var message = MessageFactory.ExtractMessageFromContainer(container);
+ var genericType = Type.GetType((message as GenericRequest).Type);
+ var innerMessage = DeserializeFromByteString(genericType, (message as GenericRequest).Data);
+ return innerMessage as T;
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.Transport/ProtoSerializer.cs b/Software/Visual_Studio/Tango.Transport/ProtoSerializer.cs
deleted file mode 100644
index c974f2712..000000000
--- a/Software/Visual_Studio/Tango.Transport/ProtoSerializer.cs
+++ /dev/null
@@ -1,87 +0,0 @@
-using Google.Protobuf;
-using ProtoBuf;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Tango.PMR;
-using Tango.PMR.Common;
-using Tango.PMR.Integration;
-
-namespace Tango.Transport
-{
- public static class ProtoSerializer
- {
- static ProtoSerializer()
- {
- ProtoBuf.Meta.RuntimeTypeModel.Default.AutoAddMissingTypes = true;
- ProtoBuf.Meta.RuntimeTypeModel.Default.AutoAddProtoContractTypesOnly = false;
- ProtoBuf.Meta.RuntimeTypeModel.Default.InferTagFromNameDefault = true;
- ProtoBuf.Meta.RuntimeTypeModel.Default.UseImplicitZeroDefaults = true;
- }
-
- public static object Deserialize(Type type, byte[] array)
- {
- AutoProtobuf.Build(type);
-
- using (MemoryStream ms = new MemoryStream(array))
- {
- return Serializer.Deserialize(type, ms);
- }
- }
-
- public static object DeserializeFromByteString(Type type, ByteString byteString)
- {
- AutoProtobuf.Build(type);
-
- return Deserialize(type, byteString.ToByteArray());
- }
-
- //---------------------------------------------------------------------
-
- public static byte[] Serialize<T>(T message)
- {
- AutoProtobuf.Build<T>();
-
- using (MemoryStream ms = new MemoryStream())
- {
- Serializer.Serialize<T>(ms, message);
- return ms.ToArray();
- }
- }
-
- public static T Deserialize<T>(byte[] array)
- {
- AutoProtobuf.Build<T>();
-
- using (MemoryStream ms = new MemoryStream(array))
- {
- return Serializer.Deserialize<T>(ms);
- }
- }
-
- public static ByteString SerializeToByteString<T>(T message)
- {
- AutoProtobuf.Build<T>();
-
- return ByteString.CopyFrom(Serialize<T>(message));
- }
-
- public static T DeserializeFromByteString<T>(ByteString byteString)
- {
- AutoProtobuf.Build<T>();
-
- return Deserialize<T>(byteString.ToByteArray());
- }
-
- public static T ExtractGenericRequestFromContainer<T>(MessageContainer container) where T : class
- {
- var message = MessageFactory.ExtractMessageFromContainer(container);
- var genericType = Type.GetType((message as GenericRequest).Type);
- var innerMessage = ProtoSerializer.DeserializeFromByteString(genericType, (message as GenericRequest).Data);
- return innerMessage as T;
- }
- }
-}
diff --git a/Software/Visual_Studio/Tango.Transport/Tango.Transport.csproj b/Software/Visual_Studio/Tango.Transport/Tango.Transport.csproj
index 120584798..f83384097 100644
--- a/Software/Visual_Studio/Tango.Transport/Tango.Transport.csproj
+++ b/Software/Visual_Studio/Tango.Transport/Tango.Transport.csproj
@@ -125,7 +125,7 @@
<Compile Include="PendingResponse.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ITransporter.cs" />
- <Compile Include="ProtoSerializer.cs" />
+ <Compile Include="GenericMessageSerializer.cs" />
<Compile Include="RequestFailedEventArgs.cs" />
<Compile Include="ResponseErrorException.cs" />
<Compile Include="Routing\SimpleTransportRouter.cs" />
@@ -186,7 +186,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/TransporterBase.cs b/Software/Visual_Studio/Tango.Transport/TransporterBase.cs
index 5e076738c..0958e4d9f 100644
--- a/Software/Visual_Studio/Tango.Transport/TransporterBase.cs
+++ b/Software/Visual_Studio/Tango.Transport/TransporterBase.cs
@@ -334,7 +334,7 @@ namespace Tango.Transport
if (handlers.Count > 0)
{
- var innerRequest = ProtoSerializer.DeserializeFromByteString(handlers[0].RequestType, genericRequest.Data);
+ var innerRequest = GenericMessageSerializer.DeserializeFromByteString(handlers[0].RequestType, genericRequest.Data);
foreach (var handler in handlers)
{
@@ -930,10 +930,10 @@ namespace Tango.Transport
{
GenericRequest genericRequest = new GenericRequest();
genericRequest.Type = request.GetType().AssemblyQualifiedName;
- genericRequest.Data = ProtoSerializer.SerializeToByteString<Request>(request);
+ genericRequest.Data = GenericMessageSerializer.SerializeToByteString<Request>(request);
var response = await SendRequest<GenericRequest, GenericResponse>(genericRequest, config);
- var responseObject = ProtoSerializer.DeserializeFromByteString<Response>(response.Message.Data);
+ var responseObject = GenericMessageSerializer.DeserializeFromByteString<Response>(response.Message.Data);
return responseObject;
}
@@ -949,7 +949,7 @@ namespace Tango.Transport
{
GenericResponse genericResponse = new GenericResponse();
- genericResponse.Data = ProtoSerializer.SerializeToByteString<Response>(response);
+ genericResponse.Data = GenericMessageSerializer.SerializeToByteString<Response>(response);
await SendResponse<GenericResponse>(genericResponse, token, config);
}
@@ -966,7 +966,7 @@ namespace Tango.Transport
GenericRequest genericRequest = new GenericRequest();
genericRequest.Type = request.GetType().AssemblyQualifiedName;
- genericRequest.Data = ProtoSerializer.SerializeToByteString<Request>(request);
+ genericRequest.Data = GenericMessageSerializer.SerializeToByteString<Request>(request);
Subject<Response> subject = new Subject<Response>();
@@ -975,7 +975,7 @@ namespace Tango.Transport
try
{
- var responseObject = ProtoSerializer.DeserializeFromByteString<Response>(response.Message.Data);
+ var responseObject = GenericMessageSerializer.DeserializeFromByteString<Response>(response.Message.Data);
subject.OnNext(responseObject);
}
catch (Exception ex)