diff --git a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao/MessageBody/JT808_0x9208.cs b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao/MessageBody/JT808_0x9208.cs index ee22969..e1bb881 100644 --- a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao/MessageBody/JT808_0x9208.cs +++ b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.SuBiao/MessageBody/JT808_0x9208.cs @@ -137,7 +137,7 @@ namespace JT808.Protocol.Extensions.SuBiao.MessageBody writer.WriteByte(value.AlarmIdentification.AttachCount); writer.WriteByte(value.AlarmIdentification.Retain); writer.WriteString(value.AlarmId.PadRight(32, '\0')); - writer.WriteArray(Retain); + writer.WriteArray(value.Retain); } } } diff --git a/src/JT808.Protocol.Test/JT808SerializerTest.cs b/src/JT808.Protocol.Test/JT808SerializerTest.cs index 09376c0..241ef48 100644 --- a/src/JT808.Protocol.Test/JT808SerializerTest.cs +++ b/src/JT808.Protocol.Test/JT808SerializerTest.cs @@ -52,7 +52,7 @@ namespace JT808.Protocol.Test { var config = new DefaultGlobalConfig("merge"); config.EnableAutoMerge = true; - config.AutoMergeTimeoutSecond = 5; + config.AutoMergeTimeoutSecond = 500; var array = new[] { //分包数据第一包 @@ -67,6 +67,7 @@ namespace JT808.Protocol.Test var package = config.GetSerializer().Deserialize(array[i - 1].ToHexBytes()); if (i == array.Length) { + Assert.True(package.Header.MessageBodyProperty.IsMerged); Assert.NotNull(package.Bodies); //分包合并成功并获取消息体进行处理 if (package.Bodies is JT808_0x0104 _0x0104 && _0x0104.AnswerParamsCount > 0) @@ -86,6 +87,7 @@ namespace JT808.Protocol.Test var package = config.GetSerializer().Deserialize(array[i].ToHexBytes()); if (i == 0) { + Assert.True(package.Header.MessageBodyProperty.IsMerged); Assert.NotNull(package.Bodies); //分包合并成功并获取消息体进行处理 if (package.Bodies is JT808_0x0104 _0x0104 && _0x0104.AnswerParamsCount > 0) diff --git a/src/JT808.Protocol/Internal/DefaultMerger.cs b/src/JT808.Protocol/Internal/DefaultMerger.cs index eef59e7..d28099b 100644 --- a/src/JT808.Protocol/Internal/DefaultMerger.cs +++ b/src/JT808.Protocol/Internal/DefaultMerger.cs @@ -41,7 +41,6 @@ namespace JT808.Protocol.Internal /// public bool TryMerge(JT808Header header, byte[] data, IJT808Config config, out JT808Bodies body) { - // TODO: 添加SplitPackages缓存超时,达到阈值时移除该项缓存 body = null; var timeoutKey = GenerateKey(header.TerminalPhoneNo, header.MsgId); if (!CheckTimeout(timeoutKey)) return false; @@ -65,6 +64,7 @@ namespace JT808.Protocol.Internal if (config.MsgIdFactory.TryGetValue(header.MsgId, out var value) && value is JT808Bodies instance) { body = instance.DeserializeExt(ref reader, config); + header.MessageBodyProperty.IsMerged = true; return true; } } diff --git a/src/JT808.Protocol/JT808.Protocol.xml b/src/JT808.Protocol/JT808.Protocol.xml index 268fdb7..af8e06e 100644 --- a/src/JT808.Protocol/JT808.Protocol.xml +++ b/src/JT808.Protocol/JT808.Protocol.xml @@ -6089,6 +6089,11 @@ false-0 消息头中无消息包封装项字段。 + + + 当为true时,表示是否已自动合并为完整的包 + + 加密标识,0为不加密 diff --git a/src/JT808.Protocol/JT808HeaderMessageBodyProperty.cs b/src/JT808.Protocol/JT808HeaderMessageBodyProperty.cs index de35c38..556769d 100644 --- a/src/JT808.Protocol/JT808HeaderMessageBodyProperty.cs +++ b/src/JT808.Protocol/JT808HeaderMessageBodyProperty.cs @@ -91,6 +91,10 @@ namespace JT808.Protocol /// public bool IsPackage { get; set; } = false; /// + /// 当为true时,表示是否已自动合并为完整的包 + /// + public bool IsMerged { get; set; } + /// /// 加密标识,0为不加密 /// 当此三位都为 0,表示消息体不加密; /// 当第 10 位为 1,表示消息体经过 RSA 算法加密;