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); } }