@@ -238,6 +238,26 @@ namespace JT808.Protocol.Test.MessagePack | |||
Assert.Equal(JT808Version.JTT2013, reader.Version); | |||
reader.Version = JT808Version.JTT2019; | |||
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); | |||
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] | |||
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(); | |||
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] | |||
@@ -80,6 +92,14 @@ namespace JT808.Protocol.Test.Simples | |||
[Fact] | |||
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(); | |||
JT808CarDVRUpPackage package = JT808CarDVRSerializer.UpDeserialize(data); | |||
@@ -155,7 +155,9 @@ namespace JT808.Protocol | |||
using(MemoryStream memoryStream = new MemoryStream()) | |||
using (Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(memoryStream, options)) | |||
{ | |||
utf8JsonWriter.WriteStartObject(); | |||
JT808CarDVRUpPackage.Analyze(ref jT808MessagePackReader, utf8JsonWriter, jT808Config); | |||
utf8JsonWriter.WriteEndObject(); | |||
utf8JsonWriter.Flush(); | |||
string value = Encoding.UTF8.GetString(memoryStream.ToArray()); | |||
return value; | |||
@@ -168,7 +170,9 @@ namespace JT808.Protocol | |||
using (MemoryStream memoryStream = new MemoryStream()) | |||
using (Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(memoryStream, options)) | |||
{ | |||
utf8JsonWriter.WriteStartObject(); | |||
JT808CarDVRDownPackage.Analyze(ref jT808MessagePackReader, utf8JsonWriter, jT808Config); | |||
utf8JsonWriter.WriteEndObject(); | |||
utf8JsonWriter.Flush(); | |||
string value = Encoding.UTF8.GetString(memoryStream.ToArray()); | |||
return value; | |||
@@ -182,9 +186,9 @@ namespace JT808.Protocol | |||
using (MemoryStream memoryStream = new MemoryStream()) | |||
using (Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(memoryStream, options)) | |||
{ | |||
if (!CheckPackageType(typeof(T))) utf8JsonWriter.WriteStartObject(); | |||
utf8JsonWriter.WriteStartObject(); | |||
analyze.Analyze(ref jT808MessagePackReader, utf8JsonWriter, jT808Config); | |||
if (!CheckPackageType(typeof(T))) utf8JsonWriter.WriteEndObject(); | |||
utf8JsonWriter.WriteEndObject(); | |||
utf8JsonWriter.Flush(); | |||
string value = Encoding.UTF8.GetString(memoryStream.ToArray()); | |||
return value; | |||
@@ -197,7 +201,9 @@ namespace JT808.Protocol | |||
using (MemoryStream memoryStream = new MemoryStream()) | |||
using (Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(memoryStream, options)) | |||
{ | |||
utf8JsonWriter.WriteStartObject(); | |||
JT808CarDVRUpPackage.Analyze(ref jT808MessagePackReader, utf8JsonWriter, jT808Config); | |||
utf8JsonWriter.WriteEndObject(); | |||
utf8JsonWriter.Flush(); | |||
return memoryStream.ToArray(); | |||
} | |||
@@ -209,7 +215,9 @@ namespace JT808.Protocol | |||
using (MemoryStream memoryStream = new MemoryStream()) | |||
using (Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(memoryStream, options)) | |||
{ | |||
utf8JsonWriter.WriteStartObject(); | |||
JT808CarDVRDownPackage.Analyze(ref jT808MessagePackReader, utf8JsonWriter, jT808Config); | |||
utf8JsonWriter.WriteEndObject(); | |||
utf8JsonWriter.Flush(); | |||
return memoryStream.ToArray(); | |||
} | |||
@@ -222,17 +230,12 @@ namespace JT808.Protocol | |||
using (MemoryStream memoryStream = new MemoryStream()) | |||
using (Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(memoryStream, options)) | |||
{ | |||
if (!CheckPackageType(typeof(T))) utf8JsonWriter.WriteStartObject(); | |||
utf8JsonWriter.WriteStartObject(); | |||
analyze.Analyze(ref jT808MessagePackReader, utf8JsonWriter, jT808Config); | |||
if (!CheckPackageType(typeof(T))) utf8JsonWriter.WriteEndObject(); | |||
utf8JsonWriter.WriteEndObject(); | |||
utf8JsonWriter.Flush(); | |||
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]; | |||
} | |||
public char ReadChar() | |||
{ | |||
return (char)GetReadOnlySpan(1)[0]; | |||
} | |||
public byte ReadVirtualByte() | |||
{ | |||
return GetVirtualReadOnlySpan(1)[0]; | |||
@@ -396,6 +400,19 @@ namespace JT808.Protocol.MessagePack | |||
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() | |||
{ | |||
if (_decoded) | |||
@@ -64,6 +64,12 @@ namespace JT808.Protocol.MessagePack | |||
} | |||
writer.Advance(count); | |||
} | |||
public void WriteChar(char value) | |||
{ | |||
var span = writer.Free; | |||
span[0] = (byte)value; | |||
writer.Advance(1); | |||
} | |||
public void WriteByte(byte value) | |||
{ | |||
var span = writer.Free; | |||
@@ -399,11 +405,18 @@ namespace JT808.Protocol.MessagePack | |||
} | |||
writer.Advance(len); | |||
} | |||
public void WriteStringEndChar0(string value) | |||
{ | |||
WriteString(value); | |||
WriteChar('\0'); | |||
} | |||
public int GetCurrentPosition() | |||
{ | |||
return writer.WrittenCount; | |||
} | |||
public void WriteCarDVRCheckCode(int currentPosition) | |||
public void WriteCarDVRCheckCode(int currentPosition) | |||
{ | |||
var carDVRPackage = writer.Written.Slice(currentPosition, writer.WrittenCount- currentPosition); | |||
byte calculateXorCheckCode = 0; | |||