diff --git a/DeviceCommons/DataHandling/DeviceMessageSerializerProvider.cs b/DeviceCommons/DataHandling/DeviceMessageSerializerProvider.cs
index 1296e35a23efb6295e64be4acff72c4708f444b1..8cd4f59a1e7f61526207508d44f27bbbfeb978cd 100644
--- a/DeviceCommons/DataHandling/DeviceMessageSerializerProvider.cs
+++ b/DeviceCommons/DataHandling/DeviceMessageSerializerProvider.cs
@@ -1,6 +1,4 @@
using DeviceCommons.DeviceMessages.Serialization;
-using DeviceCommons.DeviceMessages.Serialization.V1.Parsers;
-using DeviceCommons.DeviceMessages.Serialization.V1.Serializers;
namespace DeviceCommons.DataHandling
{
@@ -12,22 +10,70 @@ namespace DeviceCommons.DataHandling
public static readonly IDeviceMessageHeaderSerializer HeaderSer = new DeviceMessageHeaderSerializer();
public static readonly IDeviceMessageHeaderParser HeaderPar = new DeviceMessageHeaderParser();
- public static readonly IDeviceMessageInfoSerializer InfoSer = new DeviceMessageInfoSerializer();
- public static readonly IDeviceMessageInfoParser InfoPar = new DeviceMessageInfoParser();
+ #region V1
+ public static readonly IDeviceMessageInfoSerializer InfoV1Ser =
+ new DeviceMessages.Serialization.V1.Serializers.DeviceMessageInfoSerializer();
+ public static readonly IDeviceMessageInfoParser InfoV1Par =
+ new DeviceMessages.Serialization.V1.Parsers.DeviceMessageInfoParser();
- public static readonly IDeviceMessageInfoReadingsSerializer InfoReadingsSer = new DeviceMessageInfoReadingsSerializer();
- public static readonly IDeviceMessageInfoReadingsParser InfoReadingsPar = new DeviceMessageInfoReadingsParser();
+ public static readonly IDeviceMessageInfoReadingsSerializer InfoReadingsV1Ser =
+ new DeviceMessages.Serialization.V1.Serializers.DeviceMessageInfoReadingsSerializer();
+ public static readonly IDeviceMessageInfoReadingsParser InfoReadingsV1Par =
+ new DeviceMessages.Serialization.V1.Parsers.DeviceMessageInfoReadingsParser();
- public static readonly IDeviceMessageInfoReadingSerializer InfoReadingSer = new DeviceMessageInfoReadingSerializer();
- public static readonly IDeviceMessageInfoReadingParser InfoReadingPar = new DeviceMessageInfoReadingParser();
+ public static readonly IDeviceMessageInfoReadingSerializer InfoReadingV1Ser =
+ new DeviceMessages.Serialization.V1.Serializers.DeviceMessageInfoReadingSerializer();
+ public static readonly IDeviceMessageInfoReadingParser InfoReadingV1Par =
+ new DeviceMessages.Serialization.V1.Parsers.DeviceMessageInfoReadingParser();
- public static readonly IDeviceMessageInfoReadingStatesSerializer InfoReadingStatesSer = new DeviceMessageInfoReadingStatesSerializer();
- public static readonly IDeviceMessageInfoReadingStatesParser InfoReadingStatesPar = new DeviceMessageInfoReadingStatesParser();
+ public static readonly IDeviceMessageInfoReadingStatesSerializer InfoReadingStatesV1Ser =
+ new DeviceMessages.Serialization.V1.Serializers.DeviceMessageInfoReadingStatesSerializer();
+ public static readonly IDeviceMessageInfoReadingStatesParser InfoReadingStatesV1Par =
+ new DeviceMessages.Serialization.V1.Parsers.DeviceMessageInfoReadingStatesParser();
+
+ public static readonly IDeviceMessageInfoReadingStateSerializer InfoReadingStateV1Ser =
+ new DeviceMessages.Serialization.V1.Serializers.DeviceMessageInfoReadingStateSerializer();
+ public static readonly IDeviceMessageInfoReadingStateParser InfoReadingStateV1Par =
+ new DeviceMessages.Serialization.V1.Parsers.DeviceMessageInfoReadingStateParser();
+ #endregion
+
+ #region V2
+ public static readonly IDeviceMessageChildSerializer ChildV1Ser =
+ new DeviceMessages.Serialization.V1.Serializers.DeviceMessageChildSerializer();
+ public static readonly IDeviceMessageChildParser ChildV1Par =
+ new DeviceMessages.Serialization.V1.Parsers.DeviceMessageChildParser();
+
+ public static readonly IDeviceMessageInfoSerializer InfoV2Ser =
+ new DeviceMessages.Serialization.V2.Serializers.DeviceMessageInfoSerializer();
+ public static readonly IDeviceMessageInfoParser InfoV2Par =
+ new DeviceMessages.Serialization.V2.Parsers.DeviceMessageInfoParser();
+
+ public static readonly IDeviceMessageInfoReadingsSerializer InfoReadingsV2Ser =
+ new DeviceMessages.Serialization.V2.Serializers.DeviceMessageInfoReadingsSerializer();
+ public static readonly IDeviceMessageInfoReadingsParser InfoReadingsV2Par =
+ new DeviceMessages.Serialization.V2.Parsers.DeviceMessageInfoReadingsParser();
+
+ public static readonly IDeviceMessageInfoReadingSerializer InfoReadingV2Ser =
+ new DeviceMessages.Serialization.V2.Serializers.DeviceMessageInfoReadingSerializer();
+ public static readonly IDeviceMessageInfoReadingParser InfoReadingV2Par =
+ new DeviceMessages.Serialization.V2.Parsers.DeviceMessageInfoReadingParser();
+
+ public static readonly IDeviceMessageInfoReadingStatesSerializer InfoReadingStatesV2Ser =
+ new DeviceMessages.Serialization.V2.Serializers.DeviceMessageInfoReadingStatesSerializer();
+ public static readonly IDeviceMessageInfoReadingStatesParser InfoReadingStatesV2Par =
+ new DeviceMessages.Serialization.V2.Parsers.DeviceMessageInfoReadingStatesParser();
+
+ public static readonly IDeviceMessageInfoReadingStateSerializer InfoReadingStateV2Ser =
+ new DeviceMessages.Serialization.V2.Serializers.DeviceMessageInfoReadingStateSerializer();
+ public static readonly IDeviceMessageInfoReadingStateParser InfoReadingStateV2Par =
+ new DeviceMessages.Serialization.V2.Parsers.DeviceMessageInfoReadingStateParser();
+
+ public static readonly IDeviceMessageChildSerializer ChildV2Ser =
+ new DeviceMessages.Serialization.V2.Serializers.DeviceMessageChildSerializer();
+ public static readonly IDeviceMessageChildParser ChildV2Par =
+ new DeviceMessages.Serialization.V2.Parsers.DeviceMessageChildParser();
+ #endregion
- public static readonly IDeviceMessageInfoReadingStateSerializer InfoReadingStateSer = new DeviceMessageInfoReadingStateSerializer();
- public static readonly IDeviceMessageInfoReadingStateParser InfoReadingStatePar = new DeviceMessageInfoReadingStateParser();
- public static readonly IDeviceMessageChildSerializer ChildSer = new DeviceMessageChildSerializer();
- public static readonly IDeviceMessageChildParser ChildPar = new DeviceMessageChildParser();
}
}
diff --git a/DeviceCommons/DataHandling/DeviceMessageUtilities.cs b/DeviceCommons/DataHandling/DeviceMessageUtilities.cs
index daf10fbc1c944c128327623cb21945c5f689d2d7..ee707ae43b7ddcf0c32b8a18f06e9b9d38a0d0a1 100644
--- a/DeviceCommons/DataHandling/DeviceMessageUtilities.cs
+++ b/DeviceCommons/DataHandling/DeviceMessageUtilities.cs
@@ -1,4 +1,5 @@
using DeviceCommons.DeviceMessages.Enums;
+using DeviceCommons.DeviceMessages.Models.V1;
namespace DeviceCommons.DataHandling
{
@@ -64,7 +65,20 @@ namespace DeviceCommons.DataHandling
CheckBuffer(data, startIndex, 2);
return GetValueLength(valueType, data, startIndex + 1) + 2;
default:
- return GetValueLength(valueType,null);
+ return GetValueLength(valueType, null);
+ }
+ }
+
+ public static int GetValueLength(IDeviceMessageInfoReadingState state)
+ {
+ switch (state.ValueType)
+ {
+ case StateValueTypeEnum.String:
+ return state.Value.Length + 1;
+ case StateValueTypeEnum.Binary:
+ return state.Value.Length + 2;
+ default:
+ return GetValueLength(state.ValueType, null);
}
}
}
diff --git a/DeviceCommons/DeviceCommons.csproj b/DeviceCommons/DeviceCommons.csproj
index 407846a5aee5323a116fd6d8a321849d9fee800f..3166522d1e5c3b6547fcfc7cba14ca7aa4a49ef1 100644
--- a/DeviceCommons/DeviceCommons.csproj
+++ b/DeviceCommons/DeviceCommons.csproj
@@ -10,4 +10,8 @@
+
+
+
+
diff --git a/DeviceCommons/DeviceMessages/Abstractions/AbstractMessage.cs b/DeviceCommons/DeviceMessages/Abstractions/AbstractMessage.cs
index 14a6d2ae951d3198969cf4a46c70d7ca49519211..832b4aa0ebc2a95d24bbe07f48a0d6dfa2cba0e3 100644
--- a/DeviceCommons/DeviceMessages/Abstractions/AbstractMessage.cs
+++ b/DeviceCommons/DeviceMessages/Abstractions/AbstractMessage.cs
@@ -1,4 +1,4 @@
-using DeviceCommons.DeviceMessages.Models.V1;
+using DeviceCommons.DeviceMessages.Models;
namespace DeviceCommons.DeviceMessages.Abstractions
{
diff --git a/DeviceCommons/DeviceMessages/Abstractions/AbstractMessageParser.cs b/DeviceCommons/DeviceMessages/Abstractions/AbstractMessageParser.cs
index 996cbf8f77d1822b4336bf0ffdc0fe5aae058517..47c27600055e285246f988d95d686acf88e61239 100644
--- a/DeviceCommons/DeviceMessages/Abstractions/AbstractMessageParser.cs
+++ b/DeviceCommons/DeviceMessages/Abstractions/AbstractMessageParser.cs
@@ -1,6 +1,6 @@
using DeviceCommons.DataHandling.Compression;
using DeviceCommons.DataHandling.Formatters;
-using DeviceCommons.DeviceMessages.Models.V1;
+using DeviceCommons.DeviceMessages.Models;
namespace DeviceCommons.DeviceMessages.Abstractions
{
diff --git a/DeviceCommons/DeviceMessages/Abstractions/AbstractMessageSerializer.cs b/DeviceCommons/DeviceMessages/Abstractions/AbstractMessageSerializer.cs
index 47fa85a890cf3c177dd6dd79079feb42bb94eabd..7f119f783f0f4cf16b967690519455c7d325a612 100644
--- a/DeviceCommons/DeviceMessages/Abstractions/AbstractMessageSerializer.cs
+++ b/DeviceCommons/DeviceMessages/Abstractions/AbstractMessageSerializer.cs
@@ -1,6 +1,6 @@
using DeviceCommons.DataHandling.Compression;
using DeviceCommons.DataHandling.Formatters;
-using DeviceCommons.DeviceMessages.Models.V1;
+using DeviceCommons.DeviceMessages.Models;
using System.Buffers;
namespace DeviceCommons.DeviceMessages.Abstractions
@@ -13,17 +13,13 @@ namespace DeviceCommons.DeviceMessages.Abstractions
public Func? EncryptFunc { get; set; }
- public virtual void Serializer(
+ public abstract void Serializer(
ArrayBufferWriter writer, T message
- )
- {
- Model = message;
- Serializer(writer);
- }
+ );
- public abstract void Serializer(
+ public virtual void Serializer(
ArrayBufferWriter writer
- );
+ ) => Serializer(writer, Model);
public string Serializer(
ArrayBufferWriter writer, T message, bool isCompress
diff --git a/DeviceCommons/DeviceMessages/Abstractions/IMessageSerializer.cs b/DeviceCommons/DeviceMessages/Abstractions/IMessageSerializer.cs
index 4c2751e80ee077b045e7d08de6bd4e863551be02..4a8fe458c0a591a51e01e995870f9689ab0bdb68 100644
--- a/DeviceCommons/DeviceMessages/Abstractions/IMessageSerializer.cs
+++ b/DeviceCommons/DeviceMessages/Abstractions/IMessageSerializer.cs
@@ -1,4 +1,4 @@
-using DeviceCommons.DeviceMessages.Models.V1;
+using DeviceCommons.DeviceMessages.Models;
using System.Buffers;
namespace DeviceCommons.DeviceMessages.Abstractions
diff --git a/DeviceCommons/DeviceMessages/Builders/DeviceMessageBuilder.cs b/DeviceCommons/DeviceMessages/Builders/DeviceMessageBuilder.cs
index 6e23ca24065fbf92c0368749ea5b402ed1bbfee4..c48c408325c59420bbef9915a43ada707dfc2bb6 100644
--- a/DeviceCommons/DeviceMessages/Builders/DeviceMessageBuilder.cs
+++ b/DeviceCommons/DeviceMessages/Builders/DeviceMessageBuilder.cs
@@ -1,5 +1,6 @@
using DeviceCommons.DataHandling;
using DeviceCommons.DeviceMessages.Enums;
+using DeviceCommons.DeviceMessages.Models;
using DeviceCommons.DeviceMessages.Models.V1;
using DeviceCommons.Security;
using System.Buffers;
diff --git a/DeviceCommons/DeviceMessages/Models/V1/DeviceMessageHeader.cs b/DeviceCommons/DeviceMessages/Models/DeviceMessageHeader.cs
similarity index 91%
rename from DeviceCommons/DeviceMessages/Models/V1/DeviceMessageHeader.cs
rename to DeviceCommons/DeviceMessages/Models/DeviceMessageHeader.cs
index 1b8d7382977f071e02cd4fcca9750da6ff177c78..fa09c7d7720b12bfb98a97d032a7c2b8cb0960ef 100644
--- a/DeviceCommons/DeviceMessages/Models/V1/DeviceMessageHeader.cs
+++ b/DeviceCommons/DeviceMessages/Models/DeviceMessageHeader.cs
@@ -1,6 +1,6 @@
using DeviceCommons.DeviceMessages.Enums;
-namespace DeviceCommons.DeviceMessages.Models.V1
+namespace DeviceCommons.DeviceMessages.Models
{
public class DeviceMessageHeader : IDeviceMessageHeader
{
@@ -26,5 +26,7 @@ namespace DeviceCommons.DeviceMessages.Models.V1
{
get => (byte)((int)CRCType << 4 | (int)Reserve2 << 3 | (int)Reserve1 << 2 | (int)ValueType << 1 | (int)TimeStampFormat);
}
+
+ public int DataLength => 4;
}
}
diff --git a/DeviceCommons/DeviceMessages/Models/V1/IBase.cs b/DeviceCommons/DeviceMessages/Models/IBase.cs
similarity index 46%
rename from DeviceCommons/DeviceMessages/Models/V1/IBase.cs
rename to DeviceCommons/DeviceMessages/Models/IBase.cs
index 4594aab7aae42dc91f0cc0e795d6e19e5c951fd2..3cb75305c23d198a99eb51e19e89fc3cc33f6e16 100644
--- a/DeviceCommons/DeviceMessages/Models/V1/IBase.cs
+++ b/DeviceCommons/DeviceMessages/Models/IBase.cs
@@ -1,8 +1,9 @@
using System.Buffers;
-namespace DeviceCommons.DeviceMessages.Models.V1
+namespace DeviceCommons.DeviceMessages.Models
{
public interface IBase
{
+ int DataLength { get; }
}
}
diff --git a/DeviceCommons/DeviceMessages/Models/V1/IDeviceMessageHeader.cs b/DeviceCommons/DeviceMessages/Models/IDeviceMessageHeader.cs
similarity index 90%
rename from DeviceCommons/DeviceMessages/Models/V1/IDeviceMessageHeader.cs
rename to DeviceCommons/DeviceMessages/Models/IDeviceMessageHeader.cs
index 3ef83e32d03415e7ab450bf9cab19b7d615e84a3..06eadf4538902c435dbbad9bad37e6f895c7fc08 100644
--- a/DeviceCommons/DeviceMessages/Models/V1/IDeviceMessageHeader.cs
+++ b/DeviceCommons/DeviceMessages/Models/IDeviceMessageHeader.cs
@@ -1,6 +1,6 @@
using DeviceCommons.DeviceMessages.Enums;
-namespace DeviceCommons.DeviceMessages.Models.V1
+namespace DeviceCommons.DeviceMessages.Models
{
public interface IDeviceMessageHeader : IBase
{
diff --git a/DeviceCommons/DeviceMessages/Models/V1/DeviceMessage.cs b/DeviceCommons/DeviceMessages/Models/V1/DeviceMessage.cs
index 31f337a78934c211a606de76e8f9edf48e1abf0f..83c19a2b5b0af000bd82cca64daa9234a580f785 100644
--- a/DeviceCommons/DeviceMessages/Models/V1/DeviceMessage.cs
+++ b/DeviceCommons/DeviceMessages/Models/V1/DeviceMessage.cs
@@ -8,6 +8,8 @@
public IDeviceMessageChild? ChildDevice { get; set; } = new DeviceMessageChild();
+ public int DataLength => (Header?.DataLength ?? 0) + (MainDevice?.DataLength ?? 0) + (ChildDevice?.DataLength ?? 0);
+
public void Dispose()
{
DisposeMainDevice();
diff --git a/DeviceCommons/DeviceMessages/Models/V1/DeviceMessageChild.cs b/DeviceCommons/DeviceMessages/Models/V1/DeviceMessageChild.cs
index 7761cb3a973d0adb743dd973d6cd50c44de6d2eb..db72b684a1bcb932549180fe77aa125982c359c6 100644
--- a/DeviceCommons/DeviceMessages/Models/V1/DeviceMessageChild.cs
+++ b/DeviceCommons/DeviceMessages/Models/V1/DeviceMessageChild.cs
@@ -33,6 +33,8 @@ namespace DeviceCommons.DeviceMessages.Models.V1
}
}
+ public int DataLength => 1 + (ChildArray?.Sum(i => i.DataLength) ?? 0);
+
public void AddOrUpdateChild(IDeviceMessageInfo child)
{
if (string.IsNullOrEmpty(child.DID))
diff --git a/DeviceCommons/DeviceMessages/Models/V1/DeviceMessageInfo.cs b/DeviceCommons/DeviceMessages/Models/V1/DeviceMessageInfo.cs
index dc57a73bb5eb52f4ee21ca7ec3b537ee865d98bb..2c4611f86dad60a8c9d901f429f2f15a63020bc1 100644
--- a/DeviceCommons/DeviceMessages/Models/V1/DeviceMessageInfo.cs
+++ b/DeviceCommons/DeviceMessages/Models/V1/DeviceMessageInfo.cs
@@ -8,7 +8,7 @@ namespace DeviceCommons.DeviceMessages.Models.V1
{
}
- public byte Length { get => (byte)(DIDBytes?.Length ?? 0); }
+ public byte Length => (byte)(DIDBytes?.Length ?? 0);
public byte[]? DIDBytes { get => Encoding.UTF8.GetBytes(DID ?? ""); set => DID = Encoding.UTF8.GetString(value ?? []); }
@@ -17,5 +17,7 @@ namespace DeviceCommons.DeviceMessages.Models.V1
public byte DeviceType { get; set; } = 0x00;
public IDeviceMessageInfoReadings? Reading { get; set; }
+
+ public int DataLength => 2 + Length + (Reading?.DataLength ?? 0);
}
}
diff --git a/DeviceCommons/DeviceMessages/Models/V1/DeviceMessageInfoReading.cs b/DeviceCommons/DeviceMessages/Models/V1/DeviceMessageInfoReading.cs
index 2aab26956fad5671bf14d502d3d22ce014a95ea6..f43642278ac947ce2665f02af5a66675730a74cd 100644
--- a/DeviceCommons/DeviceMessages/Models/V1/DeviceMessageInfoReading.cs
+++ b/DeviceCommons/DeviceMessages/Models/V1/DeviceMessageInfoReading.cs
@@ -21,5 +21,7 @@
public short TimeOffset { get; set; } = 0;
public IDeviceMessageInfoReadingStates? State { get; set; }
+
+ public int DataLength => 2 + (State?.DataLength ?? 0);
}
}
diff --git a/DeviceCommons/DeviceMessages/Models/V1/DeviceMessageInfoReadingState.cs b/DeviceCommons/DeviceMessages/Models/V1/DeviceMessageInfoReadingState.cs
index 7938c0b1516771fe16cd595f33510cb4eb56efdc..73ab6fb613ab426952bd802f18ad9b1c3c982852 100644
--- a/DeviceCommons/DeviceMessages/Models/V1/DeviceMessageInfoReadingState.cs
+++ b/DeviceCommons/DeviceMessages/Models/V1/DeviceMessageInfoReadingState.cs
@@ -16,7 +16,7 @@ namespace DeviceCommons.DeviceMessages.Models.V1
if (ValueType != StateValueTypeEnum.String &&
ValueType != StateValueTypeEnum.Binary)
{
- Value = new byte[DeviceMessageUtilities.GetValueLength(ValueType,null)];
+ Value = new byte[DeviceMessageUtilities.GetValueLength(ValueType, null)];
}
else
{
@@ -25,7 +25,9 @@ namespace DeviceCommons.DeviceMessages.Models.V1
}
}
- public byte[] Value { get; set; } = Array.Empty();
+ public byte ValueLength => (StateValueTypeEnum)Type switch { StateValueTypeEnum.String => 1, StateValueTypeEnum.Binary => 2, _ => 0 };
+
+ public byte[] Value { get; set; } = [];
public object? ValueText
{
@@ -64,8 +66,12 @@ namespace DeviceCommons.DeviceMessages.Models.V1
}
public StateValueTypeEnum ValueType { get; set; } = StateValueTypeEnum.String;
+
+
public string? Metadata { get; set; }
+ public int DataLength => 2 + ValueLength + Value.Length;
+
public void Dispose()
{
if (Value != null)
diff --git a/DeviceCommons/DeviceMessages/Models/V1/DeviceMessageInfoReadingStates.cs b/DeviceCommons/DeviceMessages/Models/V1/DeviceMessageInfoReadingStates.cs
index 3843f744284faf124a06ad067296fbbd95e3e4fa..99a35f5c5ee93376f0459bd3aa394a310c1cd93e 100644
--- a/DeviceCommons/DeviceMessages/Models/V1/DeviceMessageInfoReadingStates.cs
+++ b/DeviceCommons/DeviceMessages/Models/V1/DeviceMessageInfoReadingStates.cs
@@ -7,6 +7,9 @@ namespace DeviceCommons.DeviceMessages.Models.V1
public byte Count => (byte)(StateArray?.Length ?? 0);
public IDeviceMessageInfoReadingState[]? StateArray { get; set; }
+
+ public int DataLength => 1 + (StateArray?.Sum(x => x.DataLength) ?? 0);
+
public void Dispose()
{
if (StateArray != null)
diff --git a/DeviceCommons/DeviceMessages/Models/V1/DeviceMessageInfoReadings.cs b/DeviceCommons/DeviceMessages/Models/V1/DeviceMessageInfoReadings.cs
index 192c10c07aaf7e56dfd070aef5897679dac3005b..29650d8b0b61f352b92c057a6f2beb4b6047e7bb 100644
--- a/DeviceCommons/DeviceMessages/Models/V1/DeviceMessageInfoReadings.cs
+++ b/DeviceCommons/DeviceMessages/Models/V1/DeviceMessageInfoReadings.cs
@@ -6,6 +6,9 @@ namespace DeviceCommons.DeviceMessages.Models.V1
{
public byte Count { get => (byte)(ReadingArray?.Length ?? 0); }
public IDeviceMessageInfoReading[]? ReadingArray { get; set; }
+
+ public int DataLength => 1 + (ReadingArray?.Sum(i => i.DataLength) ?? 0);
+
public void Dispose()
{
if (ReadingArray != null)
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageHeaderParser.cs b/DeviceCommons/DeviceMessages/Serialization/DeviceMessageHeaderParser.cs
similarity index 85%
rename from DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageHeaderParser.cs
rename to DeviceCommons/DeviceMessages/Serialization/DeviceMessageHeaderParser.cs
index db8b64bf5d8f48a3dc25dff56e210aeaccce5efe..7fb1b6401a047d09266b21ab3008e03e0a11e8d0 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageHeaderParser.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/DeviceMessageHeaderParser.cs
@@ -1,8 +1,8 @@
using DeviceCommons.DeviceMessages.Abstractions;
using DeviceCommons.DeviceMessages.Enums;
-using DeviceCommons.DeviceMessages.Models.V1;
+using DeviceCommons.DeviceMessages.Models;
-namespace DeviceCommons.DeviceMessages.Serialization.V1.Parsers
+namespace DeviceCommons.DeviceMessages.Serialization
{
public class DeviceMessageHeaderParser : AbstractMessageParser, IDeviceMessageHeaderParser
{
@@ -15,7 +15,7 @@ namespace DeviceCommons.DeviceMessages.Serialization.V1.Parsers
{
IDeviceMessageHeader model = new DeviceMessageHeader();
- model.Header = bytes[2..].ToArray();
+ model.Header = bytes[..2].ToArray();
model.Version = bytes[2];
model.TimeStampFormat = (TimeStampFormatEnum)(bytes[3] >> 0 & 0x01);
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageHeaderSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/DeviceMessageHeaderSerializer.cs
similarity index 82%
rename from DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageHeaderSerializer.cs
rename to DeviceCommons/DeviceMessages/Serialization/DeviceMessageHeaderSerializer.cs
index 43d5c4170e4bd8e572006abd3b50f6a51b3d0adb..5b5f589488c2782c3e9d9b56626017d2431ab1ea 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageHeaderSerializer.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/DeviceMessageHeaderSerializer.cs
@@ -1,9 +1,9 @@
using DeviceCommons.DataHandling;
using DeviceCommons.DeviceMessages.Abstractions;
-using DeviceCommons.DeviceMessages.Models.V1;
+using DeviceCommons.DeviceMessages.Models;
using System.Buffers;
-namespace DeviceCommons.DeviceMessages.Serialization.V1.Serializers
+namespace DeviceCommons.DeviceMessages.Serialization
{
public class DeviceMessageHeaderSerializer : AbstractMessageSerializer, IDeviceMessageHeaderSerializer
{
@@ -11,8 +11,6 @@ namespace DeviceCommons.DeviceMessages.Serialization.V1.Serializers
{
}
- public override void Serializer(ArrayBufferWriter writer) => Serializer(writer, Model);
-
private readonly static int HEADERLENGTH = 4;
public override void Serializer(ArrayBufferWriter writer, IDeviceMessageHeader model)
{
diff --git a/DeviceCommons/DeviceMessages/Serialization/DeviceMessageParser.cs b/DeviceCommons/DeviceMessages/Serialization/DeviceMessageParser.cs
index a9887c81d648d737d446f62310367f9b730e2e4a..618fe3beb4a07c0490b227f4959570b21d390bb8 100644
--- a/DeviceCommons/DeviceMessages/Serialization/DeviceMessageParser.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/DeviceMessageParser.cs
@@ -1,7 +1,9 @@
using DeviceCommons.DataHandling;
using DeviceCommons.DeviceMessages.Abstractions;
+using DeviceCommons.DeviceMessages.Enums;
using DeviceCommons.DeviceMessages.Models.V1;
using DeviceCommons.Exceptions;
+using DeviceCommons.Security;
namespace DeviceCommons.DeviceMessages.Serialization
{
@@ -23,15 +25,40 @@ namespace DeviceCommons.DeviceMessages.Serialization
Model.Header = DeviceMessageSerializerProvider.HeaderPar.Parser(headerBytes);
if (Model.Header == null) throw new InvalidOperationException("未初始化消息头");
- switch (Model.Header.Version)
+
+ if (Model.Header.Header == null ||
+ Model.Header.Header.Length != 2 ||
+ Model.Header.Header[0] != 0xC0 ||
+ Model.Header.Header[1] != 0xBF)
+ {
+ throw new InvalidOperationException("协议头错误");
+ }
+
+ int crcLength = CrcCalculator.GetCrcLength(Model.Header?.CRCType ?? CRCTypeEnum.CRC16);
+
+ if (crcLength > 0)
{
- case 0x01:
- _ = new V1.ProcessVersionData(Model, bytes);
- break;
- default:
- _ = new V1.ProcessVersionData(Model, bytes);
- break;
+
+ byte[] receivedCrc = bytes.Slice(bytes.Length - crcLength).ToArray();
+ byte[] dataForCrc = bytes[..(bytes.Length - crcLength)].ToArray();
+
+ byte[] calculatedCrc = CrcCalculator.CalculateCrcBytes(Model?.Header?.CRCType ?? CRCTypeEnum.None, dataForCrc);
+
+ if (!receivedCrc.SequenceEqual(calculatedCrc))
+ {
+ string received = BitConverter.ToString(receivedCrc);
+ string calculated = BitConverter.ToString(calculatedCrc);
+ throw new InvalidMessageException($"CRC validation failed. Expected 0x{calculated}, but received 0x{received}.");
+ }
}
+ IProcessVersion process = Model?.Header?.Version switch
+ {
+ 0x01 => new V1.ProcessVersionData(),
+ 0x02 => new V2.ProcessVersionData(),
+ _ => throw new ArgumentException($"版本号{Model?.Header?.Version}错误"),
+ };
+
+ process.Parser(Model, bytes[..^crcLength]);
}
catch (Exception ex)
{
diff --git a/DeviceCommons/DeviceMessages/Serialization/DeviceMessageSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/DeviceMessageSerializer.cs
index a237015bcd34921b96c35da7f0bfe7c60d11d417..74c8873a45ac8ff04a86cc267a1d595b963067e3 100644
--- a/DeviceCommons/DeviceMessages/Serialization/DeviceMessageSerializer.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/DeviceMessageSerializer.cs
@@ -1,8 +1,6 @@
-using DeviceCommons.DataHandling;
-using DeviceCommons.DeviceMessages.Abstractions;
+using DeviceCommons.DeviceMessages.Abstractions;
using DeviceCommons.DeviceMessages.Enums;
using DeviceCommons.DeviceMessages.Models.V1;
-using DeviceCommons.DeviceMessages.Serialization.V1.Serializers;
using DeviceCommons.Security;
using System.Buffers;
@@ -18,17 +16,20 @@ namespace DeviceCommons.DeviceMessages.Serialization
public override void Serializer(ArrayBufferWriter writer, IDeviceMessage model)
{
- _ = new DeviceMessageSerializer();
+ IProcessVersion process = model?.Header?.Version switch
+ {
+ 0x01 => new V1.ProcessVersionData(),
+ 0x02 => new V2.ProcessVersionData(),
+ _ => throw new ArgumentException($"版本号{model?.Header?.Version}错误"),
+ };
- new DeviceMessageChildSerializer().Serializer(writer, model.ChildDevice ?? new DeviceMessageChild());
- new DeviceMessageInfoSerializer().Serializer(writer, model.MainDevice ?? new DeviceMessageInfo());
- new DeviceMessageHeaderSerializer().Serializer(writer, model.Header ?? new DeviceMessageHeader());
+ writer.Write(process.Serializer(model));
byte[] bytes = writer.WrittenSpan.ToArray();
if (model.Header?.CRCType != CRCTypeEnum.None)
{
- writer.Write(CrcCalculator.CalculateCrcBytes(model.Header.CRCType, writer.WrittenSpan.ToArray()));
+ writer.Write(CrcCalculator.CalculateCrcBytes(model?.Header?.CRCType ?? CRCTypeEnum.CRC16, writer.WrittenSpan.ToArray()));
}
}
}
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/IDeviceMessageChildParser.cs b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageChildParser.cs
similarity index 75%
rename from DeviceCommons/DeviceMessages/Serialization/V1/Parsers/IDeviceMessageChildParser.cs
rename to DeviceCommons/DeviceMessages/Serialization/IDeviceMessageChildParser.cs
index ff536fa3933c94b178433850c3a5d113db42fb6a..c45561b4304b24ecf46018f96c3f33acae427f9a 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/IDeviceMessageChildParser.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageChildParser.cs
@@ -1,7 +1,7 @@
using DeviceCommons.DeviceMessages.Abstractions;
using DeviceCommons.DeviceMessages.Models.V1;
-namespace DeviceCommons.DeviceMessages.Serialization.V1.Parsers
+namespace DeviceCommons.DeviceMessages.Serialization
{
public interface IDeviceMessageChildParser : IMessageParser
{
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/IDeviceMessageChildSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageChildSerializer.cs
similarity index 75%
rename from DeviceCommons/DeviceMessages/Serialization/V1/Serializers/IDeviceMessageChildSerializer.cs
rename to DeviceCommons/DeviceMessages/Serialization/IDeviceMessageChildSerializer.cs
index 0f503be38b4984435baafb0917ef8b15e9c9c2fc..f6e6ba9a42e58bab845f6a5ae758a28069c9db1b 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/IDeviceMessageChildSerializer.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageChildSerializer.cs
@@ -1,7 +1,7 @@
using DeviceCommons.DeviceMessages.Abstractions;
using DeviceCommons.DeviceMessages.Models.V1;
-namespace DeviceCommons.DeviceMessages.Serialization.V1.Serializers
+namespace DeviceCommons.DeviceMessages.Serialization
{
public interface IDeviceMessageChildSerializer : IMessageSerializer
{
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/IDeviceMessageHeaderParser.cs b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageHeaderParser.cs
similarity index 58%
rename from DeviceCommons/DeviceMessages/Serialization/V1/Parsers/IDeviceMessageHeaderParser.cs
rename to DeviceCommons/DeviceMessages/Serialization/IDeviceMessageHeaderParser.cs
index 1bf0d6e430c3a130a5b0331f78a50538a2301bd4..5f2f93907f7058bbf44596e880433bd93c32233f 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/IDeviceMessageHeaderParser.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageHeaderParser.cs
@@ -1,7 +1,7 @@
using DeviceCommons.DeviceMessages.Abstractions;
-using DeviceCommons.DeviceMessages.Models.V1;
+using DeviceCommons.DeviceMessages.Models;
-namespace DeviceCommons.DeviceMessages.Serialization.V1.Parsers
+namespace DeviceCommons.DeviceMessages.Serialization
{
public interface IDeviceMessageHeaderParser : IMessageParser
{
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/IDeviceMessageHeaderSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageHeaderSerializer.cs
similarity index 58%
rename from DeviceCommons/DeviceMessages/Serialization/V1/Serializers/IDeviceMessageHeaderSerializer.cs
rename to DeviceCommons/DeviceMessages/Serialization/IDeviceMessageHeaderSerializer.cs
index 57f1a940e093ef6633ca84308734ffb26434cc6b..868f7bdff9bd3dca56ae4d54413fa0a96ae90767 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/IDeviceMessageHeaderSerializer.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageHeaderSerializer.cs
@@ -1,7 +1,7 @@
using DeviceCommons.DeviceMessages.Abstractions;
-using DeviceCommons.DeviceMessages.Models.V1;
+using DeviceCommons.DeviceMessages.Models;
-namespace DeviceCommons.DeviceMessages.Serialization.V1.Serializers
+namespace DeviceCommons.DeviceMessages.Serialization
{
public interface IDeviceMessageHeaderSerializer : IMessageSerializer
{
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/IDeviceMessageInfoParser.cs b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoParser.cs
similarity index 75%
rename from DeviceCommons/DeviceMessages/Serialization/V1/Parsers/IDeviceMessageInfoParser.cs
rename to DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoParser.cs
index b0715df80ca9e74a6f22765e289399f67827237f..565c2394ce0e3add57342bd9bd850e2b09bc88c7 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/IDeviceMessageInfoParser.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoParser.cs
@@ -1,7 +1,7 @@
using DeviceCommons.DeviceMessages.Abstractions;
using DeviceCommons.DeviceMessages.Models.V1;
-namespace DeviceCommons.DeviceMessages.Serialization.V1.Parsers
+namespace DeviceCommons.DeviceMessages.Serialization
{
public interface IDeviceMessageInfoParser : IMessageParser
{
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/IDeviceMessageInfoReadingParser.cs b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoReadingParser.cs
similarity index 76%
rename from DeviceCommons/DeviceMessages/Serialization/V1/Parsers/IDeviceMessageInfoReadingParser.cs
rename to DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoReadingParser.cs
index 63355ad3ea8e056ab7e4de44ab5ce7372f8c9ec8..d893a101941c360862759ff7b1ad242b01e72a7a 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/IDeviceMessageInfoReadingParser.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoReadingParser.cs
@@ -1,7 +1,7 @@
using DeviceCommons.DeviceMessages.Abstractions;
using DeviceCommons.DeviceMessages.Models.V1;
-namespace DeviceCommons.DeviceMessages.Serialization.V1.Parsers
+namespace DeviceCommons.DeviceMessages.Serialization
{
public interface IDeviceMessageInfoReadingParser : IMessageParser
{
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/IDeviceMessageInfoReadingSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoReadingSerializer.cs
similarity index 76%
rename from DeviceCommons/DeviceMessages/Serialization/V1/Serializers/IDeviceMessageInfoReadingSerializer.cs
rename to DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoReadingSerializer.cs
index c827406c0799bcc473c48b21f030f47b8a330687..ec10273fe160270f6b43cdfaa3d036c566973c32 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/IDeviceMessageInfoReadingSerializer.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoReadingSerializer.cs
@@ -1,7 +1,7 @@
using DeviceCommons.DeviceMessages.Abstractions;
using DeviceCommons.DeviceMessages.Models.V1;
-namespace DeviceCommons.DeviceMessages.Serialization.V1.Serializers
+namespace DeviceCommons.DeviceMessages.Serialization
{
public interface IDeviceMessageInfoReadingSerializer : IMessageSerializer
{
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/IDeviceMessageInfoReadingStateParser.cs b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoReadingStateParser.cs
similarity index 77%
rename from DeviceCommons/DeviceMessages/Serialization/V1/Parsers/IDeviceMessageInfoReadingStateParser.cs
rename to DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoReadingStateParser.cs
index 90b3373c5c774821b4935323bfb471f76c88abc3..ceaee675c7d0ba93325d40d26e9f092aa086eff4 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/IDeviceMessageInfoReadingStateParser.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoReadingStateParser.cs
@@ -1,7 +1,7 @@
using DeviceCommons.DeviceMessages.Abstractions;
using DeviceCommons.DeviceMessages.Models.V1;
-namespace DeviceCommons.DeviceMessages.Serialization.V1.Parsers
+namespace DeviceCommons.DeviceMessages.Serialization
{
public interface IDeviceMessageInfoReadingStateParser : IMessageParser
{
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/IDeviceMessageInfoReadingStateSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoReadingStateSerializer.cs
similarity index 77%
rename from DeviceCommons/DeviceMessages/Serialization/V1/Serializers/IDeviceMessageInfoReadingStateSerializer.cs
rename to DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoReadingStateSerializer.cs
index b976f581dbd7af176f0363057280b98841501a8d..6a50b6831a26d09947874fb07c2a7af5c8cbaf3c 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/IDeviceMessageInfoReadingStateSerializer.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoReadingStateSerializer.cs
@@ -1,7 +1,7 @@
using DeviceCommons.DeviceMessages.Abstractions;
using DeviceCommons.DeviceMessages.Models.V1;
-namespace DeviceCommons.DeviceMessages.Serialization.V1.Serializers
+namespace DeviceCommons.DeviceMessages.Serialization
{
public interface IDeviceMessageInfoReadingStateSerializer : IMessageSerializer
{
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/IDeviceMessageInfoReadingStatesParser.cs b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoReadingStatesParser.cs
similarity index 77%
rename from DeviceCommons/DeviceMessages/Serialization/V1/Parsers/IDeviceMessageInfoReadingStatesParser.cs
rename to DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoReadingStatesParser.cs
index 745fe5f69c915509822a9b731ba2aade7a6423df..b5dfb6742c01e591437ebc0819c71fd0d96afde4 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/IDeviceMessageInfoReadingStatesParser.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoReadingStatesParser.cs
@@ -1,7 +1,7 @@
using DeviceCommons.DeviceMessages.Abstractions;
using DeviceCommons.DeviceMessages.Models.V1;
-namespace DeviceCommons.DeviceMessages.Serialization.V1.Parsers
+namespace DeviceCommons.DeviceMessages.Serialization
{
public interface IDeviceMessageInfoReadingStatesParser : IMessageParser
{
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/IDeviceMessageInfoReadingStatesSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoReadingStatesSerializer.cs
similarity index 77%
rename from DeviceCommons/DeviceMessages/Serialization/V1/Serializers/IDeviceMessageInfoReadingStatesSerializer.cs
rename to DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoReadingStatesSerializer.cs
index 79738c6c45977e615d0b5b337d4c416116f0c645..c8ac1890cece4227fa7a85cb7f29c1275b1db06e 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/IDeviceMessageInfoReadingStatesSerializer.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoReadingStatesSerializer.cs
@@ -1,7 +1,7 @@
using DeviceCommons.DeviceMessages.Abstractions;
using DeviceCommons.DeviceMessages.Models.V1;
-namespace DeviceCommons.DeviceMessages.Serialization.V1.Serializers
+namespace DeviceCommons.DeviceMessages.Serialization
{
public interface IDeviceMessageInfoReadingStatesSerializer : IMessageSerializer
{
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/IDeviceMessageInfoReadingsParser.cs b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoReadingsParser.cs
similarity index 76%
rename from DeviceCommons/DeviceMessages/Serialization/V1/Parsers/IDeviceMessageInfoReadingsParser.cs
rename to DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoReadingsParser.cs
index f0c1d1a2cfb8ae70e8191850d08f3c8c3526bddf..fd8f4c09d3555df7da8efa6c8f875ee379404ec9 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/IDeviceMessageInfoReadingsParser.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoReadingsParser.cs
@@ -1,7 +1,7 @@
using DeviceCommons.DeviceMessages.Abstractions;
using DeviceCommons.DeviceMessages.Models.V1;
-namespace DeviceCommons.DeviceMessages.Serialization.V1.Parsers
+namespace DeviceCommons.DeviceMessages.Serialization
{
public interface IDeviceMessageInfoReadingsParser : IMessageParser
{
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/IDeviceMessageInfoReadingsSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoReadingsSerializer.cs
similarity index 76%
rename from DeviceCommons/DeviceMessages/Serialization/V1/Serializers/IDeviceMessageInfoReadingsSerializer.cs
rename to DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoReadingsSerializer.cs
index 7d962efc73439bfbba4468efc8245dd9379cebb4..41e1e09f1504f369d339006b34c32275a502fafd 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/IDeviceMessageInfoReadingsSerializer.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoReadingsSerializer.cs
@@ -1,7 +1,7 @@
using DeviceCommons.DeviceMessages.Abstractions;
using DeviceCommons.DeviceMessages.Models.V1;
-namespace DeviceCommons.DeviceMessages.Serialization.V1.Serializers
+namespace DeviceCommons.DeviceMessages.Serialization
{
public interface IDeviceMessageInfoReadingsSerializer : IMessageSerializer
{
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/IDeviceMessageInfoSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoSerializer.cs
similarity index 75%
rename from DeviceCommons/DeviceMessages/Serialization/V1/Serializers/IDeviceMessageInfoSerializer.cs
rename to DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoSerializer.cs
index 7b12a71cbd108a387493d4249b2ae1d6cf99df15..d117865ae73bca86539ec10a20a7108ea2d36459 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/IDeviceMessageInfoSerializer.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/IDeviceMessageInfoSerializer.cs
@@ -1,7 +1,7 @@
using DeviceCommons.DeviceMessages.Abstractions;
using DeviceCommons.DeviceMessages.Models.V1;
-namespace DeviceCommons.DeviceMessages.Serialization.V1.Serializers
+namespace DeviceCommons.DeviceMessages.Serialization
{
public interface IDeviceMessageInfoSerializer : IMessageSerializer
{
diff --git a/DeviceCommons/DeviceMessages/Serialization/IProcessVersion.cs b/DeviceCommons/DeviceMessages/Serialization/IProcessVersion.cs
new file mode 100644
index 0000000000000000000000000000000000000000..f036a3c755e347937c2267c16dd7c2c53bfe026c
--- /dev/null
+++ b/DeviceCommons/DeviceMessages/Serialization/IProcessVersion.cs
@@ -0,0 +1,11 @@
+using DeviceCommons.DeviceMessages.Models.V1;
+
+namespace DeviceCommons.DeviceMessages.Serialization
+{
+ public interface IProcessVersion
+ {
+ void Parser(IDeviceMessage model, ReadOnlySpan bytes);
+ ReadOnlySpan Serializer(IDeviceMessage model);
+
+ }
+}
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageChildParser.cs b/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageChildParser.cs
index bc88c1a3ce3c7b5c8801e09c42c15f80b59502b8..bd17337c3abc5e836965b96dc2c2895f8c1dc5f3 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageChildParser.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageChildParser.cs
@@ -41,7 +41,7 @@ namespace DeviceCommons.DeviceMessages.Serialization.V1.Parsers
{
DID = deviceId,
DeviceType = deviceType,
- Reading = DeviceMessageSerializerProvider.InfoReadingsPar.Parser(bytes.Slice(currentIndex, readingsDataLength))
+ Reading = DeviceMessageSerializerProvider.InfoReadingsV1Par.Parser(bytes.Slice(currentIndex, readingsDataLength))
};
childList.Add(childDevice);
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageInfoParser.cs b/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageInfoParser.cs
index e4f8228aaeeec649a9dd884c304244cf003b978c..51a4d55928611c93d506e9104fe698aef82d3767 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageInfoParser.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageInfoParser.cs
@@ -33,7 +33,7 @@ namespace DeviceCommons.DeviceMessages.Serialization.V1.Parsers
int readingsDataLength = bytes.Length - currentIndex;
if (readingsDataLength > 0)
{
- model.Reading ??= DeviceMessageSerializerProvider.InfoReadingsPar.Parser(bytes.Slice(currentIndex, readingsDataLength));
+ model.Reading ??= DeviceMessageSerializerProvider.InfoReadingsV1Par.Parser(bytes.Slice(currentIndex, readingsDataLength));
}
else model.Reading = new DeviceMessageInfoReadings();
return model;
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageInfoReadingParser.cs b/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageInfoReadingParser.cs
index 049dd77b084f9f21e9046d55d06f8286003a0e8b..17eba78ae671d8a55cb9dec206da3034e58d84b1 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageInfoReadingParser.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageInfoReadingParser.cs
@@ -19,7 +19,7 @@ namespace DeviceCommons.DeviceMessages.Serialization.V1.Parsers
model.Offset = bytes[..2].ToArray();
- model.State = DeviceMessageSerializerProvider.InfoReadingStatesPar.Parser(bytes[2..]);
+ model.State = DeviceMessageSerializerProvider.InfoReadingStatesV1Par.Parser(bytes[2..]);
return model;
}
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageInfoReadingStatesParser.cs b/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageInfoReadingStatesParser.cs
index 261c81ad6f4cc34fcf39f2f8babd38c0e685f95d..0a46dae46a556ef7972389932a6fb730132aee14 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageInfoReadingStatesParser.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageInfoReadingStatesParser.cs
@@ -33,7 +33,7 @@ namespace DeviceCommons.DeviceMessages.Serialization.V1.Parsers
byte[] stateData = bytes.Slice(currentIndex, valueLength).ToArray();
- model.StateArray[i] = DeviceMessageSerializerProvider.InfoReadingStatePar.Parser(stateData);
+ model.StateArray[i] = DeviceMessageSerializerProvider.InfoReadingStateV1Par.Parser(stateData);
currentIndex += valueLength;
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageInfoReadingsParser.cs b/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageInfoReadingsParser.cs
index 1f961262e9d80622da5aca5d3bfefc92092cab90..c40888a477dfac97eb64dc9b8da39f386c313355 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageInfoReadingsParser.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageInfoReadingsParser.cs
@@ -30,7 +30,7 @@ namespace DeviceCommons.DeviceMessages.Serialization.V1.Parsers
}
int totalReadingLength = 2 + stateDataLength;
model.ReadingArray[i] =
- DeviceMessageSerializerProvider.InfoReadingPar.Parser(
+ DeviceMessageSerializerProvider.InfoReadingV1Par.Parser(
bytes.Slice(currentIndex, totalReadingLength
));
currentIndex += totalReadingLength;
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/ProcessVersionData.cs b/DeviceCommons/DeviceMessages/Serialization/V1/ProcessVersionData.cs
index bc46bfbae993324e0835e2e55854c6210c958fe0..f157f0824f766eeec429529024f35c9cec3debb0 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/ProcessVersionData.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/V1/ProcessVersionData.cs
@@ -1,71 +1,61 @@
using DeviceCommons.DataHandling;
-using DeviceCommons.DeviceMessages.Enums;
+using DeviceCommons.DeviceMessages.Models;
using DeviceCommons.DeviceMessages.Models.V1;
-using DeviceCommons.Exceptions;
-using DeviceCommons.Security;
+using DeviceCommons.DeviceMessages.Serialization.V1.Serializers;
+using System.Buffers;
namespace DeviceCommons.DeviceMessages.Serialization.V1
{
- public class ProcessVersionData
+ public class ProcessVersionData : IProcessVersion
{
- public ProcessVersionData(IDeviceMessage model, ReadOnlySpan bytes)
+ public void Parser(IDeviceMessage model, ReadOnlySpan bytes)
{
- if (model == null) throw new ArgumentNullException("model");
- if (model.Header == null) throw new ArgumentNullException("model.Header");
-
- int crcLength = CrcCalculator.GetCrcLength(model.Header?.CRCType ?? CRCTypeEnum.CRC16);
-
- if (crcLength > 0)
- {
-
- byte[] receivedCrc = bytes.Slice(bytes.Length - crcLength).ToArray();
- byte[] dataForCrc = bytes[..(bytes.Length - crcLength)].ToArray();
-
- byte[] calculatedCrc = CrcCalculator.CalculateCrcBytes(model.Header.CRCType, dataForCrc);
-
-
- if (!receivedCrc.SequenceEqual(calculatedCrc))
- {
- string received = BitConverter.ToString(receivedCrc);
- string calculated = BitConverter.ToString(calculatedCrc);
- throw new InvalidMessageException($"CRC validation failed. Expected 0x{calculated}, but received 0x{received}.");
- }
- }
+ ArgumentNullException.ThrowIfNull(model);
int index = 4;
int mainDeviceLength = CalculateMainDeviceDataLength(bytes, index);
if (mainDeviceLength > 0)
{
byte[] mainDeviceData = bytes.Slice(index, mainDeviceLength).ToArray();
- model.MainDevice = DeviceMessageSerializerProvider.InfoPar.Parser(mainDeviceData);
+ model.MainDevice = DeviceMessageSerializerProvider.InfoV1Par.Parser(mainDeviceData);
index += mainDeviceLength;
}
- int childDeviceLength = bytes.Length - index - crcLength;
+ int childDeviceLength = bytes.Length - index;
if (childDeviceLength < 0) throw new ArgumentException("Invalid data length for child devices");
if (childDeviceLength > 0)
{
byte[] childDeviceData = bytes.Slice(index, childDeviceLength).ToArray();
- model.ChildDevice = DeviceMessageSerializerProvider.ChildPar.Parser(childDeviceData);
+ model.ChildDevice = DeviceMessageSerializerProvider.ChildV1Par.Parser(childDeviceData);
index += childDeviceLength;
}
}
+ public ReadOnlySpan Serializer(IDeviceMessage model)
+ {
+ ArgumentNullException.ThrowIfNull(model);
+ var arrayBufferWriter = new ArrayBufferWriter();
+ DeviceMessageSerializerProvider.ChildV1Ser.Serializer(arrayBufferWriter, model.ChildDevice ?? new DeviceMessageChild());
+ DeviceMessageSerializerProvider.InfoV1Ser.Serializer(arrayBufferWriter, model.MainDevice ?? new DeviceMessageInfo());
+ DeviceMessageSerializerProvider.HeaderSer.Serializer(arrayBufferWriter, model.Header ?? new DeviceMessageHeader());
+ return arrayBufferWriter.WrittenSpan;
+ }
+
private static int CalculateMainDeviceDataLength(ReadOnlySpan bytes, int startIndex)
{
int index = startIndex;
if (index >= bytes.Length) return 0;
byte didLength = bytes[index++];
- index += didLength;
+ index += didLength;
if (index >= bytes.Length) return index - startIndex;
- index++;
+ index++;
if (index >= bytes.Length) return index - startIndex;
byte readingCount = bytes[index++];
for (int i = 0; i < readingCount; i++)
{
if (index + 2 > bytes.Length) return bytes.Length - startIndex;
- index += 2;
+ index += 2;
if (index >= bytes.Length) break;
byte stateCount = bytes[index++];
for (int j = 0; j < stateCount; j++)
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageChildSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageChildSerializer.cs
index 78a88489bcc5ad8d9978c08f5d761ff1c7a9af6d..4cdafecfd6d67cf3b921c75a617f2980dec1e4d4 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageChildSerializer.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageChildSerializer.cs
@@ -10,9 +10,6 @@ namespace DeviceCommons.DeviceMessages.Serialization.V1.Serializers
{
}
- public override void Serializer(ArrayBufferWriter writer) => Serializer(writer, Model);
-
-
public override void Serializer(ArrayBufferWriter writer, IDeviceMessageChild model)
{
ArgumentNullException.ThrowIfNull(model);
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageInfoReadingSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageInfoReadingSerializer.cs
index 9e4978ed0c28dae6259c84ad2f72961662a70f8c..0c37650b168d26455ad0e44ddd63a7177b43e35d 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageInfoReadingSerializer.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageInfoReadingSerializer.cs
@@ -10,8 +10,6 @@ namespace DeviceCommons.DeviceMessages.Serialization.V1.Serializers
{
}
- public override void Serializer(ArrayBufferWriter writer) => Serializer(writer, Model);
-
public override void Serializer(ArrayBufferWriter writer, IDeviceMessageInfoReading model)
{
ArgumentNullException.ThrowIfNull(model);
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageInfoReadingStateSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageInfoReadingStateSerializer.cs
index 2a798e7a9c1947be338c74ab94a7935b64ce0fef..400ada75f5164f6c1dc06e898038edf16057555c 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageInfoReadingStateSerializer.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageInfoReadingStateSerializer.cs
@@ -11,9 +11,6 @@ namespace DeviceCommons.DeviceMessages.Serialization.V1.Serializers
public DeviceMessageInfoReadingStateSerializer() : base(new DeviceMessageInfoReadingState())
{
}
-
- public override void Serializer(ArrayBufferWriter writer) => Serializer(writer, Model);
-
public override void Serializer(ArrayBufferWriter writer, IDeviceMessageInfoReadingState model)
{
if (model == null) throw new ArgumentNullException(nameof(model));
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageInfoReadingStatesSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageInfoReadingStatesSerializer.cs
index 765e7dd1acb3f88434ef0c514541103a6451b665..42556258246d2833fb8905b23a5f9cf5772aaebe 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageInfoReadingStatesSerializer.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageInfoReadingStatesSerializer.cs
@@ -9,10 +9,6 @@ namespace DeviceCommons.DeviceMessages.Serialization.V1.Serializers
public DeviceMessageInfoReadingStatesSerializer() : base(new DeviceMessageInfoReadingStates())
{
}
-
- public override void Serializer(ArrayBufferWriter writer) => Serializer(writer, Model);
-
-
public override void Serializer(ArrayBufferWriter writer, IDeviceMessageInfoReadingStates model)
{
ArgumentNullException.ThrowIfNull(model);
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageInfoReadingsSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageInfoReadingsSerializer.cs
index 3661c1e2d873b38700c8681380a8626ba29fa6cb..74f0c497f4f29961d9592a8d84f045dbdada14fb 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageInfoReadingsSerializer.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageInfoReadingsSerializer.cs
@@ -10,8 +10,6 @@ namespace DeviceCommons.DeviceMessages.Serialization.V1.Serializers
{
}
- public override void Serializer(ArrayBufferWriter writer) => Serializer(writer, Model);
-
public override void Serializer(ArrayBufferWriter writer, IDeviceMessageInfoReadings model)
{
ArgumentNullException.ThrowIfNull(model);
diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageInfoSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageInfoSerializer.cs
index 70122ae7088dcc632927ba38c8e0e23c9260b62c..9191b1361d2b9b63b66601b838b8f72ec0474bec 100644
--- a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageInfoSerializer.cs
+++ b/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageInfoSerializer.cs
@@ -10,8 +10,6 @@ namespace DeviceCommons.DeviceMessages.Serialization.V1.Serializers
{
}
- public override void Serializer(ArrayBufferWriter writer) => Serializer(writer, Model);
-
public override void Serializer(ArrayBufferWriter writer, IDeviceMessageInfo model)
{
if (string.IsNullOrEmpty(model.DID))
diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageChildParser.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageChildParser.cs
new file mode 100644
index 0000000000000000000000000000000000000000..a21ab885c580c802473f269ef54e3ef150ef9cf7
--- /dev/null
+++ b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageChildParser.cs
@@ -0,0 +1,29 @@
+using DeviceCommons.DataHandling;
+using DeviceCommons.DeviceMessages.Abstractions;
+using DeviceCommons.DeviceMessages.Models.V1;
+using System.Text;
+
+namespace DeviceCommons.DeviceMessages.Serialization.V2.Parsers
+{
+ public class DeviceMessageChildParser : AbstractMessageParser, IDeviceMessageChildParser
+ {
+ public DeviceMessageChildParser() : base(new DeviceMessageChild())
+ {
+ }
+
+ public override IDeviceMessageChild Parser(ReadOnlySpan bytes)
+ {
+ byte count = bytes[0];
+ IDeviceMessageChild model = new DeviceMessageChild();
+ var childArray = new IDeviceMessageInfo[count];
+ var bytesTemp = bytes[1..];
+ for (int i = 0; i < count; i++)
+ {
+ childArray[i] = DeviceMessageSerializerProvider.InfoV2Par.Parser(bytesTemp);
+ bytesTemp = bytesTemp[childArray[i].DataLength..];
+ }
+ model.ChildArray = childArray;
+ return model;
+ }
+ }
+}
diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoParser.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoParser.cs
new file mode 100644
index 0000000000000000000000000000000000000000..a365bdb1679a7163335f73fcbe17d08921c68183
--- /dev/null
+++ b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoParser.cs
@@ -0,0 +1,26 @@
+using DeviceCommons.DataHandling;
+using DeviceCommons.DeviceMessages.Abstractions;
+using DeviceCommons.DeviceMessages.Models.V1;
+
+namespace DeviceCommons.DeviceMessages.Serialization.V2.Parsers
+{
+ public class DeviceMessageInfoParser : AbstractMessageParser, IDeviceMessageInfoParser
+ {
+ public DeviceMessageInfoParser() : base(new DeviceMessageInfo())
+ {
+
+ }
+
+ public override IDeviceMessageInfo Parser(ReadOnlySpan bytes)
+ {
+ int currentIndex = 1;
+ IDeviceMessageInfo model = new DeviceMessageInfo();
+ model.DIDBytes = bytes.Slice(currentIndex, bytes[0]).ToArray();
+ currentIndex += bytes[0];
+ model.DeviceType = bytes.Slice(currentIndex, 1)[0];
+ currentIndex++;
+ model.Reading = DeviceMessageSerializerProvider.InfoReadingsV2Par.Parser(bytes[currentIndex..]);
+ return model;
+ }
+ }
+}
diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingParser.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingParser.cs
new file mode 100644
index 0000000000000000000000000000000000000000..6b595384047f6c86690df25af1877ff9d3beb1c7
--- /dev/null
+++ b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingParser.cs
@@ -0,0 +1,23 @@
+using DeviceCommons.DataHandling;
+using DeviceCommons.DeviceMessages.Abstractions;
+using DeviceCommons.DeviceMessages.Models.V1;
+
+namespace DeviceCommons.DeviceMessages.Serialization.V2.Parsers
+{
+ public class DeviceMessageInfoReadingParser : AbstractMessageParser, IDeviceMessageInfoReadingParser
+ {
+ public DeviceMessageInfoReadingParser() : base(new DeviceMessageInfoReading())
+ {
+ }
+
+ public override IDeviceMessageInfoReading Parser(ReadOnlySpan bytes)
+ {
+ IDeviceMessageInfoReading model = new DeviceMessageInfoReading
+ {
+ Offset = bytes[..2].ToArray(),
+ State = DeviceMessageSerializerProvider.InfoReadingStatesV2Par.Parser(bytes[2..])
+ };
+ return model;
+ }
+ }
+}
diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingStateParser.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingStateParser.cs
new file mode 100644
index 0000000000000000000000000000000000000000..9696d19fcb41f5b91d3e0e3ca0dc55c25e69159b
--- /dev/null
+++ b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingStateParser.cs
@@ -0,0 +1,39 @@
+using DeviceCommons.DataHandling;
+using DeviceCommons.DeviceMessages.Abstractions;
+using DeviceCommons.DeviceMessages.Enums;
+using DeviceCommons.DeviceMessages.Models.V1;
+
+namespace DeviceCommons.DeviceMessages.Serialization.V2.Parsers
+{
+ public class DeviceMessageInfoReadingStateParser : AbstractMessageParser, IDeviceMessageInfoReadingStateParser
+ {
+ public DeviceMessageInfoReadingStateParser() : base(new DeviceMessageInfoReadingState())
+ {
+ }
+
+ public override IDeviceMessageInfoReadingState Parser(ReadOnlySpan bytes)
+ {
+ IDeviceMessageInfoReadingState model = new DeviceMessageInfoReadingState
+ {
+ SID = bytes[0],
+ Type = bytes[1]
+ };
+ StateValueTypeEnum type = (StateValueTypeEnum)bytes[1];
+ var valueLength = DeviceMessageUtilities.GetValueLength((StateValueTypeEnum)bytes[1], bytes, 2);
+ if(type == StateValueTypeEnum.String)
+ {
+ model.Value = bytes.Slice(3, valueLength).ToArray();
+ }
+ else if(type == StateValueTypeEnum.Binary)
+ {
+ model.Value = bytes.Slice(4, valueLength).ToArray();
+ }
+ else
+ {
+ model.Value = bytes.Slice(2, valueLength).ToArray();
+ }
+
+ return model;
+ }
+ }
+}
diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingStatesParser.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingStatesParser.cs
new file mode 100644
index 0000000000000000000000000000000000000000..d1f574f27ed796b2278ecd5e165dbc11f293a53a
--- /dev/null
+++ b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingStatesParser.cs
@@ -0,0 +1,27 @@
+using DeviceCommons.DataHandling;
+using DeviceCommons.DeviceMessages.Abstractions;
+using DeviceCommons.DeviceMessages.Models.V1;
+
+namespace DeviceCommons.DeviceMessages.Serialization.V2.Parsers
+{
+ public class DeviceMessageInfoReadingStatesParser : AbstractMessageParser, IDeviceMessageInfoReadingStatesParser
+ {
+ public DeviceMessageInfoReadingStatesParser() : base(new DeviceMessageInfoReadingStates())
+ {
+ }
+
+ public override IDeviceMessageInfoReadingStates Parser(ReadOnlySpan bytes)
+ {
+ byte count = bytes[0];
+ IDeviceMessageInfoReadingStates model = new DeviceMessageInfoReadingStates();
+ model.StateArray = new IDeviceMessageInfoReadingState[count];
+ var bytesTemp = bytes[1..];
+ for (int i = 0; i < count; i++)
+ {
+ model.StateArray[i] = DeviceMessageSerializerProvider.InfoReadingStateV2Par.Parser(bytesTemp);
+ bytesTemp = bytesTemp[model.StateArray[i].DataLength..];
+ }
+ return model;
+ }
+ }
+}
diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingsParser.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingsParser.cs
new file mode 100644
index 0000000000000000000000000000000000000000..52e85772b1fc184b3a12d15a2e420197f0153d2a
--- /dev/null
+++ b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingsParser.cs
@@ -0,0 +1,27 @@
+using DeviceCommons.DataHandling;
+using DeviceCommons.DeviceMessages.Abstractions;
+using DeviceCommons.DeviceMessages.Models.V1;
+
+namespace DeviceCommons.DeviceMessages.Serialization.V2.Parsers
+{
+ public class DeviceMessageInfoReadingsParser : AbstractMessageParser, IDeviceMessageInfoReadingsParser
+ {
+ public DeviceMessageInfoReadingsParser() : base(new DeviceMessageInfoReadings())
+ {
+ }
+
+ public override IDeviceMessageInfoReadings Parser(ReadOnlySpan bytes)
+ {
+ byte count = bytes[0];
+ IDeviceMessageInfoReadings model = new DeviceMessageInfoReadings();
+ model.ReadingArray = new IDeviceMessageInfoReading[count];
+ var bytesTemp = bytes[1..];
+ for (int i = 0; i < count; i++)
+ {
+ model.ReadingArray[i] = DeviceMessageSerializerProvider.InfoReadingV2Par.Parser(bytesTemp);
+ bytesTemp = bytesTemp[model.ReadingArray[i].DataLength..];
+ }
+ return model;
+ }
+ }
+}
diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/ProcessVersionData.cs b/DeviceCommons/DeviceMessages/Serialization/V2/ProcessVersionData.cs
new file mode 100644
index 0000000000000000000000000000000000000000..453e987b21f4d79302577918ae165174c3e92951
--- /dev/null
+++ b/DeviceCommons/DeviceMessages/Serialization/V2/ProcessVersionData.cs
@@ -0,0 +1,38 @@
+using DeviceCommons.DeviceMessages.Models;
+using DeviceCommons.DeviceMessages.Models.V1;
+using DeviceCommons.DeviceMessages.Serialization.V2.Serializers;
+using DeviceCommons.DeviceMessages.Serialization.V2.Parsers;
+using System.Buffers;
+using DeviceCommons.DataHandling;
+
+namespace DeviceCommons.DeviceMessages.Serialization.V2
+{
+ public class ProcessVersionData : IProcessVersion
+ {
+ public void Parser(IDeviceMessage model, ReadOnlySpan bytes)
+ {
+ ArgumentNullException.ThrowIfNull(model);
+ var deviceTemp = DeviceMessageSerializerProvider.ChildV2Par.Parser(bytes[4..]);
+ ArgumentNullException.ThrowIfNull(deviceTemp.ChildArray);
+ model.MainDevice = deviceTemp.ChildArray[0];
+ model.ChildDevice ??= new DeviceMessageChild();
+ model.ChildDevice.ChildArray = deviceTemp.ChildArray.AsSpan()[1..].ToArray();
+ }
+
+ public ReadOnlySpan Serializer(IDeviceMessage model)
+ {
+ ArgumentNullException.ThrowIfNull(model);
+ ArgumentNullException.ThrowIfNull(model.MainDevice);
+ ArgumentNullException.ThrowIfNull(model.ChildDevice);
+ ArgumentNullException.ThrowIfNull(model.ChildDevice.ChildArray);
+ var childTemp = new IDeviceMessageInfo[model.ChildDevice.Count + 1];
+ childTemp[0] = model.MainDevice;
+ model.ChildDevice.ChildArray.CopyTo(childTemp, 1);
+ model.ChildDevice.ChildArray = childTemp;
+ var arrayBufferWriter = new ArrayBufferWriter();
+ DeviceMessageSerializerProvider.HeaderSer.Serializer(arrayBufferWriter, model.Header ?? new DeviceMessageHeader());
+ DeviceMessageSerializerProvider.ChildV2Ser.Serializer(arrayBufferWriter, model.ChildDevice ?? new DeviceMessageChild());
+ return arrayBufferWriter.WrittenSpan;
+ }
+ }
+}
diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageChildSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageChildSerializer.cs
new file mode 100644
index 0000000000000000000000000000000000000000..c0593ca4d0d3e2b0232faa2c56aa49d5eb161756
--- /dev/null
+++ b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageChildSerializer.cs
@@ -0,0 +1,28 @@
+using DeviceCommons.DataHandling;
+using DeviceCommons.DeviceMessages.Abstractions;
+using DeviceCommons.DeviceMessages.Models.V1;
+using System.Buffers;
+
+namespace DeviceCommons.DeviceMessages.Serialization.V2.Serializers
+{
+ public class DeviceMessageChildSerializer : AbstractMessageSerializer, IDeviceMessageChildSerializer
+ {
+ public DeviceMessageChildSerializer() : base(new DeviceMessageChild())
+ {
+ }
+
+ public override void Serializer(ArrayBufferWriter writer, IDeviceMessageChild message)
+ {
+ ArgumentNullException.ThrowIfNull(message);
+ ArgumentNullException.ThrowIfNull(message.ChildArray);
+ writer.Write([message.Count]);
+ if (message.Count > 0)
+ {
+ foreach (var child in message.ChildArray)
+ {
+ DeviceMessageSerializerProvider.InfoV2Ser.Serializer(writer, child);
+ }
+ }
+ }
+ }
+}
diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageHeaderSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageHeaderSerializer.cs
new file mode 100644
index 0000000000000000000000000000000000000000..d6b9b8eb35612ce302fb0d6e872b51c18da79547
--- /dev/null
+++ b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageHeaderSerializer.cs
@@ -0,0 +1,21 @@
+using DeviceCommons.DeviceMessages.Abstractions;
+using DeviceCommons.DeviceMessages.Models;
+using System.Buffers;
+
+namespace DeviceCommons.DeviceMessages.Serialization.V2.Serializers
+{
+ public class DeviceMessageHeaderSerializer : AbstractMessageSerializer, IDeviceMessageHeaderSerializer
+ {
+ public DeviceMessageHeaderSerializer() : base(new DeviceMessageHeader())
+ {
+ }
+
+ private readonly static int HEADERLENGTH = 4;
+ public override void Serializer(ArrayBufferWriter writer, IDeviceMessageHeader model)
+ {
+ writer.Write(model.Header);
+ writer.Write([model.Version]);
+ writer.Write([model.Mark]);
+ }
+ }
+}
diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingSerializer.cs
new file mode 100644
index 0000000000000000000000000000000000000000..0b396ca6cf6e7cc3fc614a347972321275006ac0
--- /dev/null
+++ b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingSerializer.cs
@@ -0,0 +1,22 @@
+using DeviceCommons.DataHandling;
+using DeviceCommons.DeviceMessages.Abstractions;
+using DeviceCommons.DeviceMessages.Models.V1;
+using System.Buffers;
+
+namespace DeviceCommons.DeviceMessages.Serialization.V2.Serializers
+{
+ public class DeviceMessageInfoReadingSerializer : AbstractMessageSerializer, IDeviceMessageInfoReadingSerializer
+ {
+ public DeviceMessageInfoReadingSerializer() : base(new DeviceMessageInfoReading())
+ {
+ }
+
+ public override void Serializer(ArrayBufferWriter writer, IDeviceMessageInfoReading message)
+ {
+ ArgumentNullException.ThrowIfNull(message);
+ ArgumentNullException.ThrowIfNull(message.State);
+ writer.Write(message.Offset);
+ DeviceMessageSerializerProvider.InfoReadingStatesV2Ser.Serializer(writer, message.State);
+ }
+ }
+}
diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingStateSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingStateSerializer.cs
new file mode 100644
index 0000000000000000000000000000000000000000..a08c110170dc9aad8eeedf358bb2d237725fab7d
--- /dev/null
+++ b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingStateSerializer.cs
@@ -0,0 +1,36 @@
+using DeviceCommons.DeviceMessages.Abstractions;
+using DeviceCommons.DeviceMessages.Enums;
+using DeviceCommons.DeviceMessages.Models.V1;
+using System.Buffers;
+
+namespace DeviceCommons.DeviceMessages.Serialization.V2.Serializers
+{
+ public class DeviceMessageInfoReadingStateSerializer : AbstractMessageSerializer, IDeviceMessageInfoReadingStateSerializer
+ {
+ public DeviceMessageInfoReadingStateSerializer() : base(new DeviceMessageInfoReadingState())
+ {
+
+ }
+
+ public override void Serializer(ArrayBufferWriter writer, IDeviceMessageInfoReadingState message)
+ {
+ ArgumentNullException.ThrowIfNull(message);
+ ArgumentNullException.ThrowIfNull(message.SID);
+ ArgumentNullException.ThrowIfNull(message.ValueType);
+ ArgumentNullException.ThrowIfNull(message.Value);
+ writer.Write([message.SID]);
+ writer.Write([message.Type]);
+ if (message.ValueType == StateValueTypeEnum.String)
+ {
+ if (message.Value.Length > byte.MaxValue) throw new IndexOutOfRangeException(nameof(message.Value));
+ writer.Write([(byte)message.Value.Length]);
+ }
+ else if (message.ValueType == StateValueTypeEnum.Binary)
+ {
+ if (message.Value.Length > ushort.MaxValue) throw new IndexOutOfRangeException(nameof(message.Value));
+ writer.Write(BitConverter.GetBytes((UInt16)message.Value.Length));
+ }
+ writer.Write(message.Value);
+ }
+ }
+}
diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingStatesSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingStatesSerializer.cs
new file mode 100644
index 0000000000000000000000000000000000000000..21a7ad23ea6a5cee4726cabe241f34905f7e59aa
--- /dev/null
+++ b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingStatesSerializer.cs
@@ -0,0 +1,28 @@
+using DeviceCommons.DataHandling;
+using DeviceCommons.DeviceMessages.Abstractions;
+using DeviceCommons.DeviceMessages.Models.V1;
+using System.Buffers;
+
+namespace DeviceCommons.DeviceMessages.Serialization.V2.Serializers
+{
+ public class DeviceMessageInfoReadingStatesSerializer : AbstractMessageSerializer, IDeviceMessageInfoReadingStatesSerializer
+ {
+ public DeviceMessageInfoReadingStatesSerializer() : base(new DeviceMessageInfoReadingStates())
+ {
+ }
+
+ public override void Serializer(ArrayBufferWriter writer, IDeviceMessageInfoReadingStates message)
+ {
+ ArgumentNullException.ThrowIfNull(message);
+ ArgumentNullException.ThrowIfNull(message.StateArray);
+ writer.Write([message.Count]);
+ if (message.Count > 0)
+ {
+ foreach (var state in message.StateArray)
+ {
+ DeviceMessageSerializerProvider.InfoReadingStateV2Ser.Serializer(writer, state);
+ }
+ }
+ }
+ }
+}
diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingsSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingsSerializer.cs
new file mode 100644
index 0000000000000000000000000000000000000000..eb53ac0564cdc895dd7c0f0d5bea09b6f0885334
--- /dev/null
+++ b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingsSerializer.cs
@@ -0,0 +1,28 @@
+using DeviceCommons.DataHandling;
+using DeviceCommons.DeviceMessages.Abstractions;
+using DeviceCommons.DeviceMessages.Models.V1;
+using System.Buffers;
+
+namespace DeviceCommons.DeviceMessages.Serialization.V2.Serializers
+{
+ public class DeviceMessageInfoReadingsSerializer : AbstractMessageSerializer, IDeviceMessageInfoReadingsSerializer
+ {
+ public DeviceMessageInfoReadingsSerializer() : base(new DeviceMessageInfoReadings())
+ {
+ }
+
+ public override void Serializer(ArrayBufferWriter writer, IDeviceMessageInfoReadings message)
+ {
+ ArgumentNullException.ThrowIfNull(message);
+ ArgumentNullException.ThrowIfNull(message.ReadingArray);
+ writer.Write([message.Count]);
+ if (message.Count > 0)
+ {
+ foreach (var reading in message.ReadingArray)
+ {
+ DeviceMessageSerializerProvider.InfoReadingV2Ser.Serializer(writer, reading);
+ }
+ }
+ }
+ }
+}
diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoSerializer.cs
new file mode 100644
index 0000000000000000000000000000000000000000..cf7602b95d44f6fb17744d7a623bd62470ab745a
--- /dev/null
+++ b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoSerializer.cs
@@ -0,0 +1,24 @@
+using DeviceCommons.DataHandling;
+using DeviceCommons.DeviceMessages.Abstractions;
+using DeviceCommons.DeviceMessages.Models.V1;
+using System.Buffers;
+
+namespace DeviceCommons.DeviceMessages.Serialization.V2.Serializers
+{
+ public class DeviceMessageInfoSerializer : AbstractMessageSerializer, IDeviceMessageInfoSerializer
+ {
+ public DeviceMessageInfoSerializer() : base(new DeviceMessageInfo())
+ {
+ }
+
+ public override void Serializer(ArrayBufferWriter writer, IDeviceMessageInfo message)
+ {
+ ArgumentNullException.ThrowIfNull(message);
+ ArgumentNullException.ThrowIfNull(message.Reading);
+ writer.Write([message.Length]);
+ writer.Write(message.DIDBytes);
+ writer.Write([message.DeviceType]);
+ DeviceMessageSerializerProvider.InfoReadingsV2Ser.Serializer(writer, message.Reading);
+ }
+ }
+}
diff --git a/TestProject1/BaseUnitTest.cs b/TestProject1/BaseUnitTest.cs
index e0fa52369a6a4e1e77a9d87f01645f6ccfabfebf..0130b8beb92b25aaafc001a5d8a445d21081036b 100644
--- a/TestProject1/BaseUnitTest.cs
+++ b/TestProject1/BaseUnitTest.cs
@@ -1,9 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+using System.Diagnostics;
namespace TestProject1
{
@@ -13,7 +8,7 @@ namespace TestProject1
{
Debug.WriteLine("");
Debug.WriteLine("-----------------------------------------------------------------------");
- Debug.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff")} =>");
+ Debug.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss:fff} =>");
Debug.WriteLine($"{message}");
}
}
diff --git a/TestProject1/BasicStructureUnitTest.cs b/TestProject1/BasicStructureUnitTest.cs
index fb8fd3b202a941a8d88701d5fd8535b26fd3d634..e2b741dd35c9afcd42a4a660deea2677524a865b 100644
--- a/TestProject1/BasicStructureUnitTest.cs
+++ b/TestProject1/BasicStructureUnitTest.cs
@@ -1,4 +1,5 @@
using DeviceCommons.DeviceMessages.Enums;
+using DeviceCommons.DeviceMessages.Models;
using DeviceCommons.DeviceMessages.Models.V1;
using DeviceCommons.DeviceMessages.Serialization;
using DeviceCommons.DeviceMessages.Serialization.V1.Parsers;
diff --git a/TestProject1/BoundaryUnitTest.cs b/TestProject1/BoundaryUnitTest.cs
index 750d6cd93b483ca940c3b08896965df52d1da150..b45feed8e0c0d314c31d3e53a38b32cd0e69fbc7 100644
--- a/TestProject1/BoundaryUnitTest.cs
+++ b/TestProject1/BoundaryUnitTest.cs
@@ -1,4 +1,5 @@
using DeviceCommons.DeviceMessages.Enums;
+using DeviceCommons.DeviceMessages.Models;
using DeviceCommons.DeviceMessages.Models.V1;
using DeviceCommons.DeviceMessages.Serialization;
using DeviceCommons.DeviceMessages.Serialization.V1.Parsers;
diff --git a/TestProject1/BuildUnitTest.cs b/TestProject1/BuildUnitTest.cs
index 74614d86ce01f8ead4cb09dec64fe1e566b13232..1fbe691362ffbf4589af9c68f690d12bac008b3e 100644
--- a/TestProject1/BuildUnitTest.cs
+++ b/TestProject1/BuildUnitTest.cs
@@ -1,5 +1,4 @@
-using BenchmarkDotNet.Attributes;
-using DeviceCommons.DeviceMessages.Builders;
+using DeviceCommons.DeviceMessages.Builders;
using DeviceCommons.DeviceMessages.Enums;
using DeviceCommons.DeviceMessages.Serialization;
using System.Diagnostics;
@@ -34,31 +33,74 @@ namespace TestProject1
[Fact]
public void Test3()
{
- IDeviceMessageBuilder deviceMessage = DeviceMessageBuilder.Create()
- .WithHeader(version: 2, crcType: CRCTypeEnum.CRC8)
- .WithMainDevice("Device", 148,
- config: rs =>
+ Stopwatch sw = Stopwatch.StartNew();
+ Random random = new();
+ while (true)
+ {
+ sw.Restart();
+ IDeviceMessageBuilder deviceMessage = DeviceMessageBuilder.Create()
+ .WithHeader(version: 1, crcType: CRCTypeEnum.CRC16)
+ .WithMainDevice("Device", 148,
+ config: rs =>
+ {
+ rs.AddReading((short)(260 * random.Next(1, 5)), config: r =>
+ {
+ for (int i = 1; i <= 3; i++)
+ {
+ r.AddState((byte)i, $"State{i}", StateValueTypeEnum.String);
+ }
+ });
+ rs.AddReading((short)(260 * random.Next(6, 10)), config: r =>
+ {
+ for (int i = 1; i <= 3; i++)
+ {
+ r.AddState(9, Encoding.UTF8.GetBytes("Binary"), StateValueTypeEnum.Binary);
+ }
+ });
+ }
+ )
+ .WithChildDevice("Device1", 149, (rs) =>
{
rs.AddReading(260 * 1, config: r =>
{
- for (int i = 1; i <= 3; i++)
- {
- r.AddState((byte)i, $"State{i}", StateValueTypeEnum.String);
- }
+ for (int i = 1; i <= 4; i++) r.AddState((byte)i, $"State{i}", StateValueTypeEnum.String);
});
rs.AddReading(260 * 2, config: r =>
{
- for (int i = 1; i <= 3; i++)
- {
- r.AddState(9, Encoding.UTF8.GetBytes("Binary"), StateValueTypeEnum.Binary);
- }
+ for (int i = 1; i <= 4; i++) r.AddState((byte)i, $"State{i}", StateValueTypeEnum.String);
});
- }
- );
- var model = deviceMessage.Build();
- var builder = deviceMessage.BuildHex().ToUpper();
- LogWrite(builder);
- PAR.Parser(builder);
+ rs.AddReading(260 * 3, config: r =>
+ {
+ for (int i = 1; i <= 4; i++) r.AddState((byte)i, $"State{i}", StateValueTypeEnum.String);
+ });
+ })
+ .WithChildDevice("Device2", 149, (rs) =>
+ {
+ rs.AddReading(260 * 1, config: r =>
+ {
+ for (int i = 1; i <= 4; i++) r.AddState((byte)i, $"State{i}", StateValueTypeEnum.String);
+ });
+ rs.AddReading(260 * 2, config: r =>
+ {
+ for (int i = 1; i <= 4; i++) r.AddState((byte)i, $"State{i}", StateValueTypeEnum.String);
+ });
+ rs.AddReading(260 * 3, config: r =>
+ {
+ for (int i = 1; i <= 4; i++) r.AddState((byte)i, $"State{i}", StateValueTypeEnum.String);
+ });
+ });
+ //var model = deviceMessage.Build();
+
+ var bytes = deviceMessage.BuildBytes();
+ sw.Stop();
+
+ var builder = deviceMessage.BuildHex().ToUpper();
+
+ LogWrite(builder);
+ sw.Restart();
+ PAR.Parser(builder);
+ sw.Stop();
+ }
}
[Fact]
diff --git a/TestProject1/ComprehensiveUnitTest.cs b/TestProject1/ComprehensiveUnitTest.cs
index f4777766d03ca6649b6ed3199d5a41c9a8d5977c..83eb13dac6665a459c4bfd0e1e103fbc42d8d422 100644
--- a/TestProject1/ComprehensiveUnitTest.cs
+++ b/TestProject1/ComprehensiveUnitTest.cs
@@ -1,11 +1,9 @@
using DeviceCommons.DeviceMessages.Builders;
using DeviceCommons.DeviceMessages.Enums;
-using DeviceCommons.DeviceMessages.Models.V1;
using DeviceCommons.DeviceMessages.Serialization;
using DeviceCommons.Exceptions;
using System.Buffers;
using System.Text;
-using Xunit;
using Xunit.Abstractions;
namespace DeviceCommons.Tests
@@ -131,15 +129,20 @@ namespace DeviceCommons.Tests
// Act
var arrayBufferWriter = new ArrayBufferWriter();
- _serializer.Serializer(arrayBufferWriter, message);
- var bytes = arrayBufferWriter.WrittenSpan.ToArray();
- var parsedMessage = _parser.Parser(bytes);
+ Assert.Throws(() =>
+ {
+ _serializer.Serializer(arrayBufferWriter, message);
- // Assert
- Assert.NotNull(parsedMessage);
- Assert.Equal(string.Empty, parsedMessage.MainDevice.DID);
- Assert.Equal(0, parsedMessage.MainDevice.DeviceType);
+ var bytes = arrayBufferWriter.WrittenSpan.ToArray();
+
+ var parsedMessage = _parser.Parser(bytes);
+
+ // Assert
+ Assert.NotNull(parsedMessage);
+ Assert.Equal(string.Empty, parsedMessage.MainDevice.DID);
+ Assert.Equal(0, parsedMessage.MainDevice.DeviceType);
+ });
}
[Fact]
@@ -183,9 +186,9 @@ namespace DeviceCommons.Tests
Assert.NotNull(parsedMessage);
Assert.NotNull(parsedMessage.ChildDevice);
Assert.Equal(3, parsedMessage.ChildDevice.Count);
- Assert.Equal("Child1", parsedMessage.ChildDevice.ChildArray[2].DID);
+ Assert.Equal("Child1", parsedMessage.ChildDevice.ChildArray[0].DID);
Assert.Equal("Child2", parsedMessage.ChildDevice.ChildArray[1].DID);
- Assert.Equal("Child3", parsedMessage.ChildDevice.ChildArray[0].DID);
+ Assert.Equal("Child3", parsedMessage.ChildDevice.ChildArray[2].DID);
}
[Fact]