From cea751ff9d44ef1f2f0a540bd9454f041163ff60 Mon Sep 17 00:00:00 2001 From: Christian <6939810+chkr1011@users.noreply.github.com> Date: Sat, 26 Nov 2022 14:14:40 +0100 Subject: [PATCH] Add more conversion methos for application message payloads --- .../MqttApplicationMessageExtensions.cs | 129 +++++++++++++++++- 1 file changed, 127 insertions(+), 2 deletions(-) diff --git a/Source/MQTTnet/MqttApplicationMessageExtensions.cs b/Source/MQTTnet/MqttApplicationMessageExtensions.cs index 1bfd69a5..c17949d0 100644 --- a/Source/MQTTnet/MqttApplicationMessageExtensions.cs +++ b/Source/MQTTnet/MqttApplicationMessageExtensions.cs @@ -5,13 +5,78 @@ using System; using System.Text; +// ReSharper disable MemberCanBePrivate.Global + namespace MQTTnet { public static class MqttApplicationMessageExtensions { + public static short ConvertPayloadToByte(this MqttApplicationMessage applicationMessage) + { + if (applicationMessage == null) + { + throw new ArgumentNullException(nameof(applicationMessage)); + } + + if (applicationMessage.Payload.Length != 1) + { + throw new ArgumentException("Payload requires to be 1 bytes long."); + } + + return applicationMessage.Payload[0]; + } + + public static short ConvertPayloadToInt16(this MqttApplicationMessage applicationMessage) + { + if (applicationMessage == null) + { + throw new ArgumentNullException(nameof(applicationMessage)); + } + + if (applicationMessage.Payload.Length != 2) + { + throw new ArgumentException("Payload requires to be 2 bytes long."); + } + + return BitConverter.ToInt16(applicationMessage.Payload, 0); + } + + public static int ConvertPayloadToInt32(this MqttApplicationMessage applicationMessage) + { + if (applicationMessage == null) + { + throw new ArgumentNullException(nameof(applicationMessage)); + } + + if (applicationMessage.Payload?.Length != 4) + { + throw new ArgumentException("Payload requires to be 4 bytes long."); + } + + return BitConverter.ToInt32(applicationMessage.Payload, 0); + } + + public static long ConvertPayloadToInt64(this MqttApplicationMessage applicationMessage) + { + if (applicationMessage == null) + { + throw new ArgumentNullException(nameof(applicationMessage)); + } + + if (applicationMessage.Payload.Length != 8) + { + throw new ArgumentException("Payload requires to be 8 bytes long."); + } + + return BitConverter.ToInt64(applicationMessage.Payload, 0); + } + public static string ConvertPayloadToString(this MqttApplicationMessage applicationMessage) { - if (applicationMessage == null) throw new ArgumentNullException(nameof(applicationMessage)); + if (applicationMessage == null) + { + throw new ArgumentNullException(nameof(applicationMessage)); + } if (applicationMessage.Payload == null) { @@ -25,5 +90,65 @@ namespace MQTTnet return Encoding.UTF8.GetString(applicationMessage.Payload, 0, applicationMessage.Payload.Length); } + + public static decimal ParsePayloadToDecimal(this MqttApplicationMessage applicationMessage) + { + if (applicationMessage == null) + { + throw new ArgumentNullException(nameof(applicationMessage)); + } + + return decimal.Parse(ConvertPayloadToString(applicationMessage)); + } + + public static double ParsePayloadToDouble(this MqttApplicationMessage applicationMessage) + { + if (applicationMessage == null) + { + throw new ArgumentNullException(nameof(applicationMessage)); + } + + return double.Parse(ConvertPayloadToString(applicationMessage)); + } + + public static short ParsePayloadToInt16(this MqttApplicationMessage applicationMessage) + { + if (applicationMessage == null) + { + throw new ArgumentNullException(nameof(applicationMessage)); + } + + return short.Parse(ConvertPayloadToString(applicationMessage)); + } + + public static int ParsePayloadToInt32(this MqttApplicationMessage applicationMessage) + { + if (applicationMessage == null) + { + throw new ArgumentNullException(nameof(applicationMessage)); + } + + return int.Parse(ConvertPayloadToString(applicationMessage)); + } + + public static long ParsePayloadToInt64(this MqttApplicationMessage applicationMessage) + { + if (applicationMessage == null) + { + throw new ArgumentNullException(nameof(applicationMessage)); + } + + return long.Parse(ConvertPayloadToString(applicationMessage)); + } + + public static float ParsePayloadToSingle(this MqttApplicationMessage applicationMessage) + { + if (applicationMessage == null) + { + throw new ArgumentNullException(nameof(applicationMessage)); + } + + return float.Parse(ConvertPayloadToString(applicationMessage)); + } } -} +} \ No newline at end of file