浏览代码

完善注释

tags/v2.6.2
yedajiang44 2 年前
父节点
当前提交
fa6b768c29
共有 1 个文件被更改,包括 74 次插入74 次删除
  1. +74
    -74
      src/JT808.Protocol/JT808Serializer.cs

+ 74
- 74
src/JT808.Protocol/JT808Serializer.cs 查看文件

@@ -1,12 +1,12 @@
using JT808.Protocol.Enums;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using System.Text.Json;
using JT808.Protocol.Enums;
using JT808.Protocol.Extensions; using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters; using JT808.Protocol.Formatters;
using JT808.Protocol.Internal; using JT808.Protocol.Internal;
using JT808.Protocol.MessagePack; using JT808.Protocol.MessagePack;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using System.Text.Json;


[assembly: InternalsVisibleTo("JT808.Protocol.DependencyInjection")] [assembly: InternalsVisibleTo("JT808.Protocol.DependencyInjection")]
namespace JT808.Protocol namespace JT808.Protocol
@@ -14,7 +14,7 @@ namespace JT808.Protocol
/// <summary> /// <summary>
/// JT808序列化器 /// JT808序列化器
/// </summary> /// </summary>
public class JT808Serializer
public class JT808Serializer
{ {
private readonly static JT808Package jT808Package = new JT808Package(); private readonly static JT808Package jT808Package = new JT808Package();


@@ -30,11 +30,11 @@ namespace JT808.Protocol


static JT808Serializer() static JT808Serializer()
{ {
Instance= new JT808Serializer();
Instance = new JT808Serializer();
} }
/// <summary> /// <summary>
///
/// ctor
/// </summary> /// </summary>
/// <param name="jT808Config"></param> /// <param name="jT808Config"></param>
public JT808Serializer(IJT808Config jT808Config) public JT808Serializer(IJT808Config jT808Config)
@@ -43,26 +43,26 @@ namespace JT808.Protocol
} }


/// <summary> /// <summary>
///
/// ctor
/// </summary> /// </summary>
public JT808Serializer():this(new DefaultGlobalConfig())
public JT808Serializer() : this(new DefaultGlobalConfig())
{ {


} }


/// <summary> /// <summary>
///
/// 标识
/// </summary> /// </summary>
public string SerializerId => jT808Config.ConfigId; public string SerializerId => jT808Config.ConfigId;


private readonly IJT808Config jT808Config; private readonly IJT808Config jT808Config;
/// <summary> /// <summary>
///
/// 序列化数据包
/// </summary> /// </summary>
/// <param name="package"></param>
/// <param name="version"></param>
/// <param name="minBufferSize"></param>
/// <returns></returns>
/// <param name="package">数据包</param>
/// <param name="version">协议版本</param>
/// <param name="minBufferSize">最低所需缓冲区大小</param>
/// <returns>元数据</returns>
public byte[] Serialize(JT808Package package, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096) public byte[] Serialize(JT808Package package, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096)
{ {
byte[] buffer = JT808ArrayPool.Rent(minBufferSize); byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
@@ -78,12 +78,12 @@ namespace JT808.Protocol
} }
} }
/// <summary> /// <summary>
///
/// 反序列化
/// </summary> /// </summary>
/// <param name="bytes"></param>
/// <param name="version"></param>
/// <param name="minBufferSize"></param>
/// <returns></returns>
/// <param name="bytes">元数据</param>
/// <param name="version">协议版本</param>
/// <param name="minBufferSize">最低所需缓冲区大小</param>
/// <returns>数据包</returns>
public JT808Package Deserialize(ReadOnlySpan<byte> bytes, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096) public JT808Package Deserialize(ReadOnlySpan<byte> bytes, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096)
{ {
byte[] buffer = JT808ArrayPool.Rent(minBufferSize); byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
@@ -99,14 +99,14 @@ namespace JT808.Protocol
} }
} }
/// <summary> /// <summary>
///
/// 序列化
/// </summary> /// </summary>
/// <typeparam name="T"></typeparam> /// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <param name="version"></param>
/// <param name="minBufferSize"></param>
/// <returns></returns>
public byte [] Serialize<T>(T obj, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096)
/// <param name="obj">数据包</param>
/// <param name="version">协议版本</param>
/// <param name="minBufferSize">最低所需缓冲区大小</param>
/// <returns>元数据</returns>
public byte[] Serialize<T>(T obj, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096) where T : JT808Package
{ {
byte[] buffer = JT808ArrayPool.Rent(minBufferSize); byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
try try
@@ -122,20 +122,20 @@ namespace JT808.Protocol
} }
} }
/// <summary> /// <summary>
///
/// 根据泛型反序列化元数据
/// </summary> /// </summary>
/// <typeparam name="T"></typeparam> /// <typeparam name="T"></typeparam>
/// <param name="bytes"></param>
/// <param name="version"></param>
/// <param name="minBufferSize"></param>
/// <returns></returns>
public T Deserialize<T>(ReadOnlySpan<byte> bytes, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096)
/// <param name="bytes">元素书</param>
/// <param name="version">协议版本</param>
/// <param name="minBufferSize">最低所需缓冲区大小</param>
/// <returns>数据包</returns>
public T Deserialize<T>(ReadOnlySpan<byte> bytes, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096) where T : JT808Package
{ {
byte[] buffer = JT808ArrayPool.Rent(minBufferSize); byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
try try
{ {
JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes, version); JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes, version);
if(CheckPackageType(typeof(T)))
if (CheckPackageType(typeof(T)))
jT808MessagePackReader.Decode(buffer); jT808MessagePackReader.Decode(buffer);
var formatter = jT808Config.GetMessagePackFormatter<T>(); var formatter = jT808Config.GetMessagePackFormatter<T>();
return formatter.Deserialize(ref jT808MessagePackReader, jT808Config); return formatter.Deserialize(ref jT808MessagePackReader, jT808Config);
@@ -146,9 +146,9 @@ namespace JT808.Protocol
} }
} }
/// <summary> /// <summary>
///
/// 验证类型是否为<see cref="JT808_Package_Type"/>或者<see cref="JT808_Header_Package_Type"/>
/// </summary> /// </summary>
/// <param name="type"></param>
/// <param name="type">需要验证的类型</param>
/// <returns></returns> /// <returns></returns>
private static bool CheckPackageType(Type type) private static bool CheckPackageType(Type type)
{ {
@@ -156,12 +156,12 @@ namespace JT808.Protocol
} }


/// <summary> /// <summary>
/// 用于负载或者分布式的时候,在网关只需要解到头部。
/// 根据头部的消息Id进行分发处理,可以防止小部分性能损耗。
/// 反序列化消息头
/// <para>用于负载或者分布式的时候,在网关只需要解到头部,根据头部的消息Id进行分发处理,可以防止小部分性能损耗。</para>
/// </summary> /// </summary>
/// <param name="bytes"></param>
/// <param name="version"></param>
/// <param name="minBufferSize"></param>
/// <param name="bytes">元数据</param>
/// <param name="version">协议版本</param>
/// <param name="minBufferSize">最低所需缓冲区大小</param>
/// <returns></returns> /// <returns></returns>
public JT808HeaderPackage HeaderDeserialize(ReadOnlySpan<byte> bytes, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096) public JT808HeaderPackage HeaderDeserialize(ReadOnlySpan<byte> bytes, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096)
{ {
@@ -170,7 +170,7 @@ namespace JT808.Protocol
{ {
JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes, version); JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes, version);
jT808MessagePackReader.Decode(buffer); jT808MessagePackReader.Decode(buffer);
return new JT808HeaderPackage(ref jT808MessagePackReader,jT808Config);
return new JT808HeaderPackage(ref jT808MessagePackReader, jT808Config);
} }
finally finally
{ {
@@ -178,12 +178,12 @@ namespace JT808.Protocol
} }
} }
/// <summary> /// <summary>
///
/// 根据类型反序列化
/// </summary> /// </summary>
/// <param name="bytes"></param>
/// <param name="type"></param>
/// <param name="version"></param>
/// <param name="minBufferSize"></param>
/// <param name="bytes">元数据</param>
/// <param name="type">类型</param>
/// <param name="version">协议版本</param>
/// <param name="minBufferSize">最低所需缓冲区大小</param>
/// <returns></returns> /// <returns></returns>
public object Deserialize(ReadOnlySpan<byte> bytes, Type type, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096) public object Deserialize(ReadOnlySpan<byte> bytes, Type type, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096)
{ {
@@ -202,14 +202,14 @@ namespace JT808.Protocol
} }
} }
/// <summary> /// <summary>
///
/// 分析元数据至json
/// </summary> /// </summary>
/// <param name="bytes"></param>
/// <param name="version"></param>
/// <param name="options"></param>
/// <param name="minBufferSize"></param>
/// <param name="bytes">元数据</param>
/// <param name="version">协议版本</param>
/// <param name="options">json选项</param>
/// <param name="minBufferSize">最低所需缓冲区大小</param>
/// <returns></returns> /// <returns></returns>
public string Analyze(ReadOnlySpan<byte> bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default, int minBufferSize = 8096)
public string Analyze(ReadOnlySpan<byte> bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default, int minBufferSize = 8096)
{ {
byte[] buffer = JT808ArrayPool.Rent(minBufferSize); byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
try try
@@ -226,16 +226,16 @@ namespace JT808.Protocol
finally finally
{ {
JT808ArrayPool.Return(buffer); JT808ArrayPool.Return(buffer);
}
}
} }
/// <summary> /// <summary>
///
/// 分析元数据至json
/// </summary> /// </summary>
/// <typeparam name="T"></typeparam> /// <typeparam name="T"></typeparam>
/// <param name="bytes"></param>
/// <param name="version"></param>
/// <param name="options"></param>
/// <param name="minBufferSize"></param>
/// <param name="bytes">元数据</param>
/// <param name="version">协议版本</param>
/// <param name="options">json序列化选项</param>
/// <param name="minBufferSize">最低所需缓冲区大小</param>
/// <returns></returns> /// <returns></returns>
public string Analyze<T>(ReadOnlySpan<byte> bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default, int minBufferSize = 8096) public string Analyze<T>(ReadOnlySpan<byte> bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default, int minBufferSize = 8096)
{ {
@@ -270,12 +270,12 @@ namespace JT808.Protocol
/// <param name="options">序列化选项</param> /// <param name="options">序列化选项</param>
/// <param name="minBufferSize">默认65535</param> /// <param name="minBufferSize">默认65535</param>
/// <returns></returns> /// <returns></returns>
public string Analyze(ushort msgid,ReadOnlySpan<byte> bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default, int minBufferSize = 65535)
public string Analyze(ushort msgid, ReadOnlySpan<byte> bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default, int minBufferSize = 65535)
{ {
byte[] buffer = JT808ArrayPool.Rent(minBufferSize); byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
try try
{ {
if(jT808Config.MsgIdFactory.TryGetValue(msgid,out object msgHandle))
if (jT808Config.MsgIdFactory.TryGetValue(msgid, out object msgHandle))
{ {
if (msgHandle is IJT808MessagePackFormatter instance) if (msgHandle is IJT808MessagePackFormatter instance)
{ {
@@ -336,12 +336,12 @@ namespace JT808.Protocol
} }
} }
/// <summary> /// <summary>
///
/// 分析元数据至json
/// </summary> /// </summary>
/// <param name="bytes"></param>
/// <param name="version"></param>
/// <param name="options"></param>
/// <param name="minBufferSize"></param>
/// <param name="bytes">元数据</param>
/// <param name="version">协议版本</param>
/// <param name="options">json选项</param>
/// <param name="minBufferSize">最低所需缓冲区大小</param>
/// <returns></returns> /// <returns></returns>
public byte[] AnalyzeJsonBuffer(ReadOnlySpan<byte> bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default, int minBufferSize = 8096) public byte[] AnalyzeJsonBuffer(ReadOnlySpan<byte> bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default, int minBufferSize = 8096)
{ {
@@ -362,13 +362,13 @@ namespace JT808.Protocol
} }
} }
/// <summary> /// <summary>
///
/// 分析元数据至json
/// </summary> /// </summary>
/// <typeparam name="T"></typeparam> /// <typeparam name="T"></typeparam>
/// <param name="bytes"></param>
/// <param name="version"></param>
/// <param name="options"></param>
/// <param name="minBufferSize"></param>
/// <param name="bytes">元数据</param>
/// <param name="version">协议版本</param>
/// <param name="options">json选项</param>
/// <param name="minBufferSize">最低所需缓冲区大小</param>
/// <returns></returns> /// <returns></returns>
public byte[] AnalyzeJsonBuffer<T>(ReadOnlySpan<byte> bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default, int minBufferSize = 8096) public byte[] AnalyzeJsonBuffer<T>(ReadOnlySpan<byte> bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default, int minBufferSize = 8096)
{ {
@@ -400,9 +400,9 @@ namespace JT808.Protocol
/// <returns></returns> /// <returns></returns>
public JT808Serializer Register(params Assembly[] externalAssemblies) public JT808Serializer Register(params Assembly[] externalAssemblies)
{ {
if(externalAssemblies!=null && externalAssemblies.Length > 0)
if (externalAssemblies != null && externalAssemblies.Length > 0)
{ {
foreach(var asm in externalAssemblies)
foreach (var asm in externalAssemblies)
{ {
jT808Config.Register(asm); jT808Config.Register(asm);
} }


正在加载...
取消
保存