瀏覽代碼

解决8103自定义协议未能注册的情况下,导致协议解析报错

tags/v2.4.1
waterliu99 3 年之前
父節點
當前提交
9141e72e1b
共有 2 個檔案被更改,包括 23 行新增1 行删除
  1. +16
    -0
      src/JT808.Protocol.Test/MessageBody/JT808_0x0104Test.cs
  2. +7
    -1
      src/JT808.Protocol/MessageBody/JT808_0x0104.cs

+ 16
- 0
src/JT808.Protocol.Test/MessageBody/JT808_0x0104Test.cs 查看文件

@@ -143,5 +143,21 @@ namespace JT808.Protocol.Test.MessageBody
}
}
}
[Fact]
public void Test2_2()
{
byte[] bytes = "7E010400C604052458039503D800020100000077BE09010101002D1400000064000500141400000320001F020101002D0F00000064000500191900000840001F030101002D0F00000064000500191900000840001F040101002D0F00000064000500191900000840001F050101002D0F00000064010500191900000840001F060101002D0F00000064000500191900000840001F070101002D0F000000640103001919000004CE001F080101002D0F00000064000500191900000840001F090101000F0F000000C8010500191900000400001F127E".ToHexBytes();
JT808Package jT808_0X8104 = JT808Serializer.Deserialize<JT808Package>(bytes);
Assert.Equal(Enums.JT808MsgId.查询终端参数应答.ToUInt16Value(), jT808_0X8104.Header.MsgId);
Assert.Equal(0x03d8, jT808_0X8104.Header.MsgNum);
Assert.Equal("40524580395", jT808_0X8104.Header.TerminalPhoneNo);

JT808_0x0104 JT808Bodies = (JT808_0x0104)jT808_0X8104.Bodies;
Assert.Equal(0x0002, JT808Bodies.MsgNum);
Assert.Equal(1, JT808Bodies.AnswerParamsCount);
Assert.Null(JT808Bodies.ParamList);


}
}
}

+ 7
- 1
src/JT808.Protocol/MessageBody/JT808_0x0104.cs 查看文件

@@ -57,9 +57,15 @@ namespace JT808.Protocol.MessageBody
}
else
{
jT808_0x0104.ParamList = new List<JT808_0x8103_BodyBase> { JT808MessagePackFormatterResolverExtensions.JT808DynamicDeserialize(instance, ref reader, config) };
jT808_0x0104.ParamList = new List<JT808_0x8103_BodyBase> { JT808MessagePackFormatterResolverExtensions.JT808DynamicDeserialize(instance, ref reader, config) };
}
}
else {
//对于未能解析的自定义项,过滤其长度,以保证后续解析正常
reader.Skip(4);//跳过参数id长度
var len = reader.ReadByte();//获取协议长度
reader.Skip(len);//跳过协议内容
}
}
return jT808_0x0104;
}


Loading…
取消
儲存