Browse Source

1.修复行车记录仪分析器

2.增加char和string的读写器
tags/v2.2.10
SmallChi(Koike) 5 years ago
parent
commit
ce20bde2f6
6 changed files with 100 additions and 17 deletions
  1. +20
    -0
      src/JT808.Protocol.Test/MessagePack/JT808MessagePackReaderTest.cs
  2. +10
    -0
      src/JT808.Protocol.Test/MessagePack/JT808MessagePackWriterTest.cs
  3. +27
    -7
      src/JT808.Protocol.Test/Simples/Demo9.cs
  4. +12
    -9
      src/JT808.Protocol/JT808CarDVRSerializer.cs
  5. +17
    -0
      src/JT808.Protocol/MessagePack/JT808MessagePackReader.cs
  6. +14
    -1
      src/JT808.Protocol/MessagePack/JT808MessagePackWriter.cs

+ 20
- 0
src/JT808.Protocol.Test/MessagePack/JT808MessagePackReaderTest.cs View File

@@ -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);
}
}
}

+ 10
- 0
src/JT808.Protocol.Test/MessagePack/JT808MessagePackWriterTest.cs View File

@@ -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);
}
}
}

+ 27
- 7
src/JT808.Protocol.Test/Simples/Demo9.cs View File

@@ -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);


+ 12
- 9
src/JT808.Protocol/JT808CarDVRSerializer.cs View File

@@ -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);
}
}
}

+ 17
- 0
src/JT808.Protocol/MessagePack/JT808MessagePackReader.cs View File

@@ -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)


+ 14
- 1
src/JT808.Protocol/MessagePack/JT808MessagePackWriter.cs View File

@@ -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;


Loading…
Cancel
Save