@@ -238,6 +238,26 @@ namespace JT808.Protocol.Test.MessagePack | |||||
Assert.Equal(JT808Version.JTT2013, reader.Version); | Assert.Equal(JT808Version.JTT2013, reader.Version); | ||||
reader.Version = JT808Version.JTT2019; | reader.Version = JT808Version.JTT2019; | ||||
Assert.Equal(JT808Version.JTT2019, reader.Version); | Assert.Equal(JT808Version.JTT2019, reader.Version); | ||||
} | |||||
[Fact] | |||||
public void ReadStringEndChar0Test1() | |||||
{ | |||||
byte[] array = "736D616C6C636869286B6F696B652900".ToHexBytes(); | |||||
var reader = new JT808MessagePackReader(array); | |||||
var str = reader.ReadStringEndChar0(); | |||||
Assert.Equal("smallchi(koike)", str); | |||||
Assert.Equal(16, reader.ReaderCount); | |||||
} | |||||
[Fact] | |||||
public void ReadVirtualArrayEndChar0Test1() | |||||
{ | |||||
byte[] array = "736D616C6C636869286B6F696B652900".ToHexBytes(); | |||||
var reader = new JT808MessagePackReader(array); | |||||
var str = reader.ReadVirtualStringEndChar0(); | |||||
Assert.Equal("smallchi(koike)", str); | |||||
Assert.Equal(0, reader.ReaderCount); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -480,5 +480,15 @@ namespace JT808.Protocol.Test.MessagePack | |||||
BinaryPrimitives.WriteUInt16BigEndian(array2, (ushort)a); | BinaryPrimitives.WriteUInt16BigEndian(array2, (ushort)a); | ||||
Assert.Equal(array1, array2); | Assert.Equal(array1, array2); | ||||
} | } | ||||
[Fact] | |||||
public void WriteStringEndChar0Test() | |||||
{ | |||||
byte[] array = new byte[22]; | |||||
var msgpackWriter = new JT808MessagePackWriter(array); | |||||
msgpackWriter.WriteStringEndChar0("smallchi(koike)"); | |||||
var hex = msgpackWriter.FlushAndGetEncodingArray().ToHexString(); | |||||
Assert.Equal("736D616C6C636869286B6F696B652900", hex); | |||||
} | |||||
} | } | ||||
} | } |
@@ -53,15 +53,27 @@ namespace JT808.Protocol.Test.Simples | |||||
[Fact] | [Fact] | ||||
public void Test3() | public void Test3() | ||||
{ | |||||
JT808CarDVRDownPackage jT808CarDVRDownPackage = new JT808CarDVRDownPackage(); | |||||
jT808CarDVRDownPackage.CommandId = JT808CarDVRCommandID.设置初始里程.ToByteValue(); | |||||
jT808CarDVRDownPackage.Bodies = new JT808_CarDVR_Down_0xC4() | |||||
{ | |||||
FirstInstallTime = DateTime.Parse("2020-03-25 10:26:01"), | |||||
FirstMileage = "1234", | |||||
RealTime = DateTime.Parse("2020-03-25 10:26:01"), | |||||
TotalMilage = "123456" | |||||
}; | |||||
byte[] downData = JT808CarDVRSerializer.Serialize(jT808CarDVRDownPackage); | |||||
var downHex = downData.ToHexString(); | |||||
Assert.Equal("557AC40014002003251026012003251026010000123400123456A9", downHex); | |||||
} | |||||
[Fact] | |||||
public void Test3_1() | |||||
{ | { | ||||
var data = "557AC40014002003251026012003251026010000123400123456A9".ToHexBytes(); | var data = "557AC40014002003251026012003251026010000123400123456A9".ToHexBytes(); | ||||
JT808CarDVRDownPackage jT808CarDVRDownPackage = JT808CarDVRSerializer.DownDeserialize(data); | |||||
Assert.Equal(JT808CarDVRCommandID.设置初始里程.ToByteValue(), jT808CarDVRDownPackage.CommandId); | |||||
var value = jT808CarDVRDownPackage.Bodies as JT808_CarDVR_Down_0xC4; | |||||
Assert.Equal(DateTime.Parse("2020-03-25 10:26:01"), value.FirstInstallTime); | |||||
Assert.Equal(DateTime.Parse("2020-03-25 10:26:01"), value.RealTime); | |||||
Assert.Equal("1234", value.FirstMileage); | |||||
Assert.Equal("123456", value.TotalMilage); | |||||
string json1 = JT808CarDVRSerializer.Analyze<JT808CarDVRDownPackage>(data); | |||||
string json2 = JT808CarDVRSerializer.DownAnalyze(data); | |||||
} | } | ||||
[Fact] | [Fact] | ||||
@@ -80,6 +92,14 @@ namespace JT808.Protocol.Test.Simples | |||||
[Fact] | [Fact] | ||||
public void Test5() | public void Test5() | ||||
{ | |||||
var data = "557AC4000000EB".ToHexBytes(); | |||||
string json1 = JT808CarDVRSerializer.Analyze<JT808CarDVRUpPackage>(data); | |||||
string json2 = JT808CarDVRSerializer.UpAnalyze(data); | |||||
} | |||||
[Fact] | |||||
public void Test5_1() | |||||
{ | { | ||||
var data = "557AC4000000EB".ToHexBytes(); | var data = "557AC4000000EB".ToHexBytes(); | ||||
JT808CarDVRUpPackage package = JT808CarDVRSerializer.UpDeserialize(data); | JT808CarDVRUpPackage package = JT808CarDVRSerializer.UpDeserialize(data); | ||||
@@ -155,7 +155,9 @@ namespace JT808.Protocol | |||||
using(MemoryStream memoryStream = new MemoryStream()) | using(MemoryStream memoryStream = new MemoryStream()) | ||||
using (Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(memoryStream, options)) | using (Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(memoryStream, options)) | ||||
{ | { | ||||
utf8JsonWriter.WriteStartObject(); | |||||
JT808CarDVRUpPackage.Analyze(ref jT808MessagePackReader, utf8JsonWriter, jT808Config); | JT808CarDVRUpPackage.Analyze(ref jT808MessagePackReader, utf8JsonWriter, jT808Config); | ||||
utf8JsonWriter.WriteEndObject(); | |||||
utf8JsonWriter.Flush(); | utf8JsonWriter.Flush(); | ||||
string value = Encoding.UTF8.GetString(memoryStream.ToArray()); | string value = Encoding.UTF8.GetString(memoryStream.ToArray()); | ||||
return value; | return value; | ||||
@@ -168,7 +170,9 @@ namespace JT808.Protocol | |||||
using (MemoryStream memoryStream = new MemoryStream()) | using (MemoryStream memoryStream = new MemoryStream()) | ||||
using (Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(memoryStream, options)) | using (Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(memoryStream, options)) | ||||
{ | { | ||||
utf8JsonWriter.WriteStartObject(); | |||||
JT808CarDVRDownPackage.Analyze(ref jT808MessagePackReader, utf8JsonWriter, jT808Config); | JT808CarDVRDownPackage.Analyze(ref jT808MessagePackReader, utf8JsonWriter, jT808Config); | ||||
utf8JsonWriter.WriteEndObject(); | |||||
utf8JsonWriter.Flush(); | utf8JsonWriter.Flush(); | ||||
string value = Encoding.UTF8.GetString(memoryStream.ToArray()); | string value = Encoding.UTF8.GetString(memoryStream.ToArray()); | ||||
return value; | return value; | ||||
@@ -182,9 +186,9 @@ namespace JT808.Protocol | |||||
using (MemoryStream memoryStream = new MemoryStream()) | using (MemoryStream memoryStream = new MemoryStream()) | ||||
using (Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(memoryStream, options)) | using (Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(memoryStream, options)) | ||||
{ | { | ||||
if (!CheckPackageType(typeof(T))) utf8JsonWriter.WriteStartObject(); | |||||
utf8JsonWriter.WriteStartObject(); | |||||
analyze.Analyze(ref jT808MessagePackReader, utf8JsonWriter, jT808Config); | analyze.Analyze(ref jT808MessagePackReader, utf8JsonWriter, jT808Config); | ||||
if (!CheckPackageType(typeof(T))) utf8JsonWriter.WriteEndObject(); | |||||
utf8JsonWriter.WriteEndObject(); | |||||
utf8JsonWriter.Flush(); | utf8JsonWriter.Flush(); | ||||
string value = Encoding.UTF8.GetString(memoryStream.ToArray()); | string value = Encoding.UTF8.GetString(memoryStream.ToArray()); | ||||
return value; | return value; | ||||
@@ -197,7 +201,9 @@ namespace JT808.Protocol | |||||
using (MemoryStream memoryStream = new MemoryStream()) | using (MemoryStream memoryStream = new MemoryStream()) | ||||
using (Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(memoryStream, options)) | using (Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(memoryStream, options)) | ||||
{ | { | ||||
utf8JsonWriter.WriteStartObject(); | |||||
JT808CarDVRUpPackage.Analyze(ref jT808MessagePackReader, utf8JsonWriter, jT808Config); | JT808CarDVRUpPackage.Analyze(ref jT808MessagePackReader, utf8JsonWriter, jT808Config); | ||||
utf8JsonWriter.WriteEndObject(); | |||||
utf8JsonWriter.Flush(); | utf8JsonWriter.Flush(); | ||||
return memoryStream.ToArray(); | return memoryStream.ToArray(); | ||||
} | } | ||||
@@ -209,7 +215,9 @@ namespace JT808.Protocol | |||||
using (MemoryStream memoryStream = new MemoryStream()) | using (MemoryStream memoryStream = new MemoryStream()) | ||||
using (Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(memoryStream, options)) | using (Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(memoryStream, options)) | ||||
{ | { | ||||
utf8JsonWriter.WriteStartObject(); | |||||
JT808CarDVRDownPackage.Analyze(ref jT808MessagePackReader, utf8JsonWriter, jT808Config); | JT808CarDVRDownPackage.Analyze(ref jT808MessagePackReader, utf8JsonWriter, jT808Config); | ||||
utf8JsonWriter.WriteEndObject(); | |||||
utf8JsonWriter.Flush(); | utf8JsonWriter.Flush(); | ||||
return memoryStream.ToArray(); | return memoryStream.ToArray(); | ||||
} | } | ||||
@@ -222,17 +230,12 @@ namespace JT808.Protocol | |||||
using (MemoryStream memoryStream = new MemoryStream()) | using (MemoryStream memoryStream = new MemoryStream()) | ||||
using (Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(memoryStream, options)) | using (Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(memoryStream, options)) | ||||
{ | { | ||||
if (!CheckPackageType(typeof(T))) utf8JsonWriter.WriteStartObject(); | |||||
utf8JsonWriter.WriteStartObject(); | |||||
analyze.Analyze(ref jT808MessagePackReader, utf8JsonWriter, jT808Config); | analyze.Analyze(ref jT808MessagePackReader, utf8JsonWriter, jT808Config); | ||||
if (!CheckPackageType(typeof(T))) utf8JsonWriter.WriteEndObject(); | |||||
utf8JsonWriter.WriteEndObject(); | |||||
utf8JsonWriter.Flush(); | utf8JsonWriter.Flush(); | ||||
return memoryStream.ToArray(); | return memoryStream.ToArray(); | ||||
} | } | ||||
} | } | ||||
private static bool CheckPackageType(Type type) | |||||
{ | |||||
return type == typeof(JT808CarDVRUpPackage) || type == typeof(JT808CarDVRDownPackage); | |||||
} | |||||
} | } | ||||
} | } |
@@ -157,6 +157,10 @@ namespace JT808.Protocol.MessagePack | |||||
{ | { | ||||
return GetReadOnlySpan(1)[0]; | return GetReadOnlySpan(1)[0]; | ||||
} | } | ||||
public char ReadChar() | |||||
{ | |||||
return (char)GetReadOnlySpan(1)[0]; | |||||
} | |||||
public byte ReadVirtualByte() | public byte ReadVirtualByte() | ||||
{ | { | ||||
return GetVirtualReadOnlySpan(1)[0]; | return GetVirtualReadOnlySpan(1)[0]; | ||||
@@ -396,6 +400,19 @@ namespace JT808.Protocol.MessagePack | |||||
return Reader.Slice(ReaderCount); | return Reader.Slice(ReaderCount); | ||||
} | } | ||||
} | } | ||||
public string ReadStringEndChar0() | |||||
{ | |||||
var remainSpans = Reader.Slice(ReaderCount, ReadCurrentRemainContentLength()); | |||||
int length = remainSpans.IndexOf((byte)'\0') + 1; | |||||
string value = JT808Constants.Encoding.GetString(ReadArray(length).ToArray()); | |||||
return value.Trim('\0'); | |||||
} | |||||
public string ReadVirtualStringEndChar0() | |||||
{ | |||||
var remainSpans = Reader.Slice(ReaderCount); | |||||
string value = JT808Constants.Encoding.GetString(GetVirtualReadOnlySpan(remainSpans.IndexOf((byte)'\0') + 1).ToArray()); | |||||
return value.Trim('\0'); | |||||
} | |||||
public int ReadCurrentRemainContentLength() | public int ReadCurrentRemainContentLength() | ||||
{ | { | ||||
if (_decoded) | if (_decoded) | ||||
@@ -64,6 +64,12 @@ namespace JT808.Protocol.MessagePack | |||||
} | } | ||||
writer.Advance(count); | writer.Advance(count); | ||||
} | } | ||||
public void WriteChar(char value) | |||||
{ | |||||
var span = writer.Free; | |||||
span[0] = (byte)value; | |||||
writer.Advance(1); | |||||
} | |||||
public void WriteByte(byte value) | public void WriteByte(byte value) | ||||
{ | { | ||||
var span = writer.Free; | var span = writer.Free; | ||||
@@ -399,11 +405,18 @@ namespace JT808.Protocol.MessagePack | |||||
} | } | ||||
writer.Advance(len); | writer.Advance(len); | ||||
} | } | ||||
public void WriteStringEndChar0(string value) | |||||
{ | |||||
WriteString(value); | |||||
WriteChar('\0'); | |||||
} | |||||
public int GetCurrentPosition() | public int GetCurrentPosition() | ||||
{ | { | ||||
return writer.WrittenCount; | return writer.WrittenCount; | ||||
} | } | ||||
public void WriteCarDVRCheckCode(int currentPosition) | |||||
public void WriteCarDVRCheckCode(int currentPosition) | |||||
{ | { | ||||
var carDVRPackage = writer.Written.Slice(currentPosition, writer.WrittenCount- currentPosition); | var carDVRPackage = writer.Written.Slice(currentPosition, writer.WrittenCount- currentPosition); | ||||
byte calculateXorCheckCode = 0; | byte calculateXorCheckCode = 0; | ||||