Преглед изворни кода

v2.2.5

1.修复0x0608协议
2.增加808消息枚举类型及扩展方法
3.增加0x0100和0x0102分析工具
tags/v2.2.5
SmallChi(Koike) пре 5 година
родитељ
комит
d9b1307d39
4 измењених фајлова са 92 додато и 2 уклоњено
  1. +7
    -0
      src/JT808.Protocol.Test/MessageBody/JT808_0x0100Test.cs
  2. +14
    -0
      src/JT808.Protocol.Test/MessageBody/JT808_0x0102Test.cs
  3. +42
    -1
      src/JT808.Protocol/MessageBody/JT808_0x0100.cs
  4. +29
    -1
      src/JT808.Protocol/MessageBody/JT808_0x0102.cs

+ 7
- 0
src/JT808.Protocol.Test/MessageBody/JT808_0x0100Test.cs Прегледај датотеку

@@ -104,5 +104,12 @@ namespace JT808.Protocol.Test.MessageBody
Assert.Equal("CHI123".PadLeft(30, '0'), JT808Bodies.TerminalId);
Assert.Equal("smallchi123".PadLeft(30, '0'), JT808Bodies.TerminalModel);
}

[Fact]
public void Test2019_3()
{
byte[] bytes = "7E010040540100000000000123456789000A00280032303030303030303132333430303030303030303030303030303030303030736D616C6C63686931323330303030303030303030303030303030303030303030303043484931323301D4C1413132333435B27E".ToHexBytes();
string json = JT808Serializer.Analyze<JT808Package>(bytes);
}
}
}

+ 14
- 0
src/JT808.Protocol.Test/MessageBody/JT808_0x0102Test.cs Прегледај датотеку

@@ -27,6 +27,13 @@ namespace JT808.Protocol.Test.MessageBody
Assert.Equal("45612", jT808LoginRequest.Code);
}

[Fact]
public void Test5()
{
byte[] bodys = "34 35 36 31 32".ToHexBytes();
string json = JT808Serializer.Analyze<JT808_0x0102>(bodys);
}

[Fact]
public void Test2019_1()
{
@@ -51,6 +58,13 @@ namespace JT808.Protocol.Test.MessageBody
Assert.Equal("v2.0.0".PadRight(20,'0'), jT808LoginRequest.SoftwareVersion);
}

[Fact]
public void Test2019_3()
{
byte[] bodys = "05343536313231323334353637383930616263646576322E302E303030303030303030303030303030".ToHexBytes();
string json = JT808Serializer.Analyze<JT808_0x0102>(bodys, JT808Version.JTT2019);
}

[Fact]
public void Test3()
{


+ 42
- 1
src/JT808.Protocol/MessageBody/JT808_0x0100.cs Прегледај датотеку

@@ -1,14 +1,18 @@
using JT808.Protocol.Enums;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;
using JT808.Protocol.MessagePack;
using System.Text.Json;
using System.Buffers;
using System;

namespace JT808.Protocol.MessageBody
{
/// <summary>
/// 终端注册
/// </summary>
public class JT808_0x0100 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x0100>, IJT808_2019_Version
public class JT808_0x0100 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x0100>, IJT808_2019_Version,IJT808Analyze
{
public override ushort MsgId { get; } = 0x0100;
public override string Description => "终端注册";
@@ -104,5 +108,42 @@ namespace JT808.Protocol.MessageBody
writer.WriteByte(value.PlateColor);
writer.WriteString(value.PlateNo);
}
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x0100 jT808_0X0100 = new JT808_0x0100();
jT808_0X0100.AreaID = reader.ReadUInt16();
writer.WriteNumber($"[{jT808_0X0100.AreaID.ReadNumber()}]省域ID", jT808_0X0100.AreaID);
jT808_0X0100.CityOrCountyId = reader.ReadUInt16();
writer.WriteNumber($"[{jT808_0X0100.CityOrCountyId.ReadNumber()}]市县域ID", jT808_0X0100.CityOrCountyId);
if (reader.Version == JT808Version.JTT2019)
{
ReadOnlySpan<byte> midSpan = reader.ReadVirtualArray(11);
jT808_0X0100.MakerId = reader.ReadString(11);
writer.WriteString($"[{midSpan.ToArray().ToHexString()}]制造商ID(11)", jT808_0X0100.MakerId);
ReadOnlySpan<byte> tmSpan = reader.ReadVirtualArray(30);
jT808_0X0100.TerminalModel = reader.ReadString(30);
writer.WriteString($"[{tmSpan.ToArray().ToHexString()}]终端型号(30)", jT808_0X0100.TerminalModel);
ReadOnlySpan<byte> tidSpan = reader.ReadVirtualArray(30);
jT808_0X0100.TerminalId = reader.ReadString(30);
writer.WriteString($"[{tidSpan.ToArray().ToHexString()}]终端型号(30)", jT808_0X0100.TerminalId);
}
else
{
ReadOnlySpan<byte> midSpan = reader.ReadVirtualArray(5);
jT808_0X0100.MakerId = reader.ReadString(5);
writer.WriteString($"[{midSpan.ToArray().ToHexString()}]制造商ID(5)", jT808_0X0100.MakerId);
ReadOnlySpan<byte> tmSpan = reader.ReadVirtualArray(20);
jT808_0X0100.TerminalModel = reader.ReadString(20);
writer.WriteString($"[{tmSpan.ToArray().ToHexString()}]终端型号(20)", jT808_0X0100.TerminalModel);
ReadOnlySpan<byte> tidSpan = reader.ReadVirtualArray(7);
jT808_0X0100.TerminalId = reader.ReadString(7);
writer.WriteString($"[{tidSpan.ToArray().ToHexString()}]终端型号(7)", jT808_0X0100.TerminalId);
}
jT808_0X0100.PlateColor = reader.ReadByte();
writer.WriteNumber($"[{jT808_0X0100.PlateColor.ReadNumber()}]车牌颜色", jT808_0X0100.PlateColor);
ReadOnlySpan<byte> vnoSpan = reader.ReadVirtualArray(reader.ReadCurrentRemainContentLength());
jT808_0X0100.PlateNo = reader.ReadRemainStringContent();
writer.WriteString($"[{vnoSpan.ToArray().ToHexString()}]车牌颜色", jT808_0X0100.PlateNo);
}
}
}

+ 29
- 1
src/JT808.Protocol/MessageBody/JT808_0x0102.cs Прегледај датотеку

@@ -1,14 +1,17 @@
using JT808.Protocol.Enums;
using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;
using JT808.Protocol.MessagePack;
using System;
using System.Text.Json;

namespace JT808.Protocol.MessageBody
{
/// <summary>
/// 终端鉴权
/// </summary>
public class JT808_0x0102 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x0102>, IJT808_2019_Version
public class JT808_0x0102 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x0102>, IJT808_2019_Version, IJT808Analyze
{
public override ushort MsgId { get; } = 0x0102;
public override string Description => "终端鉴权";
@@ -63,5 +66,30 @@ namespace JT808.Protocol.MessageBody
writer.WriteString(value.Code);
}
}

public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x0102 jT808_0X0102 = new JT808_0x0102();
if (reader.Version == JT808Version.JTT2019)
{
jT808_0X0102.CodeLength = reader.ReadByte();
writer.WriteNumber($"[{ jT808_0X0102.CodeLength.ReadNumber()}]鉴权码长度", jT808_0X0102.CodeLength);
ReadOnlySpan<byte> codeSpan = reader.ReadVirtualArray(jT808_0X0102.CodeLength);
jT808_0X0102.Code = reader.ReadString(jT808_0X0102.CodeLength);
writer.WriteString($"[{codeSpan.ToArray().ToHexString()}]鉴权码", jT808_0X0102.Code);
ReadOnlySpan<byte> imeiSpan = reader.ReadVirtualArray(15);
jT808_0X0102.IMEI = reader.ReadString(15);
writer.WriteString($"[{imeiSpan.ToArray().ToHexString()}]IMEI", jT808_0X0102.IMEI);
ReadOnlySpan<byte> svSpan = reader.ReadVirtualArray(20);
jT808_0X0102.SoftwareVersion = reader.ReadString(20);
writer.WriteString($"[{svSpan.ToArray().ToHexString()}]软件版本号", jT808_0X0102.SoftwareVersion);
}
else
{
ReadOnlySpan<byte> codeSpan = reader.ReadVirtualArray(reader.ReadCurrentRemainContentLength());
jT808_0X0102.Code = reader.ReadRemainStringContent();
writer.WriteString($"[{codeSpan.ToArray().ToHexString()}]鉴权码", jT808_0X0102.Code);
}
}
}
}

Loading…
Откажи
Сачувај