aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.PMR/TangoMessage.cs
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2017-11-16 13:38:56 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2017-11-16 13:38:56 +0200
commit914f4db513477d9aff726546bac47545195a3e37 (patch)
treed2ff190fd84b1dfaa03eec76563c431592ece7ff /Software/Visual_Studio/Tango.PMR/TangoMessage.cs
parent65d01ff549d80fbe13ff5e966df216c9f7c03653 (diff)
downloadTango-914f4db513477d9aff726546bac47545195a3e37.tar.gz
Tango-914f4db513477d9aff726546bac47545195a3e37.zip
Rename "Visual Studio" to "Visual_Studio"
Rename "External Repositories" to "External_Repositories".
Diffstat (limited to 'Software/Visual_Studio/Tango.PMR/TangoMessage.cs')
-rw-r--r--Software/Visual_Studio/Tango.PMR/TangoMessage.cs111
1 files changed, 111 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Tango.PMR/TangoMessage.cs b/Software/Visual_Studio/Tango.PMR/TangoMessage.cs
new file mode 100644
index 000000000..dec963e36
--- /dev/null
+++ b/Software/Visual_Studio/Tango.PMR/TangoMessage.cs
@@ -0,0 +1,111 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.PMR.Common;
+using Google.Protobuf;
+using System.IO;
+
+namespace Tango.PMR
+{
+ /// <summary>
+ /// Represents a wrapper class for PRM messages.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ public class TangoMessage<T> where T : IMessage<T>
+ {
+ /// <summary>
+ /// Gets the container.
+ /// </summary>
+ public MessageContainer Container { get; }
+
+ /// <summary>
+ /// Gets or sets the message.
+ /// </summary>
+ public T Message { get; set; }
+
+ /// <summary>
+ /// Gets or sets the message type.
+ /// </summary>
+ public MessageType Type { get; set; }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="TangoMessage{T}"/> class.
+ /// </summary>
+ /// <param name="message">The message.</param>
+ /// <param name="type">The type.</param>
+ public TangoMessage(T message, MessageType type)
+ {
+ Message = message;
+ Type = type;
+
+ Container = new MessageContainer();
+ Container.Token = Guid.NewGuid().ToString();
+ Container.Type = Type;
+ }
+
+ /// <summary>
+ /// Generates a new <see cref="MessageContainer"/> containing the message of type <see cref="T"/> and returns a byte array.
+ /// </summary>
+ /// <returns></returns>
+ public byte[] ToBytes()
+ {
+ Container.Data = Message.ToByteString();
+
+ using (MemoryStream ms = new MemoryStream())
+ {
+ Container.WriteTo(ms);
+ return ms.ToArray();
+ }
+ }
+
+ /// <summary>
+ /// Generates a new <see cref="MessageContainer"/> containing the message of type <see cref="T"/> and returns a byte array.
+ /// </summary>
+ /// <returns></returns>
+ public byte[] ToJsonBytes()
+ {
+ Container.Data = Message.ToByteString();
+ return Encoding.UTF8.GetBytes(Container.ToString());
+ }
+
+ /// <summary>
+ /// Performs an implicit conversion from <see cref="T"/> to <see cref="TangoMessage{T}"/>.
+ /// </summary>
+ /// <param name="message">The message.</param>
+ /// <returns>
+ /// The result of the conversion.
+ /// </returns>
+ public static implicit operator TangoMessage<T>(T message)
+ {
+ var tangoMessage = MessageFactory.CreateTangoMessage<T>();
+ tangoMessage.Message = message;
+ return tangoMessage;
+ }
+
+ /// <summary>
+ /// Performs an implicit conversion from <see cref="TangoMessage{T}"/> to <see cref="T"/>.
+ /// </summary>
+ /// <param name="instance">The instance.</param>
+ /// <returns>
+ /// The result of the conversion.
+ /// </returns>
+ public static implicit operator T (TangoMessage<T> instance)
+ {
+ return instance.Message;
+ }
+
+ /// <summary>
+ /// Performs an implicit conversion from <see cref="System.Byte[]"/> to <see cref="TangoMessage{T}"/>.
+ /// </summary>
+ /// <param name="data">The data.</param>
+ /// <returns>
+ /// The result of the conversion.
+ /// </returns>
+ public static implicit operator TangoMessage<T>(byte[] data)
+ {
+ return MessageFactory.ParseTangoMessage<T>(data);
+ }
+ }
+}