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