ソースを参照

修复0x0104

tags/v2.6.2
yedajiang44 1年前
コミット
0325ad6b55
2個のファイルの変更24行の追加13行の削除
  1. +11
    -1
      src/JT808.Protocol.Test/MessageBody/JT808_0x8104Test.cs
  2. +13
    -12
      src/JT808.Protocol/MessageBody/JT808_0x0104.cs

+ 11
- 1
src/JT808.Protocol.Test/MessageBody/JT808_0x8104Test.cs ファイルの表示

@@ -1,4 +1,5 @@
using JT808.Protocol.Extensions; using JT808.Protocol.Extensions;
using JT808.Protocol.MessageBody;
using Xunit; using Xunit;


namespace JT808.Protocol.Test.MessageBody namespace JT808.Protocol.Test.MessageBody
@@ -46,10 +47,19 @@ namespace JT808.Protocol.Test.MessageBody
var data2013 = JT808.Protocol.Enums.JT808MsgId._0x8104.Create("12345678900"); var data2013 = JT808.Protocol.Enums.JT808MsgId._0x8104.Create("12345678900");
var hex = JT808Serializer.Serialize(data2013, Enums.JT808Version.JTT2019); var hex = JT808Serializer.Serialize(data2013, Enums.JT808Version.JTT2019);


var jT808HeaderPackage1= JT808Serializer.HeaderDeserialize(hex, Enums.JT808Version.JTT2019);
var jT808HeaderPackage1 = JT808Serializer.HeaderDeserialize(hex, Enums.JT808Version.JTT2019);
Assert.Equal("12345678900", jT808HeaderPackage1.Header.TerminalPhoneNo); Assert.Equal("12345678900", jT808HeaderPackage1.Header.TerminalPhoneNo);
var jT808Package1 = JT808Serializer.Deserialize(hex, Enums.JT808Version.JTT2019); var jT808Package1 = JT808Serializer.Deserialize(hex, Enums.JT808Version.JTT2019);
Assert.Equal("12345678900", jT808Package1.Header.TerminalPhoneNo); Assert.Equal("12345678900", jT808Package1.Header.TerminalPhoneNo);
} }

[Theory]
[InlineData("7E0104004B01801550511313AE00000900000001040000000F00000002040000000A00000013103232332E3130382E3133332E31363300000000170100000000180400000328000000550400000078000000560400000000027E")]
public void Test4(string hex)
{
var bytes = hex.ToHexBytes();
var jT808Package = JT808Serializer.Deserialize(bytes);
Assert.IsType<JT808_0x0104>(jT808Package.Bodies);
}
} }
} }

+ 13
- 12
src/JT808.Protocol/MessageBody/JT808_0x0104.cs ファイルの表示

@@ -1,11 +1,11 @@
using JT808.Protocol.Enums;
using System;
using System.Collections.Generic;
using System.Text.Json;
using JT808.Protocol.Enums;
using JT808.Protocol.Extensions; using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters; using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces; using JT808.Protocol.Interfaces;
using JT808.Protocol.MessagePack; using JT808.Protocol.MessagePack;
using System;
using System.Collections.Generic;
using System.Text.Json;


namespace JT808.Protocol.MessageBody namespace JT808.Protocol.MessageBody
{ {
@@ -17,7 +17,7 @@ namespace JT808.Protocol.MessageBody
/// <summary> /// <summary>
/// 0x0104 /// 0x0104
/// </summary> /// </summary>
public ushort MsgId => 0x0104;
public ushort MsgId => 0x0104;
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
@@ -50,7 +50,7 @@ namespace JT808.Protocol.MessageBody
JT808_0x0104 jT808_0x0104 = new JT808_0x0104(); JT808_0x0104 jT808_0x0104 = new JT808_0x0104();
jT808_0x0104.MsgNum = reader.ReadUInt16(); jT808_0x0104.MsgNum = reader.ReadUInt16();
jT808_0x0104.AnswerParamsCount = reader.ReadByte(); jT808_0x0104.AnswerParamsCount = reader.ReadByte();
for (int i = 0; i < jT808_0x0104.AnswerParamsCount; i++)
for (int i = 0; i < jT808_0x0104.AnswerParamsCount && reader.ReadCurrentRemainContentLength() >= 4; i++)
{ {
var paramId = reader.ReadVirtualUInt32();//参数ID var paramId = reader.ReadVirtualUInt32();//参数ID
if (config.JT808_0X8103_Factory.Map.TryGetValue(paramId, out object instance)) if (config.JT808_0X8103_Factory.Map.TryGetValue(paramId, out object instance))
@@ -58,14 +58,14 @@ namespace JT808.Protocol.MessageBody
JT808_0x8103_BodyBase value = instance.DeserializeExt<JT808_0x8103_BodyBase>(ref reader, config); JT808_0x8103_BodyBase value = instance.DeserializeExt<JT808_0x8103_BodyBase>(ref reader, config);
if (jT808_0x0104.ParamList == null) if (jT808_0x0104.ParamList == null)
{ {
jT808_0x0104.ParamList = new ();
jT808_0x0104.ParamList = new();
} }
if (value != null) if (value != null)
{ {
jT808_0x0104.ParamList.Add(value); jT808_0x0104.ParamList.Add(value);
} }
} }
else
else
{ {
//对于未能解析的自定义项,过滤其长度,以保证后续解析正常 //对于未能解析的自定义项,过滤其长度,以保证后续解析正常
reader.Skip(4);//跳过参数id长度 reader.Skip(4);//跳过参数id长度
@@ -84,7 +84,7 @@ namespace JT808.Protocol.MessageBody
public override void Serialize(ref JT808MessagePackWriter writer, JT808_0x0104 value, IJT808Config config) public override void Serialize(ref JT808MessagePackWriter writer, JT808_0x0104 value, IJT808Config config)
{ {
writer.WriteUInt16(value.MsgNum); writer.WriteUInt16(value.MsgNum);
writer.WriteByte(value.AnswerParamsCount);
writer.WriteByte((byte)value.ParamList.Count);
foreach (var item in value.ParamList) foreach (var item in value.ParamList)
{ {
IJT808MessagePackFormatter formatter = config.GetMessagePackFormatterByType(item.GetType()); IJT808MessagePackFormatter formatter = config.GetMessagePackFormatterByType(item.GetType());
@@ -103,15 +103,16 @@ namespace JT808.Protocol.MessageBody
jT808_0x0104.MsgNum = reader.ReadUInt16(); jT808_0x0104.MsgNum = reader.ReadUInt16();
jT808_0x0104.AnswerParamsCount = reader.ReadByte(); jT808_0x0104.AnswerParamsCount = reader.ReadByte();
writer.WriteNumber($"[{jT808_0x0104.MsgNum.ReadNumber()}]应答流水号", jT808_0x0104.MsgNum); writer.WriteNumber($"[{jT808_0x0104.MsgNum.ReadNumber()}]应答流水号", jT808_0x0104.MsgNum);
writer.WriteNumber($"[{ jT808_0x0104.AnswerParamsCount.ReadNumber()}]应答参数个数", jT808_0x0104.AnswerParamsCount);
writer.WriteNumber($"[{jT808_0x0104.AnswerParamsCount.ReadNumber()}]应答参数个数", jT808_0x0104.AnswerParamsCount);
writer.WriteStartArray($"参数列表"); writer.WriteStartArray($"参数列表");
for (int i = 0; i < jT808_0x0104.AnswerParamsCount; i++)
for (int i = 0; i < jT808_0x0104.AnswerParamsCount && reader.ReadCurrentRemainContentLength() >= 4; i++)
{ {
writer.WriteStartObject(); writer.WriteStartObject();
var paramId = reader.ReadVirtualUInt32();//参数ID var paramId = reader.ReadVirtualUInt32();//参数ID
if (config.JT808_0X8103_Factory.Map.TryGetValue(paramId, out object instance)) if (config.JT808_0X8103_Factory.Map.TryGetValue(paramId, out object instance))
{ {
if (instance is IJT808Analyze analyze) {
if (instance is IJT808Analyze analyze)
{
analyze.Analyze(ref reader, writer, config); analyze.Analyze(ref reader, writer, config);
} }
} }


読み込み中…
キャンセル
保存