Переглянути джерело

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 | √ | √ | 报警附件信息消息 | | 1 | 0x1210 | √ | √ | 报警附件信息消息 |
| 2 | 0x1211 | √ | √ | 文件信息上传 | | 2 | 0x1211 | √ | √ | 文件信息上传 |
| 3 | 0x1212 | √ | √ | 文件上传完成消息 |
| 3 | 0x1212 | √ | √ | 文件上传完成消息 |
| 4 | 0x9208 | √ | √ | 报警附件上传指令 | | 4 | 0x9208 | √ | √ | 报警附件上传指令 |
| 5 | 0x9212 | √ | √ | 文件上传完成消息应答 | | 5 | 0x9212 | √ | √ | 文件上传完成消息应答 |
| 6 | 0x1FC4 | √ | √ | 终端升级进度上报 | | 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.Equal("12345678900", jT808Package.Header.TerminalPhoneNo);
Assert.Null(jT808Package.Bodies); 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> /// <summary>
/// 808版本号 /// 808版本号
/// </summary> /// </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>
/// 原数据 /// 原数据
/// </summary> /// </summary>
@@ -90,21 +64,30 @@ namespace JT808.Protocol
ushort messageBodyPropertyValue = reader.ReadUInt16(); ushort messageBodyPropertyValue = reader.ReadUInt16();
// 3.2.1.解包消息体属性 // 3.2.1.解包消息体属性
this.Header.MessageBodyProperty = new JT808HeaderMessageBodyProperty(messageBodyPropertyValue); 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 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.读取消息流水号 // 3.4.读取消息流水号
this.Header.MsgNum = reader.ReadUInt16(); this.Header.MsgNum = reader.ReadUInt16();
// 3.5.判断有无分包 // 3.5.判断有无分包


+ 3
- 28
src/JT808.Protocol/JT808Package.cs Переглянути файл

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


Завантаження…
Відмінити
Зберегти