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(() =>