@@ -19,9 +19,9 @@ namespace JT808.Protocol.Test | |||
var data1_1 = data1.Bodies; | |||
var data2 = JT808Serializer.HeaderDeserialize("7E1205203804066657506200EC000200020120121900163320121900360700000000000000000001010F0CE4CD0120121900002220121900163300000000000000000001010C6F9E7B5D7E".ToHexBytes()); | |||
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] | |||
@@ -30,5 +30,14 @@ namespace JT808.Protocol.Test | |||
var json1 = JT808Serializer.Analyze("7E120523A204066657506200EB00020001015A00000023012012191042052012191050190000000000000000000101064446D10120121910221720121910420500000000000000000001010F1FE8EB0120121910023420121910221700000000000000000001010F182D5C0120121909471120121910015500000000000000000001010B38F2430120121909274020121909471100000000000000000001010F056DB40120121909080920121909274000000000000000000001010F0724380120121908483820121909080900000000000000000001010F0530AB0120121908290720121908483800000000000000000001010F05896C0120121908093720121908290700000000000000000001010F02CD3B0120121907500520121908093700000000000000000001010F056FEF0120121907303420121907500500000000000000000001010F043C3401201219072541201219073034000000000000000000010103C26C5F0120121907061120121907254100000000000000000001010F03F0C10120121906464220121907061100000000000000000001010F02F6330120121906271220121906464200000000000000000001010F02E43B0120121906074220121906271200000000000000000001010F033D670120121905481120121906074200000000000000000001010F088BF20120121905284120121905481100000000000000000001010F03F9FE0120121905091020121905284100000000000000000001010F05B1040120121904494020121905091000000000000000000001010F02B3540120121904301020121904494000000000000000000001010F0417B00120121904103920121904301000000000000000000001010F0538970120121903510820121904103900000000000000000001010F054E9E0120121903313820121903510800000000000000000001010F016ECB0120121903120820121903313800000000000000000001010F0333C00120121902523820121903120700000000000000000001010F029D230120121902330720121902523700000000000000000001010F0354E40120121902133720121902330700000000000000000001010F03303D0120121901540720121902133700000000000000000001010F04981E0120121901343720121901540700000000000000000001010F02AD940120121901150820121901343700000000000000000001010EFFD7CF0120121900553720121901150800000000000000000001010F07D9330120121900360720121900553700000000000000000001010F040E740C7E".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"> | |||
<PropertyGroup> | |||
<TargetFrameworks>netstandard2.0;netstandard2.1;net5;</TargetFrameworks> | |||
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0;</TargetFrameworks> | |||
<LangVersion>9.0</LangVersion> | |||
<Copyright>Copyright 2018.</Copyright> | |||
<Authors>SmallChi</Authors> | |||
@@ -15,7 +15,7 @@ | |||
<license>https://github.com/SmallChi/JT808/blob/master/LICENSE</license> | |||
<DocumentationFile>JT808.Protocol.xml</DocumentationFile> | |||
<GeneratePackageOnBuild>false</GeneratePackageOnBuild> | |||
<Version>2.3.3</Version> | |||
<Version>2.3.4</Version> | |||
<PackageLicenseFile>LICENSE</PackageLicenseFile> | |||
<AnalysisLevel>latest</AnalysisLevel> | |||
<EnableNETAnalyzers>true</EnableNETAnalyzers> | |||
@@ -3477,6 +3477,28 @@ | |||
<param name="bytes"></param> | |||
<returns></returns> | |||
</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"> | |||
<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) | |||
{ | |||
byte[] buffer = JT808ArrayPool.Rent(minBufferSize); | |||