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