瀏覽代碼

1.优化序列化反序列化方法,版本号以指定协议版本为主,数据自带版本标识为辅解析协议

2.优化808协议头序列化方法,兼容2013/2019等
tags/v2.4.5
waterliu99 3 年之前
父節點
當前提交
dc7c1b3271
共有 4 個文件被更改,包括 43 次插入66 次删除
  1. +1
    -1
      README.md
  2. +19
    -0
      src/JT808.Protocol.Test/MessageBody/JT808_0x8104Test.cs
  3. +20
    -37
      src/JT808.Protocol/JT808HeaderPackage.cs
  4. +3
    -28
      src/JT808.Protocol/JT808Package.cs

+ 1
- 1
README.md 查看文件

@@ -551,7 +551,7 @@ serviceDescriptors1.AddJT808Configure()
| :---: | :---: | :---: | :---: | :---|
| 1 | 0x1210 | √ | √ | 报警附件信息消息 |
| 2 | 0x1211 | √ | √ | 文件信息上传 |
| 3 | 0x1212 | √ | √ | 文件上传完成消息 |
| 3 | 0x1212 | √ | √ | 文件上传完成消息 |
| 4 | 0x9208 | √ | √ | 报警附件上传指令 |
| 5 | 0x9212 | √ | √ | 文件上传完成消息应答 |
| 6 | 0x1FC4 | √ | √ | 终端升级进度上报 |


+ 19
- 0
src/JT808.Protocol.Test/MessageBody/JT808_0x8104Test.cs 查看文件

@@ -32,5 +32,24 @@ namespace JT808.Protocol.Test.MessageBody
Assert.Equal("12345678900", jT808Package.Header.TerminalPhoneNo);
Assert.Null(jT808Package.Bodies);
}

[Fact]
public void Test3()
{
//用户示例
var bytes = "7E81040000010000000001341990550700016B7E".ToHexBytes();
var jT808Package = JT808Serializer.Deserialize<JT808Package>(bytes, Enums.JT808Version.JTT2019);
var jT808HeaderPackage = JT808Serializer.HeaderDeserialize(bytes, Enums.JT808Version.JTT2019);


//demo示例
var data2013 = JT808.Protocol.Enums.JT808MsgId.查询终端参数.Create("12345678900");
var hex = JT808Serializer.Serialize(data2013, Enums.JT808Version.JTT2019);

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

+ 20
- 37
src/JT808.Protocol/JT808HeaderPackage.cs 查看文件

@@ -33,33 +33,7 @@ namespace JT808.Protocol
/// <summary>
/// 808版本号
/// </summary>
public JT808Version Version
{
get {
if (Header != null)
{
try
{
if (Header.MessageBodyProperty.VersionFlag)
{
return JT808Version.JTT2019;
}
else
{
return JT808Version.JTT2013;
}
}
catch
{
return JT808Version.JTT2013;
}
}
else
{
return JT808Version.JTT2013;
}
}
}
public JT808Version Version { get; set; }
/// <summary>
/// 原数据
/// </summary>
@@ -90,21 +64,30 @@ namespace JT808.Protocol
ushort messageBodyPropertyValue = reader.ReadUInt16();
// 3.2.1.解包消息体属性
this.Header.MessageBodyProperty = new JT808HeaderMessageBodyProperty(messageBodyPropertyValue);
if (this.Header.MessageBodyProperty.VersionFlag)
if (reader.Version == JT808Version.JTT2013Force)
{
//2019版本
// 3.3.读取协议版本号
this.Header.ProtocolVersion = reader.ReadByte();
// 3.4.读取终端手机号
this.Header.TerminalPhoneNo = reader.ReadBCD(20, config.Trim);
reader.Version = JT808Version.JTT2019;
this.Header.TerminalPhoneNo = reader.ReadBCD(config.TerminalPhoneNoLength, config.Trim);
reader.Version = JT808Version.JTT2013;
}
else
{
//2013版本
// 3.3.读取终端手机号
this.Header.TerminalPhoneNo = reader.ReadBCD(config.TerminalPhoneNoLength, config.Trim);
if (reader.Version == JT808Version.JTT2019 || this.Header.MessageBodyProperty.VersionFlag)
{
//2019版本
// 3.3.读取协议版本号
this.Header.ProtocolVersion = reader.ReadByte();
// 3.4.读取终端手机号
this.Header.TerminalPhoneNo = reader.ReadBCD(20, config.Trim);
reader.Version = JT808Version.JTT2019;
}
else
{
//2013版本
// 3.3.读取终端手机号
this.Header.TerminalPhoneNo = reader.ReadBCD(config.TerminalPhoneNoLength, config.Trim);
}
}
this.Version = reader.Version;
// 3.4.读取消息流水号
this.Header.MsgNum = reader.ReadUInt16();
// 3.5.判断有无分包


+ 3
- 28
src/JT808.Protocol/JT808Package.cs 查看文件

@@ -50,34 +50,7 @@ namespace JT808.Protocol
/// <summary>
/// 808版本号
/// </summary>
public JT808Version Version
{
get
{
if (Header != null)
{
try
{
if (Header.MessageBodyProperty.VersionFlag)
{
return JT808Version.JTT2019;
}
else
{
return JT808Version.JTT2013;
}
}
catch
{
return JT808Version.JTT2013;
}
}
else
{
return JT808Version.JTT2013;
}
}
}
public JT808Version Version { get; set; }
/// <summary>
///
/// </summary>
@@ -125,6 +98,7 @@ namespace JT808.Protocol
jT808Package.Header.TerminalPhoneNo = reader.ReadBCD(config.TerminalPhoneNoLength, config.Trim);
}
}
jT808Package.Version = reader.Version;
// 3.4.读取消息流水号
jT808Package.Header.MsgNum = reader.ReadUInt16();
// 3.5.判断有无分包
@@ -200,6 +174,7 @@ namespace JT808.Protocol
// 2.4.终端手机号
writer.WriteBCD(value.Header.TerminalPhoneNo, 20);
writer.Version = JT808Version.JTT2019;
value.Header.MessageBodyProperty.VersionFlag = true;
}
else
{


Loading…
取消
儲存