Esempio n. 1
0
 /// <summary>
 /// 用于分包组合
 /// </summary>
 /// <param name="msgid">对应消息id</param>
 /// <param name="bytes">组合的数据体</param>
 /// <param name="version">对应版本号</param>
 /// <param name="options">序列化选项</param>
 /// <param name="minBufferSize">默认65535</param>
 /// <returns></returns>
 public byte[] AnalyzeJsonBuffer(ushort msgid, ReadOnlySpan <byte> bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default, int minBufferSize = 65535)
 {
     byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
     try
     {
         if (jT808Config.MsgIdFactory.TryGetValue(msgid, out object msgHandle))
         {
             if (jT808Config.FormatterFactory.FormatterDict.TryGetValue(msgHandle.GetType().GUID, out object instance))
             {
                 using (MemoryStream memoryStream = new MemoryStream())
                     using (Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(memoryStream, options))
                     {
                         JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes, version);
                         utf8JsonWriter.WriteStartObject();
                         instance.Analyze(ref jT808MessagePackReader, utf8JsonWriter, jT808Config);
                         utf8JsonWriter.WriteEndObject();
                         utf8JsonWriter.Flush();
                         return(memoryStream.ToArray());
                     }
             }
             return(Encoding.UTF8.GetBytes($"未找到对应的0x{msgid.ToString("X2")}消息数据体类型"));
         }
         return(Encoding.UTF8.GetBytes($"未找到对应的0x{msgid.ToString("X2")}消息数据体类型"));
     }
     finally
     {
         JT808ArrayPool.Return(buffer);
     }
 }
Esempio n. 2
0
 public byte[] AnalyzeJsonBuffer <T>(ReadOnlySpan <byte> bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default, int minBufferSize = 8096)
 {
     byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
     try
     {
         JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes, version);
         if (CheckPackageType(typeof(T)))
         {
             jT808MessagePackReader.Decode(buffer);
         }
         var analyze = jT808Config.GetAnalyze <T>();
         using (MemoryStream memoryStream = new MemoryStream())
             using (Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(memoryStream, options))
             {
                 if (!CheckPackageType(typeof(T)))
                 {
                     utf8JsonWriter.WriteStartObject();
                 }
                 analyze.Analyze(ref jT808MessagePackReader, utf8JsonWriter, jT808Config);
                 if (!CheckPackageType(typeof(T)))
                 {
                     utf8JsonWriter.WriteEndObject();
                 }
                 utf8JsonWriter.Flush();
                 return(memoryStream.ToArray());
             }
     }
     finally
     {
         JT808ArrayPool.Return(buffer);
     }
 }
Esempio n. 3
0
 public static byte[] Serialize(JT808Package jT808Package, int minBufferSize = 1024)
 {
     byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
     try
     {
         var len = JT808FormatterExtensions.Caching.JT808PackageFromatterPool.Serialize(ref buffer, 0, jT808Package);
         return(buffer.AsSpan(0, len).ToArray());
     }
     finally
     {
         JT808ArrayPool.Return(buffer);
     }
 }
Esempio n. 4
0
 public JT808Package Deserialize(ReadOnlySpan <byte> bytes, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096)
 {
     byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
     try
     {
         JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes, version);
         jT808MessagePackReader.Decode(buffer);
         return(jT808Package.Deserialize(ref jT808MessagePackReader, jT808Config));
     }
     finally
     {
         JT808ArrayPool.Return(buffer);
     }
 }
Esempio n. 5
0
 public ReadOnlySpan <byte> SerializeReadOnlySpan(JT808Package package, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096)
 {
     byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
     try
     {
         JT808MessagePackWriter jT808MessagePackWriter = new JT808MessagePackWriter(buffer, version);
         jT808Package.Serialize(ref jT808MessagePackWriter, package, jT808Config);
         return(jT808MessagePackWriter.FlushAndGetEncodingReadOnlySpan());
     }
     finally
     {
         JT808ArrayPool.Return(buffer);
     }
 }
Esempio n. 6
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="package"></param>
 /// <param name="version"></param>
 /// <param name="minBufferSize"></param>
 /// <returns></returns>
 public byte[] Serialize(JT808CarDVRDownPackage package, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096)
 {
     byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
     try
     {
         JT808MessagePackWriter jT808MessagePackWriter = new JT808MessagePackWriter(buffer, version);
         package.Serialize(ref jT808MessagePackWriter, package, jT808Config);
         return(jT808MessagePackWriter.FlushAndGetEncodingArray());
     }
     finally
     {
         JT808ArrayPool.Return(buffer);
     }
 }
Esempio n. 7
0
 public JT808Package Deserialize(ReadOnlySpan <byte> bytes, int minBufferSize = 4096)
 {
     byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
     try
     {
         JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes);
         jT808MessagePackReader.Decode(buffer);
         return(JT808PackageFormatter.Instance.Deserialize(ref jT808MessagePackReader, jT808Config));
     }
     finally
     {
         JT808ArrayPool.Return(buffer);
     }
 }
Esempio n. 8
0
 public byte[] Serialize(JT808Package jT808Package, int minBufferSize = 4096)
 {
     byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
     try
     {
         JT808MessagePackWriter jT808MessagePackWriter = new JT808MessagePackWriter(buffer);
         JT808PackageFormatter.Instance.Serialize(ref jT808MessagePackWriter, jT808Package, jT808Config);
         return(jT808MessagePackWriter.FlushAndGetEncodingArray());
     }
     finally
     {
         JT808ArrayPool.Return(buffer);
     }
 }
Esempio n. 9
0
 public byte [] Serialize <T>(T obj, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096)
 {
     byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
     try
     {
         var formatter = jT808Config.GetMessagePackFormatter <T>();
         JT808MessagePackWriter jT808MessagePackWriter = new JT808MessagePackWriter(buffer, version);
         formatter.Serialize(ref jT808MessagePackWriter, obj, jT808Config);
         return(jT808MessagePackWriter.FlushAndGetEncodingArray());
     }
     finally
     {
         JT808ArrayPool.Return(buffer);
     }
 }
Esempio n. 10
0
        public static byte[] Serialize <T>(T obj, int minBufferSize = 1024)
        {
            var formatter = JT808FormatterExtensions.GetFormatter <T>();

            byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
            try
            {
                var len = formatter.Serialize(ref buffer, 0, obj);
                return(buffer.AsSpan(0, len).ToArray());
            }
            finally
            {
                JT808ArrayPool.Return(buffer);
            }
        }
Esempio n. 11
0
 public dynamic Deserialize(ReadOnlySpan <byte> bytes, Type type, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096)
 {
     byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
     try
     {
         var formatter = jT808Config.GetMessagePackFormatterByType(type);
         JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes, version);
         if (CheckPackageType(type))
         {
             jT808MessagePackReader.Decode(buffer);
         }
         return(JT808MessagePackFormatterResolverExtensions.JT808DynamicDeserialize(formatter, ref jT808MessagePackReader, jT808Config));
     }
     finally
     {
         JT808ArrayPool.Return(buffer);
     }
 }
Esempio n. 12
0
 public T Deserialize <T>(ReadOnlySpan <byte> bytes, JT808Version version = JT808Version.JTT2013, int minBufferSize = 4096)
 {
     byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
     try
     {
         JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes, version);
         if (CheckPackageType(typeof(T)))
         {
             jT808MessagePackReader.Decode(buffer);
         }
         var formatter = jT808Config.GetMessagePackFormatter <T>();
         return(formatter.Deserialize(ref jT808MessagePackReader, jT808Config));
     }
     finally
     {
         JT808ArrayPool.Return(buffer);
     }
 }
Esempio n. 13
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="bytes"></param>
 /// <param name="version"></param>
 /// <param name="options"></param>
 /// <param name="minBufferSize"></param>
 /// <returns></returns>
 public byte[] AnalyzeJsonBuffer(ReadOnlySpan <byte> bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default, int minBufferSize = 8096)
 {
     byte[] buffer = JT808ArrayPool.Rent(minBufferSize);
     try
     {
         JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes, version);
         jT808MessagePackReader.Decode(buffer);
         using MemoryStream memoryStream     = new MemoryStream();
         using Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(memoryStream, options);
         jT808Package.Analyze(ref jT808MessagePackReader, utf8JsonWriter, jT808Config);
         utf8JsonWriter.Flush();
         return(memoryStream.ToArray());
     }
     finally
     {
         JT808ArrayPool.Return(buffer);
     }
 }
Esempio n. 14
0
        /// <summary>
        /// 转义
        /// </summary>
        /// <param name="buf"></param>
        /// <returns></returns>
        public static ReadOnlySpan <byte> JT808DeEscape(ReadOnlySpan <byte> buf)
        {
            var bytes = JT808ArrayPool.Rent(buf.Length);

            try
            {
                int i      = 0;
                int offset = 0;
                int len    = 0 + buf.Length;
                while (i < len)
                {
                    if (buf[i] == 0x7d)
                    {
                        if (len > i + 1)
                        {
                            if (buf[i + 1] == 0x01)
                            {
                                bytes[offset++] = 0x7d;
                                i++;
                            }
                            else if (buf[i + 1] == 0x02)
                            {
                                bytes[offset++] = 0x7e;
                                i++;
                            }
                            else
                            {
                                bytes[offset++] = buf[i];
                            }
                        }
                    }
                    else
                    {
                        bytes[offset++] = buf[i];
                    }
                    i++;
                }
                return(bytes.AsSpan(0, offset).ToArray());
            }
            finally
            {
                JT808ArrayPool.Return(bytes);
            }
        }