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 算法加密;