@@ -19,9 +19,9 @@ namespace JT808.Protocol.Test | |||||
var data1_1 = data1.Bodies; | var data1_1 = data1.Bodies; | ||||
var data2 = JT808Serializer.HeaderDeserialize("7E1205203804066657506200EC000200020120121900163320121900360700000000000000000001010F0CE4CD0120121900002220121900163300000000000000000001010C6F9E7B5D7E".ToHexBytes()); | var data2 = JT808Serializer.HeaderDeserialize("7E1205203804066657506200EC000200020120121900163320121900360700000000000000000001010F0CE4CD0120121900002220121900163300000000000000000001010C6F9E7B5D7E".ToHexBytes()); | ||||
var data2_1 = data2.Bodies; | var data2_1 = data2.Bodies; | ||||
Assert.Equal(data1.Bodies.ToArray(), data1_1); | |||||
Assert.Equal(data2.Bodies.ToArray(), data2_1); | |||||
var realBody = data1.Bodies.ToArray().Concat(data2.Bodies.ToArray()).ToArray(); | |||||
Assert.Equal(data1.Bodies, data1_1); | |||||
Assert.Equal(data2.Bodies, data2_1); | |||||
var realBody = data1.Bodies.Concat(data2.Bodies).ToArray(); | |||||
} | } | ||||
[Fact] | [Fact] | ||||
@@ -30,5 +30,14 @@ namespace JT808.Protocol.Test | |||||
var json1 = JT808Serializer.Analyze("7E120523A204066657506200EB00020001015A00000023012012191042052012191050190000000000000000000101064446D10120121910221720121910420500000000000000000001010F1FE8EB0120121910023420121910221700000000000000000001010F182D5C0120121909471120121910015500000000000000000001010B38F2430120121909274020121909471100000000000000000001010F056DB40120121909080920121909274000000000000000000001010F0724380120121908483820121909080900000000000000000001010F0530AB0120121908290720121908483800000000000000000001010F05896C0120121908093720121908290700000000000000000001010F02CD3B0120121907500520121908093700000000000000000001010F056FEF0120121907303420121907500500000000000000000001010F043C3401201219072541201219073034000000000000000000010103C26C5F0120121907061120121907254100000000000000000001010F03F0C10120121906464220121907061100000000000000000001010F02F6330120121906271220121906464200000000000000000001010F02E43B0120121906074220121906271200000000000000000001010F033D670120121905481120121906074200000000000000000001010F088BF20120121905284120121905481100000000000000000001010F03F9FE0120121905091020121905284100000000000000000001010F05B1040120121904494020121905091000000000000000000001010F02B3540120121904301020121904494000000000000000000001010F0417B00120121904103920121904301000000000000000000001010F0538970120121903510820121904103900000000000000000001010F054E9E0120121903313820121903510800000000000000000001010F016ECB0120121903120820121903313800000000000000000001010F0333C00120121902523820121903120700000000000000000001010F029D230120121902330720121902523700000000000000000001010F0354E40120121902133720121902330700000000000000000001010F03303D0120121901540720121902133700000000000000000001010F04981E0120121901343720121901540700000000000000000001010F02AD940120121901150820121901343700000000000000000001010EFFD7CF0120121900553720121901150800000000000000000001010F07D9330120121900360720121900553700000000000000000001010F040E740C7E".ToHexBytes()); | var json1 = JT808Serializer.Analyze("7E120523A204066657506200EB00020001015A00000023012012191042052012191050190000000000000000000101064446D10120121910221720121910420500000000000000000001010F1FE8EB0120121910023420121910221700000000000000000001010F182D5C0120121909471120121910015500000000000000000001010B38F2430120121909274020121909471100000000000000000001010F056DB40120121909080920121909274000000000000000000001010F0724380120121908483820121909080900000000000000000001010F0530AB0120121908290720121908483800000000000000000001010F05896C0120121908093720121908290700000000000000000001010F02CD3B0120121907500520121908093700000000000000000001010F056FEF0120121907303420121907500500000000000000000001010F043C3401201219072541201219073034000000000000000000010103C26C5F0120121907061120121907254100000000000000000001010F03F0C10120121906464220121907061100000000000000000001010F02F6330120121906271220121906464200000000000000000001010F02E43B0120121906074220121906271200000000000000000001010F033D670120121905481120121906074200000000000000000001010F088BF20120121905284120121905481100000000000000000001010F03F9FE0120121905091020121905284100000000000000000001010F05B1040120121904494020121905091000000000000000000001010F02B3540120121904301020121904494000000000000000000001010F0417B00120121904103920121904301000000000000000000001010F0538970120121903510820121904103900000000000000000001010F054E9E0120121903313820121903510800000000000000000001010F016ECB0120121903120820121903313800000000000000000001010F0333C00120121902523820121903120700000000000000000001010F029D230120121902330720121902523700000000000000000001010F0354E40120121902133720121902330700000000000000000001010F03303D0120121901540720121902133700000000000000000001010F04981E0120121901343720121901540700000000000000000001010F02AD940120121901150820121901343700000000000000000001010EFFD7CF0120121900553720121901150800000000000000000001010F07D9330120121900360720121900553700000000000000000001010F040E740C7E".ToHexBytes()); | ||||
var json2 = JT808Serializer.Analyze("7E1205203804066657506200EC000200020120121900163320121900360700000000000000000001010F0CE4CD0120121900002220121900163300000000000000000001010C6F9E7B5D7E".ToHexBytes()); | var json2 = JT808Serializer.Analyze("7E1205203804066657506200EC000200020120121900163320121900360700000000000000000001010F0CE4CD0120121900002220121900163300000000000000000001010C6F9E7B5D7E".ToHexBytes()); | ||||
} | } | ||||
[Fact] | |||||
public void Test3() | |||||
{ | |||||
var pack1 = JT808Serializer.HeaderDeserialize("7E120523A204066657506200EB00020001015A00000023012012191042052012191050190000000000000000000101064446D10120121910221720121910420500000000000000000001010F1FE8EB0120121910023420121910221700000000000000000001010F182D5C0120121909471120121910015500000000000000000001010B38F2430120121909274020121909471100000000000000000001010F056DB40120121909080920121909274000000000000000000001010F0724380120121908483820121909080900000000000000000001010F0530AB0120121908290720121908483800000000000000000001010F05896C0120121908093720121908290700000000000000000001010F02CD3B0120121907500520121908093700000000000000000001010F056FEF0120121907303420121907500500000000000000000001010F043C3401201219072541201219073034000000000000000000010103C26C5F0120121907061120121907254100000000000000000001010F03F0C10120121906464220121907061100000000000000000001010F02F6330120121906271220121906464200000000000000000001010F02E43B0120121906074220121906271200000000000000000001010F033D670120121905481120121906074200000000000000000001010F088BF20120121905284120121905481100000000000000000001010F03F9FE0120121905091020121905284100000000000000000001010F05B1040120121904494020121905091000000000000000000001010F02B3540120121904301020121904494000000000000000000001010F0417B00120121904103920121904301000000000000000000001010F0538970120121903510820121904103900000000000000000001010F054E9E0120121903313820121903510800000000000000000001010F016ECB0120121903120820121903313800000000000000000001010F0333C00120121902523820121903120700000000000000000001010F029D230120121902330720121902523700000000000000000001010F0354E40120121902133720121902330700000000000000000001010F03303D0120121901540720121902133700000000000000000001010F04981E0120121901343720121901540700000000000000000001010F02AD940120121901150820121901343700000000000000000001010EFFD7CF0120121900553720121901150800000000000000000001010F07D9330120121900360720121900553700000000000000000001010F040E740C7E".ToHexBytes()); | |||||
var pack2 = JT808Serializer.HeaderDeserialize("7E1205203804066657506200EC000200020120121900163320121900360700000000000000000001010F0CE4CD0120121900002220121900163300000000000000000001010C6F9E7B5D7E".ToHexBytes()); | |||||
var realBody = pack1.Bodies.Concat(pack2.Bodies).ToArray(); | |||||
var json=JT808Serializer.Analyze(pack1.Header.MsgId, realBody); | |||||
} | |||||
} | } | ||||
} | } |
@@ -1,6 +1,6 @@ | |||||
<Project Sdk="Microsoft.NET.Sdk"> | <Project Sdk="Microsoft.NET.Sdk"> | ||||
<PropertyGroup> | <PropertyGroup> | ||||
<TargetFrameworks>netstandard2.0;netstandard2.1;net5;</TargetFrameworks> | |||||
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0;</TargetFrameworks> | |||||
<LangVersion>9.0</LangVersion> | <LangVersion>9.0</LangVersion> | ||||
<Copyright>Copyright 2018.</Copyright> | <Copyright>Copyright 2018.</Copyright> | ||||
<Authors>SmallChi</Authors> | <Authors>SmallChi</Authors> | ||||
@@ -15,7 +15,7 @@ | |||||
<license>https://github.com/SmallChi/JT808/blob/master/LICENSE</license> | <license>https://github.com/SmallChi/JT808/blob/master/LICENSE</license> | ||||
<DocumentationFile>JT808.Protocol.xml</DocumentationFile> | <DocumentationFile>JT808.Protocol.xml</DocumentationFile> | ||||
<GeneratePackageOnBuild>false</GeneratePackageOnBuild> | <GeneratePackageOnBuild>false</GeneratePackageOnBuild> | ||||
<Version>2.3.3</Version> | |||||
<Version>2.3.4</Version> | |||||
<PackageLicenseFile>LICENSE</PackageLicenseFile> | <PackageLicenseFile>LICENSE</PackageLicenseFile> | ||||
<AnalysisLevel>latest</AnalysisLevel> | <AnalysisLevel>latest</AnalysisLevel> | ||||
<EnableNETAnalyzers>true</EnableNETAnalyzers> | <EnableNETAnalyzers>true</EnableNETAnalyzers> | ||||
@@ -3477,6 +3477,28 @@ | |||||
<param name="bytes"></param> | <param name="bytes"></param> | ||||
<returns></returns> | <returns></returns> | ||||
</member> | </member> | ||||
<member name="M:JT808.Protocol.JT808Serializer.Analyze(System.UInt16,System.ReadOnlySpan{System.Byte},JT808.Protocol.Enums.JT808Version,System.Text.Json.JsonWriterOptions,System.Int32)"> | |||||
<summary> | |||||
用于分包组合 | |||||
</summary> | |||||
<param name="msgid">对应消息id</param> | |||||
<param name="bytes">组合的数据体</param> | |||||
<param name="version">对应版本号</param> | |||||
<param name="options">序列化选项</param> | |||||
<param name="minBufferSize">默认65535</param> | |||||
<returns></returns> | |||||
</member> | |||||
<member name="M:JT808.Protocol.JT808Serializer.AnalyzeJsonBuffer(System.UInt16,System.ReadOnlySpan{System.Byte},JT808.Protocol.Enums.JT808Version,System.Text.Json.JsonWriterOptions,System.Int32)"> | |||||
<summary> | |||||
用于分包组合 | |||||
</summary> | |||||
<param name="msgid">对应消息id</param> | |||||
<param name="bytes">组合的数据体</param> | |||||
<param name="version">对应版本号</param> | |||||
<param name="options">序列化选项</param> | |||||
<param name="minBufferSize">默认65535</param> | |||||
<returns></returns> | |||||
</member> | |||||
<member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x00"> | <member name="T:JT808.Protocol.MessageBody.CarDVR.JT808_CarDVR_Down_0x00"> | ||||
<summary> | <summary> | ||||
采集记录仪执行标准版本 | 采集记录仪执行标准版本 | ||||
@@ -213,6 +213,85 @@ namespace JT808.Protocol | |||||
} | } | ||||
} | } | ||||
/// <summary> | |||||
/// 用于分包组合 | |||||
/// </summary> | |||||
/// <param name="msgid">对应消息id</param> | |||||
/// <param name="bytes">组合的数据体</param> | |||||
/// <param name="version">对应版本号</param> | |||||
/// <param name="options">序列化选项</param> | |||||
/// <param name="minBufferSize">默认65535</param> | |||||
/// <returns></returns> | |||||
public string Analyze(ushort msgid,ReadOnlySpan<byte> bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default, int minBufferSize = 65535) | |||||
{ | |||||
byte[] buffer = JT808ArrayPool.Rent(minBufferSize); | |||||
try | |||||
{ | |||||
if(jT808Config.MsgIdFactory.TryGetValue(msgid,out object msgHandle)) | |||||
{ | |||||
if (jT808Config.FormatterFactory.FormatterDict.TryGetValue(msgHandle.GetType().GUID, out object instance)) | |||||
{ | |||||
using (MemoryStream memoryStream = new MemoryStream()) | |||||
using (Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(memoryStream, options)) | |||||
{ | |||||
JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes, version); | |||||
utf8JsonWriter.WriteStartObject(); | |||||
instance.Analyze(ref jT808MessagePackReader, utf8JsonWriter, jT808Config); | |||||
utf8JsonWriter.WriteEndObject(); | |||||
utf8JsonWriter.Flush(); | |||||
string value = Encoding.UTF8.GetString(memoryStream.ToArray()); | |||||
return value; | |||||
} | |||||
} | |||||
return $"未找到对应的0x{msgid.ToString("X2")}消息数据体类型"; | |||||
} | |||||
return $"未找到对应的0x{msgid.ToString("X2")}消息数据体类型"; | |||||
} | |||||
finally | |||||
{ | |||||
JT808ArrayPool.Return(buffer); | |||||
} | |||||
} | |||||
/// <summary> | |||||
/// 用于分包组合 | |||||
/// </summary> | |||||
/// <param name="msgid">对应消息id</param> | |||||
/// <param name="bytes">组合的数据体</param> | |||||
/// <param name="version">对应版本号</param> | |||||
/// <param name="options">序列化选项</param> | |||||
/// <param name="minBufferSize">默认65535</param> | |||||
/// <returns></returns> | |||||
public byte[] AnalyzeJsonBuffer(ushort msgid, ReadOnlySpan<byte> bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default, int minBufferSize = 65535) | |||||
{ | |||||
byte[] buffer = JT808ArrayPool.Rent(minBufferSize); | |||||
try | |||||
{ | |||||
if (jT808Config.MsgIdFactory.TryGetValue(msgid, out object msgHandle)) | |||||
{ | |||||
if (jT808Config.FormatterFactory.FormatterDict.TryGetValue(msgHandle.GetType().GUID, out object instance)) | |||||
{ | |||||
using (MemoryStream memoryStream = new MemoryStream()) | |||||
using (Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(memoryStream, options)) | |||||
{ | |||||
JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes, version); | |||||
utf8JsonWriter.WriteStartObject(); | |||||
instance.Analyze(ref jT808MessagePackReader, utf8JsonWriter, jT808Config); | |||||
utf8JsonWriter.WriteEndObject(); | |||||
utf8JsonWriter.Flush(); | |||||
return memoryStream.ToArray(); | |||||
} | |||||
} | |||||
return Encoding.UTF8.GetBytes($"未找到对应的0x{msgid.ToString("X2")}消息数据体类型"); | |||||
} | |||||
return Encoding.UTF8.GetBytes($"未找到对应的0x{msgid.ToString("X2")}消息数据体类型"); | |||||
} | |||||
finally | |||||
{ | |||||
JT808ArrayPool.Return(buffer); | |||||
} | |||||
} | |||||
public byte[] AnalyzeJsonBuffer(ReadOnlySpan<byte> bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default, int minBufferSize = 8096) | public byte[] AnalyzeJsonBuffer(ReadOnlySpan<byte> bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default, int minBufferSize = 8096) | ||||
{ | { | ||||
byte[] buffer = JT808ArrayPool.Rent(minBufferSize); | byte[] buffer = JT808ArrayPool.Rent(minBufferSize); | ||||