diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2017-11-16 13:38:56 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2017-11-16 13:38:56 +0200 |
| commit | 914f4db513477d9aff726546bac47545195a3e37 (patch) | |
| tree | d2ff190fd84b1dfaa03eec76563c431592ece7ff /Software/Visual_Studio/Tango.PMR/TangoMessage.cs | |
| parent | 65d01ff549d80fbe13ff5e966df216c9f7c03653 (diff) | |
| download | Tango-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.cs | 111 |
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); + } + } +} |
