diff --git a/src/JT809.Protocol.Test/JT809MessageBody/JT809_0x1102Test.cs b/src/JT809.Protocol.Test/JT809MessageBody/JT809_0x1102Test.cs new file mode 100644 index 0000000..a2b7fb2 --- /dev/null +++ b/src/JT809.Protocol.Test/JT809MessageBody/JT809_0x1102Test.cs @@ -0,0 +1,67 @@ +using JT808.Protocol.Extensions; +using JT809.Protocol.Enums; +using JT809.Protocol.Internal; +using JT809.Protocol.MessageBody; +using System; +using System.Collections.Generic; +using System.Text; +using Xunit; + +namespace JT809.Protocol.Test.JT809MessageBody +{ + public class JT809_0x1102Test + { + private JT809Serializer JT809_2019_Serializer = new JT809Serializer(new DefaultGlobalConfig() { Version = JT809Version.JTT2019 }); + [Fact] + public void Test1() + { + var bytes = "5B0000004C000000011102000027660000000000000000000000005F0596041102000000243330303030313233343500000000005F059604000000005F059604000000000A0000001E17B45D".ToHexBytes(); + JT809Package jT809Package = JT809_2019_Serializer.Deserialize(bytes); + + Assert.Equal((uint)1, jT809Package.Header.MsgSN); + Assert.Equal((ushort)0x1102, jT809Package.Header.BusinessType); + Assert.Equal((uint)10086, jT809Package.Header.MsgGNSSCENTERID); + Assert.Equal((uint)76, jT809Package.Header.MsgLength); + Assert.Equal("0.0.0", jT809Package.Header.Version.ToString()); + Assert.Equal(DateTime.Parse("2020-07-08 17:46:44"), jT809Package.Header.Time); + + var body = jT809Package.Bodies as JT809_0x1102; + Assert.NotNull(body); + Assert.Equal((ushort)0x1102, body.MsgId); + Assert.Equal((uint)36, body.DataLength); + Assert.Equal("3000012345", body.PlateformId); + Assert.Equal(DateTime.Parse("2020-07-08 17:46:44"), body.StartTime); + Assert.Equal(DateTime.Parse("2020-07-08 17:46:44"), body.EndTime); + Assert.Equal((uint)0, body.LoseDymamicSum); + Assert.Equal((byte)10, body.DisconnectNum); + Assert.Equal((uint)30, body.DisconnectTime); + } + + [Fact] + public void Test2() + { + var package = new JT809Package + { + Header = new JT809Header + { + BusinessType = 0x1102, + MsgGNSSCENTERID = 10086, + Time = DateTime.Parse("2020-07-08 17:46:44"), + Version = new JT809Header_Version(0, 0, 0), + }, + Bodies = new JT809_0x1102 + { + SubBusinessType = 0x1102, + DataLength = 36, + PlateformId = "3000012345", + StartTime = DateTime.Parse("2020-07-08 17:46:44"), + EndTime = DateTime.Parse("2020-07-08 17:46:44"), + LoseDymamicSum = 0, + DisconnectNum = 10, + DisconnectTime = 30, + } + }; + Assert.Equal("5B0000004C000000011102000027660000000000000000000000005F0596041102000000243330303030313233343500000000005F059604000000005F059604000000000A0000001E17B45D", JT809_2019_Serializer.Serialize(package).ToHexString()); + } + } +} diff --git a/src/JT809.Protocol/MessageBody/JT809_0x1102.cs b/src/JT809.Protocol/MessageBody/JT809_0x1102.cs index 75e60de..f6a5b56 100644 --- a/src/JT809.Protocol/MessageBody/JT809_0x1102.cs +++ b/src/JT809.Protocol/MessageBody/JT809_0x1102.cs @@ -55,8 +55,12 @@ namespace JT809.Protocol.MessageBody public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) { JT809_0x1102 value = new JT809_0x1102(); + value.SubBusinessType = reader.ReadUInt16(); + writer.WriteNumber($"[{value.SubBusinessType.ReadNumber()}]子业务类型标识", value.SubBusinessType); + value.DataLength = reader.ReadUInt32(); + writer.WriteNumber($"[{value.DataLength.ReadNumber()}]后续数据长度", value.DataLength); var virtualHex = reader.ReadVirtualArray(11); - value.PlateformId = reader.ReadBigNumber(11); + value.PlateformId = reader.ReadString(11); writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]平台唯一编码", value.PlateformId); virtualHex = reader.ReadVirtualArray(8); value.StartTime = reader.ReadUTCDateTime(); @@ -70,13 +74,14 @@ namespace JT809.Protocol.MessageBody writer.WriteNumber($"[{value.DisconnectNum.ReadNumber()}]START_TIME~END_TIME期间下级监控平台链路断开次数", value.DisconnectNum); value.DisconnectTime = reader.ReadUInt32(); writer.WriteNumber($"[{value.DisconnectTime.ReadNumber()}]START_TIME~END_TIME期间下级监控平台链路断开总时长,用秒表示", value.DisconnectTime); - } public JT809_0x1102 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) { JT809_0x1102 value = new JT809_0x1102(); - value.PlateformId = reader.ReadBigNumber(11); + value.SubBusinessType = reader.ReadUInt16(); + value.DataLength = reader.ReadUInt32(); + value.PlateformId = reader.ReadString(11); value.StartTime = reader.ReadUTCDateTime(); value.EndTime = reader.ReadUTCDateTime(); value.LoseDymamicSum = reader.ReadUInt32(); @@ -87,7 +92,9 @@ namespace JT809.Protocol.MessageBody public void Serialize(ref JT809MessagePackWriter writer, JT809_0x1102 value, IJT809Config config) { - writer.WriteBigNumber(value.PlateformId, 11); + writer.WriteUInt16(value.SubBusinessType); + writer.WriteUInt32(value.DataLength); + writer.WriteStringPadRight(value.PlateformId, 11); writer.WriteUTCDateTime(value.StartTime); writer.WriteUTCDateTime(value.EndTime); writer.WriteUInt32(value.LoseDymamicSum);