From cfa2cf20839b9be972722a5c2a2299b0e5dfd6a8 Mon Sep 17 00:00:00 2001
From: yedajiang44 <602830483@qq.com>
Date: Wed, 24 Jul 2024 15:18:08 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=98=AF=E5=90=A6=E5=90=88?=
=?UTF-8?q?=E5=B9=B6=E5=88=86=E5=8C=85=E6=88=90=E5=8A=9F=E7=9A=84=E5=B1=9E?=
=?UTF-8?q?=E6=80=A7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../MessageBody/JT808_0x9208.cs | 2 +-
src/JT808.Protocol.Test/JT808SerializerTest.cs | 4 +++-
src/JT808.Protocol/Internal/DefaultMerger.cs | 2 +-
src/JT808.Protocol/JT808.Protocol.xml | 5 +++++
src/JT808.Protocol/JT808HeaderMessageBodyProperty.cs | 4 ++++
5 files changed, 14 insertions(+), 3 deletions(-)
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 算法加密;