From 4934d5601693e1c6b5fd5e7b20805cbfff072fc4 Mon Sep 17 00:00:00 2001 From: Erol Date: Tue, 26 Aug 2025 09:43:42 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=91=BD=E5=90=8D?= =?UTF-8?q?=E7=A9=BA=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DeviceCommons/DeviceMessages/Abstractions/AbstractMessage.cs | 2 +- .../DeviceMessages/Abstractions/AbstractMessageParser.cs | 2 +- .../DeviceMessages/Abstractions/AbstractMessageSerializer.cs | 2 +- DeviceCommons/DeviceMessages/Abstractions/IMessageSerializer.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/DeviceCommons/DeviceMessages/Abstractions/AbstractMessage.cs b/DeviceCommons/DeviceMessages/Abstractions/AbstractMessage.cs index 14a6d2a..832b4aa 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 996cbf8..47c2760 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 47fa85a..32ab85f 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 diff --git a/DeviceCommons/DeviceMessages/Abstractions/IMessageSerializer.cs b/DeviceCommons/DeviceMessages/Abstractions/IMessageSerializer.cs index 4c2751e..4a8fe45 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 -- Gitee From 60fecd1e16601d18df8af9bdf0edc04b15b82f19 Mon Sep 17 00:00:00 2001 From: Erol Date: Tue, 26 Aug 2025 09:44:47 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=91=BD=E5=90=8D?= =?UTF-8?q?=E7=A9=BA=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Serialization/V1/Parsers/DeviceMessageHeaderParser.cs | 2 +- .../Serialization/V1/Parsers/IDeviceMessageHeaderParser.cs | 2 +- .../V1/Serializers/DeviceMessageHeaderSerializer.cs | 2 +- .../V1/Serializers/IDeviceMessageHeaderSerializer.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageHeaderParser.cs b/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageHeaderParser.cs index db8b64b..1c75346 100644 --- a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageHeaderParser.cs +++ b/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageHeaderParser.cs @@ -1,6 +1,6 @@ using DeviceCommons.DeviceMessages.Abstractions; using DeviceCommons.DeviceMessages.Enums; -using DeviceCommons.DeviceMessages.Models.V1; +using DeviceCommons.DeviceMessages.Models; namespace DeviceCommons.DeviceMessages.Serialization.V1.Parsers { diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/IDeviceMessageHeaderParser.cs b/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/IDeviceMessageHeaderParser.cs index 1bf0d6e..cace577 100644 --- a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/IDeviceMessageHeaderParser.cs +++ b/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/IDeviceMessageHeaderParser.cs @@ -1,5 +1,5 @@ using DeviceCommons.DeviceMessages.Abstractions; -using DeviceCommons.DeviceMessages.Models.V1; +using DeviceCommons.DeviceMessages.Models; namespace DeviceCommons.DeviceMessages.Serialization.V1.Parsers { diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageHeaderSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageHeaderSerializer.cs index 43d5c41..efa8552 100644 --- a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageHeaderSerializer.cs +++ b/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageHeaderSerializer.cs @@ -1,6 +1,6 @@ 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 diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/IDeviceMessageHeaderSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/IDeviceMessageHeaderSerializer.cs index 57f1a94..fdc938c 100644 --- a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/IDeviceMessageHeaderSerializer.cs +++ b/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/IDeviceMessageHeaderSerializer.cs @@ -1,5 +1,5 @@ using DeviceCommons.DeviceMessages.Abstractions; -using DeviceCommons.DeviceMessages.Models.V1; +using DeviceCommons.DeviceMessages.Models; namespace DeviceCommons.DeviceMessages.Serialization.V1.Serializers { -- Gitee From 8358438240552f6d953e3ede954a5645582729cb Mon Sep 17 00:00:00 2001 From: Erol Date: Tue, 26 Aug 2025 10:07:42 +0800 Subject: [PATCH 3/7] =?UTF-8?q?1.=E5=A2=9E=E5=8A=A0=E5=8D=8F=E8=AE=AE?= =?UTF-8?q?=E5=A4=B4=E6=A0=A1=E9=AA=8C=202.=E8=BF=81=E7=A7=BBCRC=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E8=87=B3=E5=85=AC=E5=85=B1=E8=A7=A3=E6=9E=90=E7=B1=BB?= =?UTF-8?q?=203.=E5=A2=9E=E5=8A=A0V2=E7=89=88=E6=9C=AC=E5=A4=84=E7=90=86?= =?UTF-8?q?=E7=B1=BB=204.=E5=A2=9E=E5=8A=A0=E7=89=88=E6=9C=AC=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=205.=E8=BF=81=E7=A7=BBHeaderModel=E8=87=B3=E5=85=AC?= =?UTF-8?q?=E5=85=B1=E5=8C=BA=E5=9F=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DeviceCommons/DeviceCommons.csproj | 6 +++ .../Models/{V1 => }/DeviceMessageHeader.cs | 2 +- .../DeviceMessages/Models/{V1 => }/IBase.cs | 2 +- .../Models/{V1 => }/IDeviceMessageHeader.cs | 2 +- .../Serialization/DeviceMessageParser.cs | 41 +++++++++++++++---- .../Serialization/IProcessVersion.cs | 9 ++++ .../Serialization/V1/ProcessVersionData.cs | 29 ++----------- .../Serialization/V2/ProcessVersionData.cs | 16 ++++++++ TestProject1/BasicStructureUnitTest.cs | 1 + 9 files changed, 72 insertions(+), 36 deletions(-) rename DeviceCommons/DeviceMessages/Models/{V1 => }/DeviceMessageHeader.cs (94%) rename DeviceCommons/DeviceMessages/Models/{V1 => }/IBase.cs (58%) rename DeviceCommons/DeviceMessages/Models/{V1 => }/IDeviceMessageHeader.cs (90%) create mode 100644 DeviceCommons/DeviceMessages/Serialization/IProcessVersion.cs create mode 100644 DeviceCommons/DeviceMessages/Serialization/V2/ProcessVersionData.cs diff --git a/DeviceCommons/DeviceCommons.csproj b/DeviceCommons/DeviceCommons.csproj index 407846a..5dbfaa5 100644 --- a/DeviceCommons/DeviceCommons.csproj +++ b/DeviceCommons/DeviceCommons.csproj @@ -10,4 +10,10 @@ + + + + + + diff --git a/DeviceCommons/DeviceMessages/Models/V1/DeviceMessageHeader.cs b/DeviceCommons/DeviceMessages/Models/DeviceMessageHeader.cs similarity index 94% rename from DeviceCommons/DeviceMessages/Models/V1/DeviceMessageHeader.cs rename to DeviceCommons/DeviceMessages/Models/DeviceMessageHeader.cs index 1b8d738..32d8bc6 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 { diff --git a/DeviceCommons/DeviceMessages/Models/V1/IBase.cs b/DeviceCommons/DeviceMessages/Models/IBase.cs similarity index 58% rename from DeviceCommons/DeviceMessages/Models/V1/IBase.cs rename to DeviceCommons/DeviceMessages/Models/IBase.cs index 4594aab..1b3b733 100644 --- a/DeviceCommons/DeviceMessages/Models/V1/IBase.cs +++ b/DeviceCommons/DeviceMessages/Models/IBase.cs @@ -1,6 +1,6 @@ using System.Buffers; -namespace DeviceCommons.DeviceMessages.Models.V1 +namespace DeviceCommons.DeviceMessages.Models { public interface IBase { 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 3ef83e3..06eadf4 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/Serialization/DeviceMessageParser.cs b/DeviceCommons/DeviceMessages/Serialization/DeviceMessageParser.cs index a9887c8..6417670 100644 --- a/DeviceCommons/DeviceMessages/Serialization/DeviceMessageParser.cs +++ b/DeviceCommons/DeviceMessages/Serialization/DeviceMessageParser.cs @@ -1,7 +1,10 @@ using DeviceCommons.DataHandling; using DeviceCommons.DeviceMessages.Abstractions; +using DeviceCommons.DeviceMessages.Enums; using DeviceCommons.DeviceMessages.Models.V1; using DeviceCommons.Exceptions; +using DeviceCommons.Security; +using System.Reflection; namespace DeviceCommons.DeviceMessages.Serialization { @@ -23,15 +26,39 @@ 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 _ = (Model?.Header?.Version) switch + { + 0x01 => new V1.ProcessVersionData(Model, bytes[..^crcLength]), + 0x02 => new V2.ProcessVersionData(Model, bytes[..^crcLength]), + _ => new V1.ProcessVersionData(Model ??= new DeviceMessage(), bytes[..^crcLength]), + }; } catch (Exception ex) { diff --git a/DeviceCommons/DeviceMessages/Serialization/IProcessVersion.cs b/DeviceCommons/DeviceMessages/Serialization/IProcessVersion.cs new file mode 100644 index 0000000..713c65b --- /dev/null +++ b/DeviceCommons/DeviceMessages/Serialization/IProcessVersion.cs @@ -0,0 +1,9 @@ +using DeviceCommons.DeviceMessages.Models.V1; + +namespace DeviceCommons.DeviceMessages.Serialization +{ + public interface IProcessVersion + { + + } +} diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/ProcessVersionData.cs b/DeviceCommons/DeviceMessages/Serialization/V1/ProcessVersionData.cs index bc46bfb..7293559 100644 --- a/DeviceCommons/DeviceMessages/Serialization/V1/ProcessVersionData.cs +++ b/DeviceCommons/DeviceMessages/Serialization/V1/ProcessVersionData.cs @@ -1,36 +1,13 @@ using DeviceCommons.DataHandling; -using DeviceCommons.DeviceMessages.Enums; using DeviceCommons.DeviceMessages.Models.V1; -using DeviceCommons.Exceptions; -using DeviceCommons.Security; namespace DeviceCommons.DeviceMessages.Serialization.V1 { - public class ProcessVersionData + public class ProcessVersionData : IProcessVersion { public ProcessVersionData(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); @@ -41,7 +18,7 @@ namespace DeviceCommons.DeviceMessages.Serialization.V1 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) diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/ProcessVersionData.cs b/DeviceCommons/DeviceMessages/Serialization/V2/ProcessVersionData.cs new file mode 100644 index 0000000..7711ef7 --- /dev/null +++ b/DeviceCommons/DeviceMessages/Serialization/V2/ProcessVersionData.cs @@ -0,0 +1,16 @@ +using DeviceCommons.DataHandling; +using DeviceCommons.DeviceMessages.Enums; +using DeviceCommons.DeviceMessages.Models.V1; +using DeviceCommons.Exceptions; +using DeviceCommons.Security; + +namespace DeviceCommons.DeviceMessages.Serialization.V2 +{ + public class ProcessVersionData : IProcessVersion + { + public ProcessVersionData(IDeviceMessage model, ReadOnlySpan bytes) + { + ArgumentNullException.ThrowIfNull(model); + } + } +} diff --git a/TestProject1/BasicStructureUnitTest.cs b/TestProject1/BasicStructureUnitTest.cs index fb8fd3b..e2b741d 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; -- Gitee From 2cfaa6c61edc2304bb0f58603cefec9a0493235d Mon Sep 17 00:00:00 2001 From: Erol Date: Tue, 26 Aug 2025 10:41:50 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dheader=E5=8F=96=E5=80=BC?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Serialization/V1/Parsers/DeviceMessageHeaderParser.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageHeaderParser.cs b/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageHeaderParser.cs index 1c75346..22ae8bf 100644 --- a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageHeaderParser.cs +++ b/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageHeaderParser.cs @@ -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); -- Gitee From 5890f146dc2e250c0265646a0fb08ce2f6480166 Mon Sep 17 00:00:00 2001 From: Erol Date: Tue, 26 Aug 2025 10:43:15 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=91=BD=E5=90=8D?= =?UTF-8?q?=E7=A9=BA=E9=97=B4=E5=BC=95=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DeviceMessages/Builders/DeviceMessageBuilder.cs | 1 + .../Serialization/DeviceMessageSerializer.cs | 1 + TestProject1/BaseUnitTest.cs | 7 +------ TestProject1/BoundaryUnitTest.cs | 1 + TestProject1/BuildUnitTest.cs | 3 +-- 5 files changed, 5 insertions(+), 8 deletions(-) diff --git a/DeviceCommons/DeviceMessages/Builders/DeviceMessageBuilder.cs b/DeviceCommons/DeviceMessages/Builders/DeviceMessageBuilder.cs index 6e23ca2..c48c408 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/Serialization/DeviceMessageSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/DeviceMessageSerializer.cs index a237015..dcde2b6 100644 --- a/DeviceCommons/DeviceMessages/Serialization/DeviceMessageSerializer.cs +++ b/DeviceCommons/DeviceMessages/Serialization/DeviceMessageSerializer.cs @@ -1,6 +1,7 @@ using DeviceCommons.DataHandling; using DeviceCommons.DeviceMessages.Abstractions; using DeviceCommons.DeviceMessages.Enums; +using DeviceCommons.DeviceMessages.Models; using DeviceCommons.DeviceMessages.Models.V1; using DeviceCommons.DeviceMessages.Serialization.V1.Serializers; using DeviceCommons.Security; diff --git a/TestProject1/BaseUnitTest.cs b/TestProject1/BaseUnitTest.cs index e0fa523..fe22e6e 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 { diff --git a/TestProject1/BoundaryUnitTest.cs b/TestProject1/BoundaryUnitTest.cs index 750d6cd..b45feed 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 74614d8..5410a26 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; -- Gitee From 38f1ea49a5699ec10adff361775725b803b825ff Mon Sep 17 00:00:00 2001 From: Erol Date: Tue, 26 Aug 2025 11:09:23 +0800 Subject: [PATCH 6/7] =?UTF-8?q?1.=E8=B0=83=E6=95=B4=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DeviceCommons/DeviceCommons.csproj | 2 -- .../Parsers => }/IDeviceMessageChildParser.cs | 2 +- .../IDeviceMessageChildSerializer.cs | 2 +- .../IDeviceMessageHeaderParser.cs | 2 +- .../IDeviceMessageHeaderSerializer.cs | 2 +- .../Parsers => }/IDeviceMessageInfoParser.cs | 2 +- .../IDeviceMessageInfoReadingParser.cs | 2 +- .../IDeviceMessageInfoReadingSerializer.cs | 2 +- .../IDeviceMessageInfoReadingStateParser.cs | 2 +- ...DeviceMessageInfoReadingStateSerializer.cs | 2 +- .../IDeviceMessageInfoReadingStatesParser.cs | 2 +- ...eviceMessageInfoReadingStatesSerializer.cs | 2 +- .../IDeviceMessageInfoReadingsParser.cs | 2 +- .../IDeviceMessageInfoReadingsSerializer.cs | 2 +- .../IDeviceMessageInfoSerializer.cs | 2 +- .../V2/Parsers/DeviceMessageChildParser.cs | 19 ++++++++++++++++++ .../V2/Parsers/DeviceMessageHeaderParser.cs | 19 ++++++++++++++++++ .../V2/Parsers/DeviceMessageInfoParser.cs | 19 ++++++++++++++++++ .../Parsers/DeviceMessageInfoReadingParser.cs | 18 +++++++++++++++++ .../DeviceMessageInfoReadingStateParser.cs | 19 ++++++++++++++++++ .../DeviceMessageInfoReadingStatesParser.cs | 18 +++++++++++++++++ .../DeviceMessageInfoReadingsParser.cs | 18 +++++++++++++++++ .../DeviceMessageChildSerializer.cs | 18 +++++++++++++++++ .../DeviceMessageHeaderSerializer.cs | 19 ++++++++++++++++++ .../DeviceMessageInfoReadingSerializer.cs | 18 +++++++++++++++++ ...DeviceMessageInfoReadingStateSerializer.cs | 20 +++++++++++++++++++ ...eviceMessageInfoReadingStatesSerializer.cs | 18 +++++++++++++++++ .../DeviceMessageInfoReadingsSerializer.cs | 18 +++++++++++++++++ .../DeviceMessageInfoSerializer.cs | 18 +++++++++++++++++ 29 files changed, 273 insertions(+), 16 deletions(-) rename DeviceCommons/DeviceMessages/Serialization/{V1/Parsers => }/IDeviceMessageChildParser.cs (75%) rename DeviceCommons/DeviceMessages/Serialization/{V1/Serializers => }/IDeviceMessageChildSerializer.cs (75%) rename DeviceCommons/DeviceMessages/Serialization/{V1/Parsers => }/IDeviceMessageHeaderParser.cs (75%) rename DeviceCommons/DeviceMessages/Serialization/{V1/Serializers => }/IDeviceMessageHeaderSerializer.cs (75%) rename DeviceCommons/DeviceMessages/Serialization/{V1/Parsers => }/IDeviceMessageInfoParser.cs (75%) rename DeviceCommons/DeviceMessages/Serialization/{V1/Parsers => }/IDeviceMessageInfoReadingParser.cs (76%) rename DeviceCommons/DeviceMessages/Serialization/{V1/Serializers => }/IDeviceMessageInfoReadingSerializer.cs (76%) rename DeviceCommons/DeviceMessages/Serialization/{V1/Parsers => }/IDeviceMessageInfoReadingStateParser.cs (77%) rename DeviceCommons/DeviceMessages/Serialization/{V1/Serializers => }/IDeviceMessageInfoReadingStateSerializer.cs (77%) rename DeviceCommons/DeviceMessages/Serialization/{V1/Parsers => }/IDeviceMessageInfoReadingStatesParser.cs (77%) rename DeviceCommons/DeviceMessages/Serialization/{V1/Serializers => }/IDeviceMessageInfoReadingStatesSerializer.cs (77%) rename DeviceCommons/DeviceMessages/Serialization/{V1/Parsers => }/IDeviceMessageInfoReadingsParser.cs (76%) rename DeviceCommons/DeviceMessages/Serialization/{V1/Serializers => }/IDeviceMessageInfoReadingsSerializer.cs (76%) rename DeviceCommons/DeviceMessages/Serialization/{V1/Serializers => }/IDeviceMessageInfoSerializer.cs (75%) create mode 100644 DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageChildParser.cs create mode 100644 DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageHeaderParser.cs create mode 100644 DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoParser.cs create mode 100644 DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingParser.cs create mode 100644 DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingStateParser.cs create mode 100644 DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingStatesParser.cs create mode 100644 DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingsParser.cs create mode 100644 DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageChildSerializer.cs create mode 100644 DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageHeaderSerializer.cs create mode 100644 DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingSerializer.cs create mode 100644 DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingStateSerializer.cs create mode 100644 DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingStatesSerializer.cs create mode 100644 DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingsSerializer.cs create mode 100644 DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoSerializer.cs diff --git a/DeviceCommons/DeviceCommons.csproj b/DeviceCommons/DeviceCommons.csproj index 5dbfaa5..3166522 100644 --- a/DeviceCommons/DeviceCommons.csproj +++ b/DeviceCommons/DeviceCommons.csproj @@ -12,8 +12,6 @@ - - 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 ff536fa..c45561b 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 0f503be..f6e6ba9 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 75% rename from DeviceCommons/DeviceMessages/Serialization/V1/Parsers/IDeviceMessageHeaderParser.cs rename to DeviceCommons/DeviceMessages/Serialization/IDeviceMessageHeaderParser.cs index cace577..5f2f939 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; -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 75% rename from DeviceCommons/DeviceMessages/Serialization/V1/Serializers/IDeviceMessageHeaderSerializer.cs rename to DeviceCommons/DeviceMessages/Serialization/IDeviceMessageHeaderSerializer.cs index fdc938c..868f7bd 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; -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 b0715df..565c239 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 63355ad..d893a10 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 c827406..ec10273 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 90b3373..ceaee67 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 b976f58..6a50b68 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 745fe5f..b5dfb67 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 79738c6..c8ac189 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 f0c1d1a..fd8f4c0 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 7d962ef..41e1e09 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 7b12a71..d117865 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/V2/Parsers/DeviceMessageChildParser.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageChildParser.cs new file mode 100644 index 0000000..e69bbfd --- /dev/null +++ b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageChildParser.cs @@ -0,0 +1,19 @@ +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) + { + throw new NotImplementedException(); + } + } +} diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageHeaderParser.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageHeaderParser.cs new file mode 100644 index 0000000..307eebd --- /dev/null +++ b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageHeaderParser.cs @@ -0,0 +1,19 @@ +using DeviceCommons.DeviceMessages.Abstractions; +using DeviceCommons.DeviceMessages.Enums; +using DeviceCommons.DeviceMessages.Models; + +namespace DeviceCommons.DeviceMessages.Serialization.V2.Parsers +{ + public class DeviceMessageHeaderParser : AbstractMessageParser, IDeviceMessageHeaderParser + { + public DeviceMessageHeaderParser() : base(new DeviceMessageHeader()) + { + + } + + public override IDeviceMessageHeader Parser(ReadOnlySpan bytes) + { + throw new NotImplementedException(); + } + } +} diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoParser.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoParser.cs new file mode 100644 index 0000000..0103b8a --- /dev/null +++ b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoParser.cs @@ -0,0 +1,19 @@ +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) + { + throw new NotImplementedException(); + } + } +} diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingParser.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingParser.cs new file mode 100644 index 0000000..af99603 --- /dev/null +++ b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingParser.cs @@ -0,0 +1,18 @@ +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) + { + throw new NotImplementedException(); + } + } +} diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingStateParser.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingStateParser.cs new file mode 100644 index 0000000..15ca71e --- /dev/null +++ b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingStateParser.cs @@ -0,0 +1,19 @@ +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) + { + throw new NotImplementedException(); + } + } +} diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingStatesParser.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingStatesParser.cs new file mode 100644 index 0000000..651d956 --- /dev/null +++ b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingStatesParser.cs @@ -0,0 +1,18 @@ +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) + { + throw new NotImplementedException(); + } + } +} diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingsParser.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingsParser.cs new file mode 100644 index 0000000..8e2da0a --- /dev/null +++ b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingsParser.cs @@ -0,0 +1,18 @@ +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) + { + throw new NotImplementedException(); + } + } +} diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageChildSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageChildSerializer.cs new file mode 100644 index 0000000..0900931 --- /dev/null +++ b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageChildSerializer.cs @@ -0,0 +1,18 @@ +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) + { + throw new NotImplementedException(); + } + } +} diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageHeaderSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageHeaderSerializer.cs new file mode 100644 index 0000000..b85c900 --- /dev/null +++ b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageHeaderSerializer.cs @@ -0,0 +1,19 @@ +using DeviceCommons.DataHandling; +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()) + { + } + + public override void Serializer(ArrayBufferWriter writer) + { + throw new NotImplementedException(); + } + } +} diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingSerializer.cs new file mode 100644 index 0000000..aca89f9 --- /dev/null +++ b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingSerializer.cs @@ -0,0 +1,18 @@ +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) + { + throw new NotImplementedException(); + } + } +} diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingStateSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingStateSerializer.cs new file mode 100644 index 0000000..4140693 --- /dev/null +++ b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingStateSerializer.cs @@ -0,0 +1,20 @@ +using DeviceCommons.DeviceMessages.Abstractions; +using DeviceCommons.DeviceMessages.Models.V1; +using System.Buffers; + +namespace DeviceCommons.DeviceMessages.Serialization.V2.Serializers +{ + public class DeviceMessageInfoReadingStateSerializer : AbstractMessageSerializer, IDeviceMessageInfoReadingStateSerializer + { + public DeviceMessageInfoReadingStateSerializer(IDeviceMessageInfoReadingState t) : base(t) + { + + } + + public override void Serializer(ArrayBufferWriter writer) + { + + throw new NotImplementedException(); + } + } +} diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingStatesSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingStatesSerializer.cs new file mode 100644 index 0000000..5bbe5ba --- /dev/null +++ b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingStatesSerializer.cs @@ -0,0 +1,18 @@ +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) + { + throw new NotImplementedException(); + } + } +} diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingsSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingsSerializer.cs new file mode 100644 index 0000000..73ca730 --- /dev/null +++ b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingsSerializer.cs @@ -0,0 +1,18 @@ +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) + { + throw new NotImplementedException(); + } + } +} diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoSerializer.cs new file mode 100644 index 0000000..4b49636 --- /dev/null +++ b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoSerializer.cs @@ -0,0 +1,18 @@ +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) + { + throw new NotImplementedException(); + } + } +} -- Gitee From 00181a44c74cc92919bb436827e0ca6771b0be64 Mon Sep 17 00:00:00 2001 From: Erol Date: Wed, 27 Aug 2025 10:30:08 +0800 Subject: [PATCH 7/7] =?UTF-8?q?refactor(serializer):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E6=B6=88=E6=81=AF=E5=BA=8F=E5=88=97=E5=8C=96?= =?UTF-8?q?=E4=B8=8E=E8=A7=A3=E6=9E=90=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 重新整理和区分了V1与V2版本的设备消息序列化器和解析器 - 新增并实现了IProcessVersion接口,用于统一版本数据处理 - 优化DeviceMessageSerializer,支持不同版本序列化方法调用 - 删除了部分过时版本的序列化器和解析器代码 - 在模型中新增DataLength属性,统一计算数据长度 - 重写V1和V2版本的消息解析实现,修复之前未实现异常 - 细化了状态值长度计算方法,支持字符串和二进制类型 - 修改部分方法参数及返回值以增强类型安全性和异常处理 - 优化写入字节数组逻辑,使用ArrayBufferWriter进行内存高效操作 - 修正部分代码风格,移除无用using及方法冗余重载 - 更新测试代码,完善消息构造和状态设置逻辑,提升测试稳定性 --- .../DeviceMessageSerializerProvider.cs | 74 +++++++++++++---- .../DataHandling/DeviceMessageUtilities.cs | 16 +++- .../Abstractions/AbstractMessageSerializer.cs | 12 +-- .../Models/DeviceMessageHeader.cs | 2 + DeviceCommons/DeviceMessages/Models/IBase.cs | 1 + .../DeviceMessages/Models/V1/DeviceMessage.cs | 2 + .../Models/V1/DeviceMessageChild.cs | 2 + .../Models/V1/DeviceMessageInfo.cs | 4 +- .../Models/V1/DeviceMessageInfoReading.cs | 2 + .../V1/DeviceMessageInfoReadingState.cs | 10 ++- .../V1/DeviceMessageInfoReadingStates.cs | 3 + .../Models/V1/DeviceMessageInfoReadings.cs | 3 + .../Parsers => }/DeviceMessageHeaderParser.cs | 2 +- .../DeviceMessageHeaderSerializer.cs | 4 +- .../Serialization/DeviceMessageParser.cs | 12 +-- .../Serialization/DeviceMessageSerializer.cs | 18 ++--- .../Serialization/IProcessVersion.cs | 2 + .../V1/Parsers/DeviceMessageChildParser.cs | 2 +- .../V1/Parsers/DeviceMessageInfoParser.cs | 2 +- .../Parsers/DeviceMessageInfoReadingParser.cs | 2 +- .../DeviceMessageInfoReadingStatesParser.cs | 2 +- .../DeviceMessageInfoReadingsParser.cs | 2 +- .../Serialization/V1/ProcessVersionData.cs | 25 ++++-- .../DeviceMessageChildSerializer.cs | 3 - .../DeviceMessageInfoReadingSerializer.cs | 2 - ...DeviceMessageInfoReadingStateSerializer.cs | 3 - ...eviceMessageInfoReadingStatesSerializer.cs | 4 - .../DeviceMessageInfoReadingsSerializer.cs | 2 - .../DeviceMessageInfoSerializer.cs | 2 - .../V2/Parsers/DeviceMessageChildParser.cs | 12 ++- .../V2/Parsers/DeviceMessageHeaderParser.cs | 19 ----- .../V2/Parsers/DeviceMessageInfoParser.cs | 9 ++- .../Parsers/DeviceMessageInfoReadingParser.cs | 7 +- .../DeviceMessageInfoReadingStateParser.cs | 22 +++++- .../DeviceMessageInfoReadingStatesParser.cs | 11 ++- .../DeviceMessageInfoReadingsParser.cs | 11 ++- .../Serialization/V2/ProcessVersionData.cs | 32 ++++++-- .../DeviceMessageChildSerializer.cs | 16 +++- .../DeviceMessageHeaderSerializer.cs | 10 ++- .../DeviceMessageInfoReadingSerializer.cs | 10 ++- ...DeviceMessageInfoReadingStateSerializer.cs | 24 +++++- ...eviceMessageInfoReadingStatesSerializer.cs | 16 +++- .../DeviceMessageInfoReadingsSerializer.cs | 16 +++- .../DeviceMessageInfoSerializer.cs | 12 ++- TestProject1/BaseUnitTest.cs | 2 +- TestProject1/BuildUnitTest.cs | 79 ++++++++++++++----- TestProject1/ComprehensiveUnitTest.cs | 25 +++--- 47 files changed, 398 insertions(+), 155 deletions(-) rename DeviceCommons/DeviceMessages/Serialization/{V1/Parsers => }/DeviceMessageHeaderParser.cs (94%) rename DeviceCommons/DeviceMessages/Serialization/{V1/Serializers => }/DeviceMessageHeaderSerializer.cs (86%) delete mode 100644 DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageHeaderParser.cs diff --git a/DeviceCommons/DataHandling/DeviceMessageSerializerProvider.cs b/DeviceCommons/DataHandling/DeviceMessageSerializerProvider.cs index 1296e35..8cd4f59 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 daf10fb..ee707ae 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/DeviceMessages/Abstractions/AbstractMessageSerializer.cs b/DeviceCommons/DeviceMessages/Abstractions/AbstractMessageSerializer.cs index 32ab85f..7f119f7 100644 --- a/DeviceCommons/DeviceMessages/Abstractions/AbstractMessageSerializer.cs +++ b/DeviceCommons/DeviceMessages/Abstractions/AbstractMessageSerializer.cs @@ -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/Models/DeviceMessageHeader.cs b/DeviceCommons/DeviceMessages/Models/DeviceMessageHeader.cs index 32d8bc6..fa09c7d 100644 --- a/DeviceCommons/DeviceMessages/Models/DeviceMessageHeader.cs +++ b/DeviceCommons/DeviceMessages/Models/DeviceMessageHeader.cs @@ -26,5 +26,7 @@ namespace DeviceCommons.DeviceMessages.Models { 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/IBase.cs b/DeviceCommons/DeviceMessages/Models/IBase.cs index 1b3b733..3cb7530 100644 --- a/DeviceCommons/DeviceMessages/Models/IBase.cs +++ b/DeviceCommons/DeviceMessages/Models/IBase.cs @@ -4,5 +4,6 @@ namespace DeviceCommons.DeviceMessages.Models { public interface IBase { + int DataLength { get; } } } diff --git a/DeviceCommons/DeviceMessages/Models/V1/DeviceMessage.cs b/DeviceCommons/DeviceMessages/Models/V1/DeviceMessage.cs index 31f337a..83c19a2 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 7761cb3..db72b68 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 dc57a73..2c4611f 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 2aab269..f436422 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 7938c0b..73ab6fb 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 3843f74..99a35f5 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 192c10c..29650d8 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 94% rename from DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageHeaderParser.cs rename to DeviceCommons/DeviceMessages/Serialization/DeviceMessageHeaderParser.cs index 22ae8bf..7fb1b64 100644 --- a/DeviceCommons/DeviceMessages/Serialization/V1/Parsers/DeviceMessageHeaderParser.cs +++ b/DeviceCommons/DeviceMessages/Serialization/DeviceMessageHeaderParser.cs @@ -2,7 +2,7 @@ using DeviceCommons.DeviceMessages.Enums; using DeviceCommons.DeviceMessages.Models; -namespace DeviceCommons.DeviceMessages.Serialization.V1.Parsers +namespace DeviceCommons.DeviceMessages.Serialization { public class DeviceMessageHeaderParser : AbstractMessageParser, IDeviceMessageHeaderParser { diff --git a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageHeaderSerializer.cs b/DeviceCommons/DeviceMessages/Serialization/DeviceMessageHeaderSerializer.cs similarity index 86% rename from DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageHeaderSerializer.cs rename to DeviceCommons/DeviceMessages/Serialization/DeviceMessageHeaderSerializer.cs index efa8552..5b5f589 100644 --- a/DeviceCommons/DeviceMessages/Serialization/V1/Serializers/DeviceMessageHeaderSerializer.cs +++ b/DeviceCommons/DeviceMessages/Serialization/DeviceMessageHeaderSerializer.cs @@ -3,7 +3,7 @@ using DeviceCommons.DeviceMessages.Abstractions; 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 6417670..618fe3b 100644 --- a/DeviceCommons/DeviceMessages/Serialization/DeviceMessageParser.cs +++ b/DeviceCommons/DeviceMessages/Serialization/DeviceMessageParser.cs @@ -4,7 +4,6 @@ using DeviceCommons.DeviceMessages.Enums; using DeviceCommons.DeviceMessages.Models.V1; using DeviceCommons.Exceptions; using DeviceCommons.Security; -using System.Reflection; namespace DeviceCommons.DeviceMessages.Serialization { @@ -52,13 +51,14 @@ namespace DeviceCommons.DeviceMessages.Serialization throw new InvalidMessageException($"CRC validation failed. Expected 0x{calculated}, but received 0x{received}."); } } - - IProcessVersion _ = (Model?.Header?.Version) switch + IProcessVersion process = Model?.Header?.Version switch { - 0x01 => new V1.ProcessVersionData(Model, bytes[..^crcLength]), - 0x02 => new V2.ProcessVersionData(Model, bytes[..^crcLength]), - _ => new V1.ProcessVersionData(Model ??= new DeviceMessage(), bytes[..^crcLength]), + 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 dcde2b6..74c8873 100644 --- a/DeviceCommons/DeviceMessages/Serialization/DeviceMessageSerializer.cs +++ b/DeviceCommons/DeviceMessages/Serialization/DeviceMessageSerializer.cs @@ -1,9 +1,6 @@ -using DeviceCommons.DataHandling; -using DeviceCommons.DeviceMessages.Abstractions; +using DeviceCommons.DeviceMessages.Abstractions; using DeviceCommons.DeviceMessages.Enums; -using DeviceCommons.DeviceMessages.Models; using DeviceCommons.DeviceMessages.Models.V1; -using DeviceCommons.DeviceMessages.Serialization.V1.Serializers; using DeviceCommons.Security; using System.Buffers; @@ -19,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/IProcessVersion.cs b/DeviceCommons/DeviceMessages/Serialization/IProcessVersion.cs index 713c65b..f036a3c 100644 --- a/DeviceCommons/DeviceMessages/Serialization/IProcessVersion.cs +++ b/DeviceCommons/DeviceMessages/Serialization/IProcessVersion.cs @@ -4,6 +4,8 @@ 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 bc88c1a..bd17337 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 e4f8228..51a4d55 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 049dd77..17eba78 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 261c81a..0a46dae 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 1f96126..c40888a 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 7293559..f157f08 100644 --- a/DeviceCommons/DeviceMessages/Serialization/V1/ProcessVersionData.cs +++ b/DeviceCommons/DeviceMessages/Serialization/V1/ProcessVersionData.cs @@ -1,11 +1,14 @@ using DeviceCommons.DataHandling; +using DeviceCommons.DeviceMessages.Models; using DeviceCommons.DeviceMessages.Models.V1; +using DeviceCommons.DeviceMessages.Serialization.V1.Serializers; +using System.Buffers; namespace DeviceCommons.DeviceMessages.Serialization.V1 { public class ProcessVersionData : IProcessVersion { - public ProcessVersionData(IDeviceMessage model, ReadOnlySpan bytes) + public void Parser(IDeviceMessage model, ReadOnlySpan bytes) { ArgumentNullException.ThrowIfNull(model); @@ -14,7 +17,7 @@ namespace DeviceCommons.DeviceMessages.Serialization.V1 if (mainDeviceLength > 0) { byte[] mainDeviceData = bytes.Slice(index, mainDeviceLength).ToArray(); - model.MainDevice = DeviceMessageSerializerProvider.InfoPar.Parser(mainDeviceData); + model.MainDevice = DeviceMessageSerializerProvider.InfoV1Par.Parser(mainDeviceData); index += mainDeviceLength; } @@ -24,25 +27,35 @@ namespace DeviceCommons.DeviceMessages.Serialization.V1 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 78a8848..4cdafec 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 9e4978e..0c37650 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 2a798e7..400ada7 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 765e7dd..4255625 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 3661c1e..74f0c49 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 70122ae..9191b13 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 index e69bbfd..a21ab88 100644 --- a/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageChildParser.cs +++ b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageChildParser.cs @@ -13,7 +13,17 @@ namespace DeviceCommons.DeviceMessages.Serialization.V2.Parsers public override IDeviceMessageChild Parser(ReadOnlySpan bytes) { - throw new NotImplementedException(); + 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/DeviceMessageHeaderParser.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageHeaderParser.cs deleted file mode 100644 index 307eebd..0000000 --- a/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageHeaderParser.cs +++ /dev/null @@ -1,19 +0,0 @@ -using DeviceCommons.DeviceMessages.Abstractions; -using DeviceCommons.DeviceMessages.Enums; -using DeviceCommons.DeviceMessages.Models; - -namespace DeviceCommons.DeviceMessages.Serialization.V2.Parsers -{ - public class DeviceMessageHeaderParser : AbstractMessageParser, IDeviceMessageHeaderParser - { - public DeviceMessageHeaderParser() : base(new DeviceMessageHeader()) - { - - } - - public override IDeviceMessageHeader Parser(ReadOnlySpan bytes) - { - throw new NotImplementedException(); - } - } -} diff --git a/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoParser.cs b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoParser.cs index 0103b8a..a365bdb 100644 --- a/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoParser.cs +++ b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoParser.cs @@ -13,7 +13,14 @@ namespace DeviceCommons.DeviceMessages.Serialization.V2.Parsers public override IDeviceMessageInfo Parser(ReadOnlySpan bytes) { - throw new NotImplementedException(); + 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 index af99603..6b59538 100644 --- a/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingParser.cs +++ b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingParser.cs @@ -12,7 +12,12 @@ namespace DeviceCommons.DeviceMessages.Serialization.V2.Parsers public override IDeviceMessageInfoReading Parser(ReadOnlySpan bytes) { - throw new NotImplementedException(); + 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 index 15ca71e..9696d19 100644 --- a/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingStateParser.cs +++ b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingStateParser.cs @@ -13,7 +13,27 @@ namespace DeviceCommons.DeviceMessages.Serialization.V2.Parsers public override IDeviceMessageInfoReadingState Parser(ReadOnlySpan bytes) { - throw new NotImplementedException(); + 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 index 651d956..d1f574f 100644 --- a/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingStatesParser.cs +++ b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingStatesParser.cs @@ -12,7 +12,16 @@ namespace DeviceCommons.DeviceMessages.Serialization.V2.Parsers public override IDeviceMessageInfoReadingStates Parser(ReadOnlySpan bytes) { - throw new NotImplementedException(); + 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 index 8e2da0a..52e8577 100644 --- a/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingsParser.cs +++ b/DeviceCommons/DeviceMessages/Serialization/V2/Parsers/DeviceMessageInfoReadingsParser.cs @@ -12,7 +12,16 @@ namespace DeviceCommons.DeviceMessages.Serialization.V2.Parsers public override IDeviceMessageInfoReadings Parser(ReadOnlySpan bytes) { - throw new NotImplementedException(); + 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 index 7711ef7..453e987 100644 --- a/DeviceCommons/DeviceMessages/Serialization/V2/ProcessVersionData.cs +++ b/DeviceCommons/DeviceMessages/Serialization/V2/ProcessVersionData.cs @@ -1,16 +1,38 @@ -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.V2.Serializers; +using DeviceCommons.DeviceMessages.Serialization.V2.Parsers; +using System.Buffers; +using DeviceCommons.DataHandling; namespace DeviceCommons.DeviceMessages.Serialization.V2 { public class ProcessVersionData : IProcessVersion { - public ProcessVersionData(IDeviceMessage model, ReadOnlySpan bytes) + 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 index 0900931..c0593ca 100644 --- a/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageChildSerializer.cs +++ b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageChildSerializer.cs @@ -1,4 +1,5 @@ -using DeviceCommons.DeviceMessages.Abstractions; +using DeviceCommons.DataHandling; +using DeviceCommons.DeviceMessages.Abstractions; using DeviceCommons.DeviceMessages.Models.V1; using System.Buffers; @@ -10,9 +11,18 @@ namespace DeviceCommons.DeviceMessages.Serialization.V2.Serializers { } - public override void Serializer(ArrayBufferWriter writer) + public override void Serializer(ArrayBufferWriter writer, IDeviceMessageChild message) { - throw new NotImplementedException(); + 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 index b85c900..d6b9b8e 100644 --- a/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageHeaderSerializer.cs +++ b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageHeaderSerializer.cs @@ -1,5 +1,4 @@ -using DeviceCommons.DataHandling; -using DeviceCommons.DeviceMessages.Abstractions; +using DeviceCommons.DeviceMessages.Abstractions; using DeviceCommons.DeviceMessages.Models; using System.Buffers; @@ -11,9 +10,12 @@ namespace DeviceCommons.DeviceMessages.Serialization.V2.Serializers { } - public override void Serializer(ArrayBufferWriter writer) + private readonly static int HEADERLENGTH = 4; + public override void Serializer(ArrayBufferWriter writer, IDeviceMessageHeader model) { - throw new NotImplementedException(); + 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 index aca89f9..0b396ca 100644 --- a/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingSerializer.cs +++ b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingSerializer.cs @@ -1,4 +1,5 @@ -using DeviceCommons.DeviceMessages.Abstractions; +using DeviceCommons.DataHandling; +using DeviceCommons.DeviceMessages.Abstractions; using DeviceCommons.DeviceMessages.Models.V1; using System.Buffers; @@ -10,9 +11,12 @@ namespace DeviceCommons.DeviceMessages.Serialization.V2.Serializers { } - public override void Serializer(ArrayBufferWriter writer) + public override void Serializer(ArrayBufferWriter writer, IDeviceMessageInfoReading message) { - throw new NotImplementedException(); + 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 index 4140693..a08c110 100644 --- a/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingStateSerializer.cs +++ b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingStateSerializer.cs @@ -1,4 +1,5 @@ using DeviceCommons.DeviceMessages.Abstractions; +using DeviceCommons.DeviceMessages.Enums; using DeviceCommons.DeviceMessages.Models.V1; using System.Buffers; @@ -6,15 +7,30 @@ namespace DeviceCommons.DeviceMessages.Serialization.V2.Serializers { public class DeviceMessageInfoReadingStateSerializer : AbstractMessageSerializer, IDeviceMessageInfoReadingStateSerializer { - public DeviceMessageInfoReadingStateSerializer(IDeviceMessageInfoReadingState t) : base(t) + public DeviceMessageInfoReadingStateSerializer() : base(new DeviceMessageInfoReadingState()) { } - public override void Serializer(ArrayBufferWriter writer) + public override void Serializer(ArrayBufferWriter writer, IDeviceMessageInfoReadingState message) { - - throw new NotImplementedException(); + 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 index 5bbe5ba..21a7ad2 100644 --- a/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingStatesSerializer.cs +++ b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingStatesSerializer.cs @@ -1,4 +1,5 @@ -using DeviceCommons.DeviceMessages.Abstractions; +using DeviceCommons.DataHandling; +using DeviceCommons.DeviceMessages.Abstractions; using DeviceCommons.DeviceMessages.Models.V1; using System.Buffers; @@ -10,9 +11,18 @@ namespace DeviceCommons.DeviceMessages.Serialization.V2.Serializers { } - public override void Serializer(ArrayBufferWriter writer) + public override void Serializer(ArrayBufferWriter writer, IDeviceMessageInfoReadingStates message) { - throw new NotImplementedException(); + 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 index 73ca730..eb53ac0 100644 --- a/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingsSerializer.cs +++ b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoReadingsSerializer.cs @@ -1,4 +1,5 @@ -using DeviceCommons.DeviceMessages.Abstractions; +using DeviceCommons.DataHandling; +using DeviceCommons.DeviceMessages.Abstractions; using DeviceCommons.DeviceMessages.Models.V1; using System.Buffers; @@ -10,9 +11,18 @@ namespace DeviceCommons.DeviceMessages.Serialization.V2.Serializers { } - public override void Serializer(ArrayBufferWriter writer) + public override void Serializer(ArrayBufferWriter writer, IDeviceMessageInfoReadings message) { - throw new NotImplementedException(); + 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 index 4b49636..cf7602b 100644 --- a/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoSerializer.cs +++ b/DeviceCommons/DeviceMessages/Serialization/V2/Serializers/DeviceMessageInfoSerializer.cs @@ -1,4 +1,5 @@ -using DeviceCommons.DeviceMessages.Abstractions; +using DeviceCommons.DataHandling; +using DeviceCommons.DeviceMessages.Abstractions; using DeviceCommons.DeviceMessages.Models.V1; using System.Buffers; @@ -10,9 +11,14 @@ namespace DeviceCommons.DeviceMessages.Serialization.V2.Serializers { } - public override void Serializer(ArrayBufferWriter writer) + public override void Serializer(ArrayBufferWriter writer, IDeviceMessageInfo message) { - throw new NotImplementedException(); + 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 fe22e6e..0130b8b 100644 --- a/TestProject1/BaseUnitTest.cs +++ b/TestProject1/BaseUnitTest.cs @@ -8,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/BuildUnitTest.cs b/TestProject1/BuildUnitTest.cs index 5410a26..1fbe691 100644 --- a/TestProject1/BuildUnitTest.cs +++ b/TestProject1/BuildUnitTest.cs @@ -33,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 f477776..83eb13d 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] -- Gitee