From 5f84197294e714bb113ec7d01da9d2092a213342 Mon Sep 17 00:00:00 2001
From: yedajiang44 <602830483@qq.com>
Date: Tue, 1 Sep 2020 09:21:29 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D0x1300=E5=AD=90=E4=B8=9A?=
=?UTF-8?q?=E5=8A=A10x1303?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../SubMessageBody/JT809_0x1300_0x1303.cs | 50 ++++++++++---------
1 file changed, 27 insertions(+), 23 deletions(-)
diff --git a/src/JT809.Protocol/SubMessageBody/JT809_0x1300_0x1303.cs b/src/JT809.Protocol/SubMessageBody/JT809_0x1300_0x1303.cs
index 4b5c347..57aeaef 100644
--- a/src/JT809.Protocol/SubMessageBody/JT809_0x1300_0x1303.cs
+++ b/src/JT809.Protocol/SubMessageBody/JT809_0x1300_0x1303.cs
@@ -14,21 +14,31 @@ namespace JT809.Protocol.SubMessageBody
/// 子业务类型标识:UP_PLATFORM_MSG_RETRAN_REQ
/// 描述:下级平台在接收消息时,如发现消息报文序列号不连续,则立即发送消息补传请求。上级平台收到消息补传请求后,根据请求的消息报文序列号或起始时间(当仅填写一项时。另一项全为0),重传相应的消息
///
- public class JT809_0x1300_0x1303:JT809SubBodies, IJT809MessagePackFormatter, IJT809Analyze, IJT809_2019_Version
+ public class JT809_0x1300_0x1303 : JT809SubBodies, IJT809MessagePackFormatter, IJT809Analyze, IJT809_2019_Version
{
public override ushort SubMsgId => JT809SubBusinessType.上传平台间消息补传请求消息.ToUInt16Value();
public override string Description => "上传平台间消息补传请求消息";
+
///
/// 对应需要重传消息地子业务类型标识
///
+ public ushort RetranDataType { get; set; }
+ ///
+ /// 重传消息总数
+ ///
public byte SerialCount { get; set; }
-
///
- /// 需要重传消息的起始报文序列号和结束的报文序列号。如只请求重传一个消息,则起始消息报文序列号和结束消息报文序列号相同
- /// 8位
+ /// 需要重传消息的起始报文序列号
+ /// 如只请求重传一个消息,则起始消息报文序列号和结束消息报文序列号相同
///
- public List SerialList { get; set; }
+ public uint BeginMessageNumber { get; set; }
+ ///
+ /// 需要重传消息的结束的报文序列号
+ /// 如只请求重传一个消息,则起始消息报文序列号和结束消息报文序列号相同
+ ///
+ public uint EndMessageNumber { get; set; }
+
///
/// 重传起始系统utc时间
/// 8位
@@ -40,14 +50,8 @@ namespace JT809.Protocol.SubMessageBody
var value = new JT809_0x1300_0x1303();
value.SerialCount = reader.ReadByte();
writer.WriteNumber($"[{ value.SerialCount.ReadNumber()}]对应需要重传消息地子业务类型标识", value.SerialCount);
- value.SerialList = new List();
- writer.WriteStartArray("重传消息地子业务类型标识列表");
- for (int i = 0; i < SerialCount; i++)
- {
- var array = reader.ReadArray(8).ToArray();
- writer.WriteString($"[{array.ToHexString()}]需要重传消息的起始报文序列号和结束的报文序列号", array);
- }
- writer.WriteEndArray();
+ writer.WriteNumber($"[{value.BeginMessageNumber.ReadNumber()}需要重传消息的起始报文序列号]", value.BeginMessageNumber);
+ writer.WriteNumber($"[{value.EndMessageNumber.ReadNumber()}需要重传消息的结束报文序列号]", value.EndMessageNumber);
var virtualHex = reader.ReadVirtualArray(8);
value.Time = reader.ReadUTCDateTime();
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]重传起始系统utc时间", value.Time);
@@ -55,24 +59,24 @@ namespace JT809.Protocol.SubMessageBody
public JT809_0x1300_0x1303 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
{
- var value= new JT809_0x1300_0x1303();
+ var value = new JT809_0x1300_0x1303();
+ value.RetranDataType = reader.ReadUInt16();
value.SerialCount = reader.ReadByte();
- value.SerialList = new List();
- for (int i = 0; i < SerialCount; i++)
- {
- value.SerialList.Add(reader.ReadArray(8).ToArray());
- }
+ value.BeginMessageNumber = reader.ReadUInt32();
+ value.EndMessageNumber = reader.ReadUInt32();
+ if (value.SerialCount != value.EndMessageNumber - value.BeginMessageNumber + 1) throw new AggregateException($"序列号间隔[{value.BeginMessageNumber}-{value.EndMessageNumber}]与重传消息总数:{value.SerialCount}不符");
value.Time = reader.ReadUTCDateTime();
return value;
}
public void Serialize(ref JT809MessagePackWriter writer, JT809_0x1300_0x1303 value, IJT809Config config)
{
+ if (value.EndMessageNumber - value.BeginMessageNumber >= byte.MaxValue) throw new AggregateException("序列号间隔不能大于255");
+ value.SerialCount = (byte)(value.EndMessageNumber - value.BeginMessageNumber + 1);
+ writer.WriteUInt16(RetranDataType);
writer.WriteByte(value.SerialCount);
- foreach (var item in value.SerialList)
- {
- writer.WriteArray(item);
- }
+ writer.WriteUInt32(value.BeginMessageNumber);
+ writer.WriteUInt32(value.EndMessageNumber);
writer.WriteUTCDateTime(value.Time);
}
}