浏览代码

修复1102解析错误

tags/v2.2.0
yedajiang44 4 年前
父节点
当前提交
147b59633a
共有 2 个文件被更改,包括 78 次插入4 次删除
  1. +67
    -0
      src/JT809.Protocol.Test/JT809MessageBody/JT809_0x1102Test.cs
  2. +11
    -4
      src/JT809.Protocol/MessageBody/JT809_0x1102.cs

+ 67
- 0
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());
}
}
}

+ 11
- 4
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) public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config)
{ {
JT809_0x1102 value = new JT809_0x1102(); 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); var virtualHex = reader.ReadVirtualArray(11);
value.PlateformId = reader.ReadBigNumber(11);
value.PlateformId = reader.ReadString(11);
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]平台唯一编码", value.PlateformId); writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]平台唯一编码", value.PlateformId);
virtualHex = reader.ReadVirtualArray(8); virtualHex = reader.ReadVirtualArray(8);
value.StartTime = reader.ReadUTCDateTime(); value.StartTime = reader.ReadUTCDateTime();
@@ -70,13 +74,14 @@ namespace JT809.Protocol.MessageBody
writer.WriteNumber($"[{value.DisconnectNum.ReadNumber()}]START_TIME~END_TIME期间下级监控平台链路断开次数", value.DisconnectNum); writer.WriteNumber($"[{value.DisconnectNum.ReadNumber()}]START_TIME~END_TIME期间下级监控平台链路断开次数", value.DisconnectNum);
value.DisconnectTime = reader.ReadUInt32(); value.DisconnectTime = reader.ReadUInt32();
writer.WriteNumber($"[{value.DisconnectTime.ReadNumber()}]START_TIME~END_TIME期间下级监控平台链路断开总时长,用秒表示", value.DisconnectTime); writer.WriteNumber($"[{value.DisconnectTime.ReadNumber()}]START_TIME~END_TIME期间下级监控平台链路断开总时长,用秒表示", value.DisconnectTime);

} }


public JT809_0x1102 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) public JT809_0x1102 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
{ {
JT809_0x1102 value = new JT809_0x1102(); 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.StartTime = reader.ReadUTCDateTime();
value.EndTime = reader.ReadUTCDateTime(); value.EndTime = reader.ReadUTCDateTime();
value.LoseDymamicSum = reader.ReadUInt32(); value.LoseDymamicSum = reader.ReadUInt32();
@@ -87,7 +92,9 @@ namespace JT809.Protocol.MessageBody


public void Serialize(ref JT809MessagePackWriter writer, JT809_0x1102 value, IJT809Config config) 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.StartTime);
writer.WriteUTCDateTime(value.EndTime); writer.WriteUTCDateTime(value.EndTime);
writer.WriteUInt32(value.LoseDymamicSum); writer.WriteUInt32(value.LoseDymamicSum);


正在加载...
取消
保存