From 548792033b28d328b8232e6c40b6a0d271942098 Mon Sep 17 00:00:00 2001 From: "SmallChi(Koike)" <564952747@qq.com> Date: Sat, 28 Mar 2020 18:06:42 +0800 Subject: [PATCH] =?UTF-8?q?jt808=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/JTTools.sln | 2 +- src/JTTools/Dtos/JT809RequestDto.cs | 14 +++ src/JTTools/Dtos/JTRequestDto.cs | 14 +++ src/JTTools/Dtos/JTResultDto.cs | 14 +++ src/JTTools/JTTools.csproj | 12 ++- .../JsonConvert/ByteArrayHexConverter.cs | 29 ++++++ .../ByteArrayHexTextJsonConverter.cs | 37 ++++++++ src/JTTools/Pages/JT808Analyze.razor | 35 ++++++++ src/JTTools/Pages/JT808Parse.razor | 35 ++++++++ src/JTTools/Pages/_Host.cshtml | 5 +- src/JTTools/Program.cs | 89 +++++++++++++++++-- src/JTTools/Shared/MainLayout.razor | 2 +- src/JTTools/Shared/NavMenu.razor | 10 +++ src/JTTools/Startup.cs | 60 ------------- src/JTTools/appsettings.Development.json | 3 +- src/JTTools/appsettings.json | 3 +- 16 files changed, 291 insertions(+), 73 deletions(-) create mode 100644 src/JTTools/Dtos/JT809RequestDto.cs create mode 100644 src/JTTools/Dtos/JTRequestDto.cs create mode 100644 src/JTTools/Dtos/JTResultDto.cs create mode 100644 src/JTTools/JsonConvert/ByteArrayHexConverter.cs create mode 100644 src/JTTools/JsonConvert/ByteArrayHexTextJsonConverter.cs create mode 100644 src/JTTools/Pages/JT808Analyze.razor create mode 100644 src/JTTools/Pages/JT808Parse.razor delete mode 100644 src/JTTools/Startup.cs diff --git a/src/JTTools.sln b/src/JTTools.sln index 8a26a5d..1da94f3 100644 --- a/src/JTTools.sln +++ b/src/JTTools.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.29123.88 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JTTools", "JTTools\JTTools.csproj", "{BBDC3FB3-B267-4BFB-803E-71287D361300}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JTTools", "JTTools\JTTools.csproj", "{BBDC3FB3-B267-4BFB-803E-71287D361300}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/src/JTTools/Dtos/JT809RequestDto.cs b/src/JTTools/Dtos/JT809RequestDto.cs new file mode 100644 index 0000000..61ff239 --- /dev/null +++ b/src/JTTools/Dtos/JT809RequestDto.cs @@ -0,0 +1,14 @@ +using JT809.Protocol.Configs; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace JTTools.Dtos +{ + public class JT809RequestDto: JTRequestDto + { + public bool IsEncrypt { get; set; } = false; + public JT809EncryptOptions EncryptOptions { get; set; } + } +} diff --git a/src/JTTools/Dtos/JTRequestDto.cs b/src/JTTools/Dtos/JTRequestDto.cs new file mode 100644 index 0000000..963c837 --- /dev/null +++ b/src/JTTools/Dtos/JTRequestDto.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace JTTools.Dtos +{ + public class JTRequestDto + { + public string HexData { get; set; } + public bool Skip { get; set; } + public bool Custom { get; set; } + } +} diff --git a/src/JTTools/Dtos/JTResultDto.cs b/src/JTTools/Dtos/JTResultDto.cs new file mode 100644 index 0000000..c3308a4 --- /dev/null +++ b/src/JTTools/Dtos/JTResultDto.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace JTTools.Dtos +{ + public class JTResultDto + { + public int Code { get; set; } + public string Message { get; set; } + public object Data { get; set; } + } +} diff --git a/src/JTTools/JTTools.csproj b/src/JTTools/JTTools.csproj index 2c2fe03..4311907 100644 --- a/src/JTTools/JTTools.csproj +++ b/src/JTTools/JTTools.csproj @@ -1,4 +1,4 @@ - + netcoreapp3.1 @@ -7,7 +7,15 @@ - + + + + + + + + + diff --git a/src/JTTools/JsonConvert/ByteArrayHexConverter.cs b/src/JTTools/JsonConvert/ByteArrayHexConverter.cs new file mode 100644 index 0000000..27624d6 --- /dev/null +++ b/src/JTTools/JsonConvert/ByteArrayHexConverter.cs @@ -0,0 +1,29 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace JTTools +{ + public class ByteArrayHexConverter : JsonConverter + { + public override bool CanConvert(Type objectType) => objectType == typeof(byte[]); + + public override bool CanRead => false; + public override bool CanWrite => true; + + public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) => throw new NotImplementedException(); + + private readonly string _separator; + + public ByteArrayHexConverter(string separator = " ") => _separator = separator; + + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + var hexString = string.Join(_separator, ((byte[])value).Select(p => p.ToString("X2"))); + writer.WriteValue(hexString); + } + } +} diff --git a/src/JTTools/JsonConvert/ByteArrayHexTextJsonConverter.cs b/src/JTTools/JsonConvert/ByteArrayHexTextJsonConverter.cs new file mode 100644 index 0000000..302688b --- /dev/null +++ b/src/JTTools/JsonConvert/ByteArrayHexTextJsonConverter.cs @@ -0,0 +1,37 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc.Formatters; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.Threading.Tasks; + +namespace JTTools.JsonConvert +{ + /// + /// + /// ref:https://github.com/dotnet/corefx/blob/release/3.0/src/System.Text.Json/tests/Serialization/CustomConverterTests.Array.cs + /// + public class ByteArrayHexTextJsonConverter : JsonConverter + { + public override byte[] Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + //string hexJson = reader.get(); + var hexJson = reader.GetString(); + var list = new List(); + foreach (string str in hexJson.Split(new string[] { ",", " " }, StringSplitOptions.RemoveEmptyEntries)) + { + list.Add(Convert.ToByte(str, 16)); + } + return list.ToArray(); + } + + public override void Write(Utf8JsonWriter writer, byte[] value, JsonSerializerOptions options) + { + var hexString = string.Join(" ", (value).Select(p => p.ToString("X2"))); + writer.WriteStringValue(hexString); + } + } +} diff --git a/src/JTTools/Pages/JT808Analyze.razor b/src/JTTools/Pages/JT808Analyze.razor new file mode 100644 index 0000000..957b7cf --- /dev/null +++ b/src/JTTools/Pages/JT808Analyze.razor @@ -0,0 +1,35 @@ +@page "/jt808analyze" + +@using JT808.Protocol; +@using JT808.Protocol.Extensions; +@using Newtonsoft.Json; +@inject IJT808Config JT808Config + +

jt808analyze

+ +

Hex: @HexData

+ + + +
+ @Json +
+ +@code { + private JT808Serializer Serializer; + + private string HexData = "7E 02 00 00 26 12 34 56 78 90 12 00 7D 02 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 7D 01 13 7E"; + + private string Json; + + protected override void OnInitialized() + { + Serializer = JT808Config.GetSerializer(); + } + + private void Query() + { + var data = HexData.ToHexBytes(); + Json = Serializer.Analyze(data); + } +} diff --git a/src/JTTools/Pages/JT808Parse.razor b/src/JTTools/Pages/JT808Parse.razor new file mode 100644 index 0000000..4a375cc --- /dev/null +++ b/src/JTTools/Pages/JT808Parse.razor @@ -0,0 +1,35 @@ +@page "/jt808" + +@using JT808.Protocol; +@using JT808.Protocol.Extensions; +@using Newtonsoft.Json; +@inject IJT808Config JT808Config + +

JT808Parse

+ +

Hex: @HexData

+ + + +
+ @Json +
+ +@code { + private JT808Serializer Serializer; + + private string HexData = "7E 02 00 00 26 12 34 56 78 90 12 00 7D 02 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 7D 01 13 7E"; + + private string Json; + + protected override void OnInitialized() + { + Serializer = JT808Config.GetSerializer(); + } + + private void Query() + { + var data = HexData.ToHexBytes(); + Json = JsonConvert.SerializeObject(Serializer.Deserialize(data)); + } +} diff --git a/src/JTTools/Pages/_Host.cshtml b/src/JTTools/Pages/_Host.cshtml index 011ce3b..77221dd 100644 --- a/src/JTTools/Pages/_Host.cshtml +++ b/src/JTTools/Pages/_Host.cshtml @@ -10,7 +10,9 @@ - JTTools + + + JTTools解析工具 @@ -31,6 +33,7 @@ 🗙 +
Copyright © 2015-2019 SmallChi. All Rights Reserved. 粤ICP备19128140号
diff --git a/src/JTTools/Program.cs b/src/JTTools/Program.cs index 9d2869e..8592311 100644 --- a/src/JTTools/Program.cs +++ b/src/JTTools/Program.cs @@ -3,11 +3,22 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; +using JT808.Protocol; +using JT808.Protocol.Extensions.JT1078; +using JT808.Protocol.Extensions.JTActiveSafety; +using JT809.Protocol; +using JT809.Protocol.Extensions.JT1078; using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.HttpsPolicy; +using Microsoft.Extensions.DependencyInjection; +using JTTools.Data; +using Newtonsoft.Json.Serialization; namespace JTTools { @@ -15,14 +26,80 @@ namespace JTTools { public static void Main(string[] args) { - CreateHostBuilder(args).Build().Run(); - } - - public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { - webBuilder.UseStartup(); - }); + webBuilder.ConfigureServices((hostingContext, services) => + { + services.AddRazorPages(); + services.AddServerSideBlazor(); + services.AddSingleton(); + services.AddControllers() + //Microsoft.AspNetCore.Mvc.NewtonsoftJson + .AddNewtonsoftJson(jsonOptions => + { + jsonOptions.SerializerSettings.Converters.Add(new ByteArrayHexConverter()); + jsonOptions.SerializerSettings.ContractResolver = new DefaultContractResolver(); + //jsonOptions.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented; + }) + //.AddJsonOptions(jsonOptions => + //{ + // jsonOptions.JsonSerializerOptions.MaxDepth = 64; + + // jsonOptions.JsonSerializerOptions.Converters.Add(new ByteArrayHexTextJsonConverter()); + //}) + ; + services.AddCors(options => + options.AddPolicy("Domain", builder => + builder.WithOrigins(hostingContext.Configuration.GetSection("AllowedOrigins").Value.Split(",")) + .AllowAnyMethod() + .AllowAnyHeader() + .AllowAnyOrigin())); + + }) + .ConfigureKestrel(ksOptions => + { + ksOptions.ListenAnyIP(18888); + }) + .ConfigureLogging((context, logging) => { + //if (Environment.OSVersion.Platform == PlatformID.Unix) + //{ + // NLog.LogManager.LoadConfiguration("Configs/nlog.unix.config"); + //} + //else + //{ + // NLog.LogManager.LoadConfiguration("Configs/nlog.win.config"); + //} + //logging.AddNLog(new NLogProviderOptions { CaptureMessageTemplates = true, CaptureMessageProperties = true }); + //logging.SetMinimumLevel(LogLevel.Trace); + }) + .ConfigureAppConfiguration((hostingContext, config) => + { + config.SetBasePath(AppDomain.CurrentDomain.BaseDirectory); + config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); + }) + .Configure(app => { + app.UseRouting(); + app.UseCors("Domain"); + app.UseStaticFiles(); + app.UseEndpoints(endpoints => + { + endpoints.MapControllers(); + endpoints.MapBlazorHub(); + endpoints.MapFallbackToPage("/_Host"); + }); + }); + }) + .ConfigureServices(services => + { + services.AddJT808Configure() + .AddJT1078Configure() + .AddJTActiveSafetyConfigure(); + services.AddJT809Configure() + .AddJT1078Configure(); + }) + .Build() + .Run(); + } } } diff --git a/src/JTTools/Shared/MainLayout.razor b/src/JTTools/Shared/MainLayout.razor index 74820a0..dac337b 100644 --- a/src/JTTools/Shared/MainLayout.razor +++ b/src/JTTools/Shared/MainLayout.razor @@ -6,7 +6,7 @@
- About +
diff --git a/src/JTTools/Shared/NavMenu.razor b/src/JTTools/Shared/NavMenu.razor index e9244ff..5d3377d 100644 --- a/src/JTTools/Shared/NavMenu.razor +++ b/src/JTTools/Shared/NavMenu.razor @@ -12,6 +12,16 @@ Home + +