From 3e05bc4a8582c3d77661983061ab9b0a6d169b7a Mon Sep 17 00:00:00 2001 From: SmallChi <564952747@qq.com> Date: Tue, 16 Oct 2018 19:28:31 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=A2=9E=E5=8A=A0=E6=BA=90=E5=8C=85=E8=BD=AC?= =?UTF-8?q?=E5=8F=91=E6=8E=A5=E5=8F=A3=202.=E4=BF=AE=E6=94=B9=E5=91=BD?= =?UTF-8?q?=E4=BB=A4=E6=96=B9=E5=BC=8F=203.=E4=BF=AE=E6=94=B9=E6=B3=A8?= =?UTF-8?q?=E5=85=A5=E6=96=B9=E5=BC=8F=204.=E5=A2=9E=E5=8A=A0=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E4=B8=9A=E5=8A=A1=E5=A4=84=E7=90=86=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../JT808.DotNetty.Hosting.csproj | 26 +++++++++++++ .../JT808MsgIdCustomHandler.cs | 26 +++++++++++++ src/JT808.DotNetty.Hosting/Program.cs | 39 +++++++++++++++++++ src/JT808.DotNetty.Hosting/appsettings.json | 18 +++++++++ src/JT808.DotNetty.sln | 6 +++ src/JT808.DotNetty/Codecs/JT808Decoder.cs | 5 --- ...808SourcePackageDispatcherConfiguration.cs | 11 ++++++ .../JT808SourcePackageDispatcherInfo.cs | 35 +++++++++++++++++ .../Handlers/JT808ConnectionHandler.cs | 6 --- .../IJT808SourcePackageDispatcher.cs | 15 +++++++ .../Internal/JT808MsgIdDefaultHandler.cs | 2 +- ...tensions.cs => JT808DotnettyExtensions.cs} | 10 +++-- src/JT808.DotNetty/JT808MsgIdHandlerBase.cs | 4 +- ...ssionManager.cs => JT808SessionManager.cs} | 8 ++-- 15 files changed, 190 insertions(+), 23 deletions(-) create mode 100644 src/JT808.DotNetty.Hosting/JT808.DotNetty.Hosting.csproj create mode 100644 src/JT808.DotNetty.Hosting/JT808MsgIdCustomHandler.cs create mode 100644 src/JT808.DotNetty.Hosting/Program.cs create mode 100644 src/JT808.DotNetty.Hosting/appsettings.json create mode 100644 src/JT808.DotNetty/Configurations/JT808SourcePackageDispatcherConfiguration.cs create mode 100644 src/JT808.DotNetty/Configurations/JT808SourcePackageDispatcherInfo.cs create mode 100644 src/JT808.DotNetty/Interfaces/IJT808SourcePackageDispatcher.cs rename src/JT808.DotNetty/{DotnettyExtensions.cs => JT808DotnettyExtensions.cs} (70%) rename src/JT808.DotNetty/{SessionManager.cs => JT808SessionManager.cs} (97%) diff --git a/README.md b/README.md index 3ea0f87..e3c4e2e 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ # JT808DotNetty -JT808DotNetty +JT808DotNetty专注消息业务处理 diff --git a/src/JT808.DotNetty.Hosting/JT808.DotNetty.Hosting.csproj b/src/JT808.DotNetty.Hosting/JT808.DotNetty.Hosting.csproj new file mode 100644 index 0000000..31c64fd --- /dev/null +++ b/src/JT808.DotNetty.Hosting/JT808.DotNetty.Hosting.csproj @@ -0,0 +1,26 @@ + + + + Exe + netcoreapp2.1 + latest + + + + + + + + + + + + + + + + Always + + + + diff --git a/src/JT808.DotNetty.Hosting/JT808MsgIdCustomHandler.cs b/src/JT808.DotNetty.Hosting/JT808MsgIdCustomHandler.cs new file mode 100644 index 0000000..59c39b2 --- /dev/null +++ b/src/JT808.DotNetty.Hosting/JT808MsgIdCustomHandler.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Text; +using DotNetty.Transport.Channels; +using JT808.Protocol; +using Microsoft.Extensions.Logging; + +namespace JT808.DotNetty.Hosting +{ + public class JT808MsgIdCustomHandler : JT808MsgIdHandlerBase + { + private readonly ILogger logger; + public JT808MsgIdCustomHandler( + ILoggerFactory loggerFactory, + JT808SessionManager sessionManager) : base(sessionManager) + { + logger = loggerFactory.CreateLogger(); + } + + public override JT808Package Msg0x0102(JT808Package reqJT808Package, IChannelHandlerContext ctx) + { + logger.LogDebug("Msg0x0102"); + return base.Msg0x0102(reqJT808Package, ctx); + } + } +} diff --git a/src/JT808.DotNetty.Hosting/Program.cs b/src/JT808.DotNetty.Hosting/Program.cs new file mode 100644 index 0000000..26b7ae8 --- /dev/null +++ b/src/JT808.DotNetty.Hosting/Program.cs @@ -0,0 +1,39 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using System; +using System.Threading.Tasks; + +namespace JT808.DotNetty.Hosting +{ + class Program + { + static async Task Main(string[] args) + { + //7E 01 02 00 06 01 38 12 34 56 78 00 85 32 31 31 33 31 33 B2 7E + + var serverHostBuilder = new HostBuilder() + .ConfigureAppConfiguration((hostingContext, config) => + { + config.SetBasePath(AppDomain.CurrentDomain.BaseDirectory); + config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); + }) + .ConfigureLogging((context, logging) => + { + logging.AddConsole(); + logging.SetMinimumLevel(LogLevel.Trace); + }) + .ConfigureServices((hostContext, services) => + { + services.AddSingleton(); + services.AddSingleton(typeof(ILogger<>), typeof(Logger<>)); + // 自定义消息处理业务 + services.Replace(new ServiceDescriptor(typeof(JT808MsgIdHandlerBase),typeof(JT808MsgIdCustomHandler),ServiceLifetime.Singleton)); + }) + .UseJT808Host(); + await serverHostBuilder.RunConsoleAsync(); + } + } +} diff --git a/src/JT808.DotNetty.Hosting/appsettings.json b/src/JT808.DotNetty.Hosting/appsettings.json new file mode 100644 index 0000000..9d4795f --- /dev/null +++ b/src/JT808.DotNetty.Hosting/appsettings.json @@ -0,0 +1,18 @@ +{ + "Logging": { + "IncludeScopes": false, + "Debug": { + "LogLevel": { + "Default": "Trace" + } + }, + "Console": { + "LogLevel": { + "Default": "Trace" + } + } + }, + "JT808Configuration": { + "Port": 6565 + } +} diff --git a/src/JT808.DotNetty.sln b/src/JT808.DotNetty.sln index 48e2787..906af01 100644 --- a/src/JT808.DotNetty.sln +++ b/src/JT808.DotNetty.sln @@ -5,6 +5,8 @@ VisualStudioVersion = 15.0.28010.2016 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty", "JT808.DotNetty\JT808.DotNetty.csproj", "{80C7F67E-6B7C-4178-8726-ADD3695622DD}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JT808.DotNetty.Hosting", "JT808.DotNetty.Hosting\JT808.DotNetty.Hosting.csproj", "{46772BD5-4132-48A7-856B-11D658F7ADDB}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -15,6 +17,10 @@ Global {80C7F67E-6B7C-4178-8726-ADD3695622DD}.Debug|Any CPU.Build.0 = Debug|Any CPU {80C7F67E-6B7C-4178-8726-ADD3695622DD}.Release|Any CPU.ActiveCfg = Release|Any CPU {80C7F67E-6B7C-4178-8726-ADD3695622DD}.Release|Any CPU.Build.0 = Release|Any CPU + {46772BD5-4132-48A7-856B-11D658F7ADDB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {46772BD5-4132-48A7-856B-11D658F7ADDB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {46772BD5-4132-48A7-856B-11D658F7ADDB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {46772BD5-4132-48A7-856B-11D658F7ADDB}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/JT808.DotNetty/Codecs/JT808Decoder.cs b/src/JT808.DotNetty/Codecs/JT808Decoder.cs index c1fb5a8..782e3b6 100644 --- a/src/JT808.DotNetty/Codecs/JT808Decoder.cs +++ b/src/JT808.DotNetty/Codecs/JT808Decoder.cs @@ -17,11 +17,6 @@ namespace JT808.DotNetty.Codecs { private readonly ILogger logger; - public JT808Decoder(ILogger logger) - { - this.logger = logger; - } - public JT808Decoder(ILoggerFactory loggerFactory) { this.logger = loggerFactory.CreateLogger(); diff --git a/src/JT808.DotNetty/Configurations/JT808SourcePackageDispatcherConfiguration.cs b/src/JT808.DotNetty/Configurations/JT808SourcePackageDispatcherConfiguration.cs new file mode 100644 index 0000000..94ae975 --- /dev/null +++ b/src/JT808.DotNetty/Configurations/JT808SourcePackageDispatcherConfiguration.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace JT808.DotNetty.Configurations +{ + public class JT808SourcePackageDispatcherConfiguration + { + public IList SourcePackageDispatchers { get; set; } + } +} diff --git a/src/JT808.DotNetty/Configurations/JT808SourcePackageDispatcherInfo.cs b/src/JT808.DotNetty/Configurations/JT808SourcePackageDispatcherInfo.cs new file mode 100644 index 0000000..52708be --- /dev/null +++ b/src/JT808.DotNetty/Configurations/JT808SourcePackageDispatcherInfo.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Net; +using System.Text; + +namespace JT808.DotNetty.Configurations +{ + public class JT808SourcePackageDispatcherInfo + { + public string Host { get; set; } + + public int Port { get; set; } + + private EndPoint endPoint; + + public EndPoint EndPoint + { + get + { + if (endPoint == null) + { + if (IPAddress.TryParse(Host, out IPAddress ip)) + { + endPoint = new IPEndPoint(ip, Port); + } + else + { + endPoint = new DnsEndPoint(Host, Port); + } + } + return endPoint; + } + } + } +} diff --git a/src/JT808.DotNetty/Handlers/JT808ConnectionHandler.cs b/src/JT808.DotNetty/Handlers/JT808ConnectionHandler.cs index 1931030..e31aaed 100644 --- a/src/JT808.DotNetty/Handlers/JT808ConnectionHandler.cs +++ b/src/JT808.DotNetty/Handlers/JT808ConnectionHandler.cs @@ -19,12 +19,6 @@ namespace JT808.DotNetty.Handlers logger = loggerFactory.CreateLogger(); } - public JT808ConnectionHandler( - ILogger logger) - { - this.logger = logger; - } - /// /// 通道激活 /// diff --git a/src/JT808.DotNetty/Interfaces/IJT808SourcePackageDispatcher.cs b/src/JT808.DotNetty/Interfaces/IJT808SourcePackageDispatcher.cs new file mode 100644 index 0000000..7acf7ab --- /dev/null +++ b/src/JT808.DotNetty/Interfaces/IJT808SourcePackageDispatcher.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; + +namespace JT808.DotNetty.Interfaces +{ + /// + /// 源包分发器 + /// + public interface IJT808SourcePackageDispatcher + { + Task SendAsync(byte[] data); + } +} diff --git a/src/JT808.DotNetty/Internal/JT808MsgIdDefaultHandler.cs b/src/JT808.DotNetty/Internal/JT808MsgIdDefaultHandler.cs index 7b65c3d..4c6d8fe 100644 --- a/src/JT808.DotNetty/Internal/JT808MsgIdDefaultHandler.cs +++ b/src/JT808.DotNetty/Internal/JT808MsgIdDefaultHandler.cs @@ -9,7 +9,7 @@ namespace JT808.DotNetty.Internal /// internal class JT808MsgIdDefaultHandler : JT808MsgIdHandlerBase { - public JT808MsgIdDefaultHandler(SessionManager sessionManager) : base(sessionManager) + public JT808MsgIdDefaultHandler(JT808SessionManager sessionManager) : base(sessionManager) { } } diff --git a/src/JT808.DotNetty/DotnettyExtensions.cs b/src/JT808.DotNetty/JT808DotnettyExtensions.cs similarity index 70% rename from src/JT808.DotNetty/DotnettyExtensions.cs rename to src/JT808.DotNetty/JT808DotnettyExtensions.cs index f526dbe..de9b161 100644 --- a/src/JT808.DotNetty/DotnettyExtensions.cs +++ b/src/JT808.DotNetty/JT808DotnettyExtensions.cs @@ -1,4 +1,5 @@ -using JT808.DotNetty.Configurations; +using JT808.DotNetty.Codecs; +using JT808.DotNetty.Configurations; using JT808.DotNetty.Handlers; using JT808.DotNetty.Internal; using Microsoft.Extensions.DependencyInjection; @@ -9,16 +10,17 @@ using System.Reflection; namespace JT808.DotNetty { - public static class DotnettyExtensions + public static class JT808DotnettyExtensions { public static IHostBuilder UseJT808Host(this IHostBuilder builder) { return builder.ConfigureServices((hostContext, services) => { services.Configure(hostContext.Configuration.GetSection("JT808Configuration")); - services.TryAddSingleton(); - services.TryAddSingleton(); + services.TryAddSingleton(); + services.TryAddSingleton(); services.TryAddScoped(); + services.TryAddScoped(); services.TryAddScoped(); services.AddHostedService(); }); diff --git a/src/JT808.DotNetty/JT808MsgIdHandlerBase.cs b/src/JT808.DotNetty/JT808MsgIdHandlerBase.cs index 0d3926d..2dc1502 100644 --- a/src/JT808.DotNetty/JT808MsgIdHandlerBase.cs +++ b/src/JT808.DotNetty/JT808MsgIdHandlerBase.cs @@ -14,11 +14,11 @@ namespace JT808.DotNetty /// public abstract class JT808MsgIdHandlerBase { - protected SessionManager sessionManager { get; } + protected JT808SessionManager sessionManager { get; } /// /// 初始化消息处理业务 /// - protected JT808MsgIdHandlerBase(SessionManager sessionManager) + protected JT808MsgIdHandlerBase(JT808SessionManager sessionManager) { this.sessionManager = sessionManager; HandlerDict = new Dictionary> diff --git a/src/JT808.DotNetty/SessionManager.cs b/src/JT808.DotNetty/JT808SessionManager.cs similarity index 97% rename from src/JT808.DotNetty/SessionManager.cs rename to src/JT808.DotNetty/JT808SessionManager.cs index 33cff17..7f2a2f9 100644 --- a/src/JT808.DotNetty/SessionManager.cs +++ b/src/JT808.DotNetty/JT808SessionManager.cs @@ -12,16 +12,16 @@ using System.Threading.Tasks; namespace JT808.DotNetty { - public class SessionManager: IDisposable + public class JT808SessionManager: IDisposable { - private readonly ILogger logger; + private readonly ILogger logger; private readonly JT808Configuration configuration; private readonly CancellationTokenSource cancellationTokenSource; - public SessionManager( + public JT808SessionManager( IOptions jT808ConfigurationAccessor, ILoggerFactory loggerFactory) { - logger = loggerFactory.CreateLogger(); + logger = loggerFactory.CreateLogger(); configuration = jT808ConfigurationAccessor.Value; cancellationTokenSource = new CancellationTokenSource(); Task.Run(() =>