@@ -15,4 +15,8 @@ | |||
</PackageReference> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<ProjectReference Include="..\JTActiveSafety.Protocol\JTActiveSafety.Protocol.csproj" /> | |||
</ItemGroup> | |||
</Project> |
@@ -0,0 +1,40 @@ | |||
using System; | |||
using Xunit; | |||
using JTActiveSafety.Protocol; | |||
using JTActiveSafety.Protocol.Extensions; | |||
namespace JTActiveSafety.Protocol.Test | |||
{ | |||
public class JTActiveSafetySerializerTest | |||
{ | |||
[Fact] | |||
public void SerializeTest1() | |||
{ | |||
JTActiveSafetyPackage package = new JTActiveSafetyPackage(); | |||
package.FileName = "alarm.xlsx"; | |||
package.Offset = 1; | |||
package.Bodies = new byte[5] { 1, 2, 3, 4, 5 }; | |||
var hex = JTActiveSafetySerializer.Serialize(package).ToHexString(); | |||
Assert.Equal("3031636400000000000000000000000000000000000000000000000000000000000000000000000000000000616C61726D2E786C737800000001000000050102030405", hex); | |||
} | |||
[Fact] | |||
public void DeserializeTest1() | |||
{ | |||
var data = "3031636400000000000000000000000000000000000000000000000000000000000000000000000000000000616C61726D2E786C737800000001000000050102030405".ToHexBytes(); | |||
var package = JTActiveSafetySerializer.Deserialize(data); | |||
Assert.Equal(JTActiveSafetyPackage.FH, package.FH_Flag); | |||
Assert.Equal("alarm.xlsx", package.FileName.TrimStart('\0')); | |||
Assert.Equal(1u, package.Offset); | |||
Assert.Equal(5u, package.Length); | |||
Assert.Equal(new byte[5] { 1, 2, 3, 4, 5 }, package.Bodies); | |||
} | |||
[Fact] | |||
public void AnalyzeTest1() | |||
{ | |||
var data = "3031636400000000000000000000000000000000000000000000000000000000000000000000000000000000616C61726D2E786C737800000001000000050102030405".ToHexBytes(); | |||
var json = JTActiveSafetySerializer.Analyze(data); | |||
} | |||
} | |||
} |
@@ -1,14 +0,0 @@ | |||
using System; | |||
using Xunit; | |||
namespace JTActiveSafety.Protocol.Test | |||
{ | |||
public class UnitTest1 | |||
{ | |||
[Fact] | |||
public void Test1() | |||
{ | |||
} | |||
} | |||
} |
@@ -15,9 +15,17 @@ | |||
<licenseUrl>https://github.com/SmallChi/JTActiveSafety/blob/master/LICENSE</licenseUrl> | |||
<license>https://github.com/SmallChi/JTActiveSafety/blob/master/LICENSE</license> | |||
<GeneratePackageOnBuild>false</GeneratePackageOnBuild> | |||
<Version>1.0.0</Version> | |||
<Version>1.0.0-preview1</Version> | |||
<PackageLicenseFile>LICENSE</PackageLicenseFile> | |||
</PropertyGroup> | |||
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|netstandard2.0|AnyCPU'"> | |||
<DocumentationFile>JTActiveSafety.Protocol.xml</DocumentationFile> | |||
</PropertyGroup> | |||
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|netstandard2.0|AnyCPU'"> | |||
<DocumentationFile>JTActiveSafety.Protocol.xml</DocumentationFile> | |||
</PropertyGroup> | |||
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' "> | |||
<PackageReference Include="System.Memory" Version="4.5.4" /> | |||
</ItemGroup> | |||
@@ -0,0 +1,77 @@ | |||
<?xml version="1.0"?> | |||
<doc> | |||
<assembly> | |||
<name>JTActiveSafety.Protocol</name> | |||
</assembly> | |||
<members> | |||
<member name="T:JTActiveSafety.Protocol.Buffers.JTActiveSafetyBufferWriter"> | |||
<summary> | |||
<see cref="!:System.Buffers.Writer"/> | |||
</summary> | |||
</member> | |||
<member name="T:JTActiveSafety.Protocol.Extensions.HexExtensions"> | |||
<summary> | |||
ref:"www.codeproject.com/tips/447938/high-performance-csharp-byte-array-to-hex-string-t" | |||
</summary> | |||
</member> | |||
<member name="M:JTActiveSafety.Protocol.Extensions.HexExtensions.ToHexBytes(System.String)"> | |||
<summary> | |||
16进制字符串转16进制数组 | |||
</summary> | |||
<param name="hexString"></param> | |||
<param name="separator"></param> | |||
<returns></returns> | |||
</member> | |||
<member name="F:JTActiveSafety.Protocol.JTActiveSafetyPackage.FH_Bytes"> | |||
<summary> | |||
帧头标识 | |||
</summary> | |||
</member> | |||
<member name="F:JTActiveSafety.Protocol.JTActiveSafetyPackage.FH"> | |||
<summary> | |||
帧头标识 | |||
</summary> | |||
</member> | |||
<member name="P:JTActiveSafety.Protocol.JTActiveSafetyPackage.FH_Flag"> | |||
<summary> | |||
帧头标识 | |||
固定为0x30 0x31 0x63 0x64 | |||
</summary> | |||
</member> | |||
<member name="P:JTActiveSafety.Protocol.JTActiveSafetyPackage.FileName"> | |||
<summary> | |||
文件名称 | |||
</summary> | |||
</member> | |||
<member name="P:JTActiveSafety.Protocol.JTActiveSafetyPackage.Offset"> | |||
<summary> | |||
数据偏移量 | |||
</summary> | |||
</member> | |||
<member name="P:JTActiveSafety.Protocol.JTActiveSafetyPackage.Length"> | |||
<summary> | |||
数据长度 | |||
</summary> | |||
</member> | |||
<member name="P:JTActiveSafety.Protocol.JTActiveSafetyPackage.Bodies"> | |||
<summary> | |||
数据体 | |||
默认长度64K,文件小于64K 则为实际长度 | |||
</summary> | |||
</member> | |||
<member name="M:JTActiveSafety.Protocol.MessagePack.JTActiveSafetyMessagePackReader.ReadBigNumber(System.Int32)"> | |||
<summary> | |||
数字编码 大端模式、高位在前 | |||
</summary> | |||
<param name="len"></param> | |||
</member> | |||
<member name="M:JTActiveSafety.Protocol.MessagePack.JTActiveSafetyMessagePackWriter.WriteBigNumber(System.String,System.Int32)"> | |||
<summary> | |||
数字编码 大端模式、高位在前 | |||
</summary> | |||
<param name="value"></param> | |||
<param name="len"></param> | |||
</member> | |||
</members> | |||
</doc> |
@@ -19,7 +19,7 @@ namespace JTActiveSafety.Protocol | |||
{ | |||
JTActiveSafetyMessagePackWriter writer = new JTActiveSafetyMessagePackWriter(buffer); | |||
writer.WriteUInt32(package.FH_Flag); | |||
writer.WriteString(package.FileName); | |||
writer.WriteString(package.FileName.PadLeft(50, '\0')); | |||
writer.WriteUInt32(package.Offset); | |||
writer.WriteUInt32((uint)package.Bodies.Length); | |||
writer.WriteArray(package.Bodies); | |||
@@ -51,13 +51,13 @@ namespace JTActiveSafety.Protocol | |||
{ | |||
writer.WriteStartObject(); | |||
var header = reader.ReadUInt32(); | |||
writer.WriteString($"[{header}]头部", header.ReadNumber()); | |||
writer.WriteNumber($"[{ header.ReadNumber()}]头部", header); | |||
var FileName = reader.ReadString(50); | |||
writer.WriteString($"[文件名称]", FileName); | |||
var offset = reader.ReadUInt32(); | |||
writer.WriteNumber($"{offset}[数据偏移量]", offset); | |||
writer.WriteNumber($"{offset.ReadNumber()}[数据偏移量]", offset); | |||
var length = reader.ReadUInt32(); | |||
writer.WriteNumber($"{length}[数据长度]", length); | |||
writer.WriteNumber($"{length.ReadNumber()}[数据长度]", length); | |||
var bodies = reader.ReadRemainArray().ToArray(); | |||
writer.WriteString("[数据体]", string.Join(" ", (bodies).Select(p => p.ToString("X2")))); | |||
writer.WriteEndObject(); | |||