Bläddra i källkod

1.增加源包转发接口

2.修改命令方式
3.修改注入方式
4.增加消息业务处理测试
tags/v1.0.0
SmallChi 6 år sedan
förälder
incheckning
3e05bc4a85
15 ändrade filer med 190 tillägg och 23 borttagningar
  1. +1
    -1
      README.md
  2. +26
    -0
      src/JT808.DotNetty.Hosting/JT808.DotNetty.Hosting.csproj
  3. +26
    -0
      src/JT808.DotNetty.Hosting/JT808MsgIdCustomHandler.cs
  4. +39
    -0
      src/JT808.DotNetty.Hosting/Program.cs
  5. +18
    -0
      src/JT808.DotNetty.Hosting/appsettings.json
  6. +6
    -0
      src/JT808.DotNetty.sln
  7. +0
    -5
      src/JT808.DotNetty/Codecs/JT808Decoder.cs
  8. +11
    -0
      src/JT808.DotNetty/Configurations/JT808SourcePackageDispatcherConfiguration.cs
  9. +35
    -0
      src/JT808.DotNetty/Configurations/JT808SourcePackageDispatcherInfo.cs
  10. +0
    -6
      src/JT808.DotNetty/Handlers/JT808ConnectionHandler.cs
  11. +15
    -0
      src/JT808.DotNetty/Interfaces/IJT808SourcePackageDispatcher.cs
  12. +1
    -1
      src/JT808.DotNetty/Internal/JT808MsgIdDefaultHandler.cs
  13. +6
    -4
      src/JT808.DotNetty/JT808DotnettyExtensions.cs
  14. +2
    -2
      src/JT808.DotNetty/JT808MsgIdHandlerBase.cs
  15. +4
    -4
      src/JT808.DotNetty/JT808SessionManager.cs

+ 1
- 1
README.md Visa fil

@@ -1,2 +1,2 @@
# JT808DotNetty
JT808DotNetty
JT808DotNetty专注消息业务处理

+ 26
- 0
src/JT808.DotNetty.Hosting/JT808.DotNetty.Hosting.csproj Visa fil

@@ -0,0 +1,26 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
<LangVersion>latest</LangVersion>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="2.1.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.1.1" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="2.1.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="2.1.1" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\JT808.DotNetty\JT808.DotNetty.csproj" />
</ItemGroup>

<ItemGroup>
<None Update="appsettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>

</Project>

+ 26
- 0
src/JT808.DotNetty.Hosting/JT808MsgIdCustomHandler.cs Visa fil

@@ -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<JT808MsgIdCustomHandler> logger;
public JT808MsgIdCustomHandler(
ILoggerFactory loggerFactory,
JT808SessionManager sessionManager) : base(sessionManager)
{
logger = loggerFactory.CreateLogger<JT808MsgIdCustomHandler>();
}

public override JT808Package Msg0x0102(JT808Package reqJT808Package, IChannelHandlerContext ctx)
{
logger.LogDebug("Msg0x0102");
return base.Msg0x0102(reqJT808Package, ctx);
}
}
}

+ 39
- 0
src/JT808.DotNetty.Hosting/Program.cs Visa fil

@@ -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<ILoggerFactory, LoggerFactory>();
services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
// 自定义消息处理业务
services.Replace(new ServiceDescriptor(typeof(JT808MsgIdHandlerBase),typeof(JT808MsgIdCustomHandler),ServiceLifetime.Singleton));
})
.UseJT808Host();
await serverHostBuilder.RunConsoleAsync();
}
}
}

+ 18
- 0
src/JT808.DotNetty.Hosting/appsettings.json Visa fil

@@ -0,0 +1,18 @@
{
"Logging": {
"IncludeScopes": false,
"Debug": {
"LogLevel": {
"Default": "Trace"
}
},
"Console": {
"LogLevel": {
"Default": "Trace"
}
}
},
"JT808Configuration": {
"Port": 6565
}
}

+ 6
- 0
src/JT808.DotNetty.sln Visa fil

@@ -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


+ 0
- 5
src/JT808.DotNetty/Codecs/JT808Decoder.cs Visa fil

@@ -17,11 +17,6 @@ namespace JT808.DotNetty.Codecs
{
private readonly ILogger<JT808Decoder> logger;

public JT808Decoder(ILogger<JT808Decoder> logger)
{
this.logger = logger;
}

public JT808Decoder(ILoggerFactory loggerFactory)
{
this.logger = loggerFactory.CreateLogger<JT808Decoder>();


+ 11
- 0
src/JT808.DotNetty/Configurations/JT808SourcePackageDispatcherConfiguration.cs Visa fil

@@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace JT808.DotNetty.Configurations
{
public class JT808SourcePackageDispatcherConfiguration
{
public IList<JT808SourcePackageDispatcherInfo> SourcePackageDispatchers { get; set; }
}
}

+ 35
- 0
src/JT808.DotNetty/Configurations/JT808SourcePackageDispatcherInfo.cs Visa fil

@@ -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;
}
}
}
}

+ 0
- 6
src/JT808.DotNetty/Handlers/JT808ConnectionHandler.cs Visa fil

@@ -19,12 +19,6 @@ namespace JT808.DotNetty.Handlers
logger = loggerFactory.CreateLogger<JT808ConnectionHandler>();
}

public JT808ConnectionHandler(
ILogger<JT808ConnectionHandler> logger)
{
this.logger = logger;
}

/// <summary>
/// 通道激活
/// </summary>


+ 15
- 0
src/JT808.DotNetty/Interfaces/IJT808SourcePackageDispatcher.cs Visa fil

@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;

namespace JT808.DotNetty.Interfaces
{
/// <summary>
/// 源包分发器
/// </summary>
public interface IJT808SourcePackageDispatcher
{
Task SendAsync(byte[] data);
}
}

+ 1
- 1
src/JT808.DotNetty/Internal/JT808MsgIdDefaultHandler.cs Visa fil

@@ -9,7 +9,7 @@ namespace JT808.DotNetty.Internal
/// </summary>
internal class JT808MsgIdDefaultHandler : JT808MsgIdHandlerBase
{
public JT808MsgIdDefaultHandler(SessionManager sessionManager) : base(sessionManager)
public JT808MsgIdDefaultHandler(JT808SessionManager sessionManager) : base(sessionManager)
{
}
}


src/JT808.DotNetty/DotnettyExtensions.cs → src/JT808.DotNetty/JT808DotnettyExtensions.cs Visa fil

@@ -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<JT808Configuration>(hostContext.Configuration.GetSection("JT808Configuration"));
services.TryAddSingleton<SessionManager>();
services.TryAddSingleton<JT808MsgIdDefaultHandler>();
services.TryAddSingleton<JT808SessionManager>();
services.TryAddSingleton<JT808MsgIdHandlerBase,JT808MsgIdDefaultHandler>();
services.TryAddScoped<JT808ConnectionHandler>();
services.TryAddScoped<JT808Decoder>();
services.TryAddScoped<JT808ServerHandler>();
services.AddHostedService<JT808ServerHost>();
});

+ 2
- 2
src/JT808.DotNetty/JT808MsgIdHandlerBase.cs Visa fil

@@ -14,11 +14,11 @@ namespace JT808.DotNetty
/// </summary>
public abstract class JT808MsgIdHandlerBase
{
protected SessionManager sessionManager { get; }
protected JT808SessionManager sessionManager { get; }
/// <summary>
/// 初始化消息处理业务
/// </summary>
protected JT808MsgIdHandlerBase(SessionManager sessionManager)
protected JT808MsgIdHandlerBase(JT808SessionManager sessionManager)
{
this.sessionManager = sessionManager;
HandlerDict = new Dictionary<JT808MsgId, Func<JT808Package, IChannelHandlerContext, JT808Package>>


src/JT808.DotNetty/SessionManager.cs → src/JT808.DotNetty/JT808SessionManager.cs Visa fil

@@ -12,16 +12,16 @@ using System.Threading.Tasks;

namespace JT808.DotNetty
{
public class SessionManager: IDisposable
public class JT808SessionManager: IDisposable
{
private readonly ILogger<SessionManager> logger;
private readonly ILogger<JT808SessionManager> logger;
private readonly JT808Configuration configuration;
private readonly CancellationTokenSource cancellationTokenSource;
public SessionManager(
public JT808SessionManager(
IOptions<JT808Configuration> jT808ConfigurationAccessor,
ILoggerFactory loggerFactory)
{
logger = loggerFactory.CreateLogger<SessionManager>();
logger = loggerFactory.CreateLogger<JT808SessionManager>();
configuration = jT808ConfigurationAccessor.Value;
cancellationTokenSource = new CancellationTokenSource();
Task.Run(() =>

Laddar…
Avbryt
Spara