@@ -36,8 +36,6 @@ namespace JT808.DotNetty.SimpleServer | |||||
services.AddJT808Configure() | services.AddJT808Configure() | ||||
.AddJT808NettyCore(hostContext.Configuration) | .AddJT808NettyCore(hostContext.Configuration) | ||||
.AddJT808TcpNettyHost() | .AddJT808TcpNettyHost() | ||||
// 自定义Tcp消息处理业务 | |||||
.ReplaceMsgIdHandler<JT808MsgIdTcpSimpleHandler>() | |||||
.Builder(); | .Builder(); | ||||
}); | }); | ||||
@@ -1,33 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT808.DotNetty.Abstractions.Dtos | |||||
{ | |||||
public class JT808SystemCollectInfoDto | |||||
{ | |||||
/// <summary> | |||||
/// 进程Id | |||||
/// </summary> | |||||
public int ProcessId { get; set; } | |||||
/// <summary> | |||||
/// 进程分配内存 | |||||
/// 单位MB | |||||
/// </summary> | |||||
public double WorkingSet64 { get; set; } | |||||
/// <summary> | |||||
/// 进程分配内存峰值 | |||||
/// 单位MB | |||||
/// </summary> | |||||
public double PeakWorkingSet64 { get; set; } | |||||
/// <summary> | |||||
/// 进程分配私有内存 | |||||
/// 单位MB | |||||
/// </summary> | |||||
public double PrivateMemorySize64 { get; set; } | |||||
/// <summary> | |||||
/// 进程执行CPU总处理时间 | |||||
/// </summary> | |||||
public TimeSpan CPUTotalProcessorTime { get; set; } | |||||
} | |||||
} |
@@ -1,20 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT808.DotNetty.Abstractions.Dtos | |||||
{ | |||||
public class JT808TrafficInfoDto | |||||
{ | |||||
/// <summary> | |||||
/// 总接收大小 | |||||
/// 单位KB | |||||
/// </summary> | |||||
public double TotalReceiveSize { get; set; } | |||||
/// <summary> | |||||
/// 总发送大小 | |||||
/// 单位KB | |||||
/// </summary> | |||||
public double TotalSendSize { get; set; } | |||||
} | |||||
} |
@@ -12,32 +12,10 @@ | |||||
public const string SessionPrefix = "Session"; | public const string SessionPrefix = "Session"; | ||||
public const string TransmitPrefix = "Transmit"; | |||||
public const string SystemCollectPrefix = "SystemCollect"; | |||||
public const string TrafficPrefix = "Traffic"; | |||||
public const string TcpPrefix = "Tcp"; | public const string TcpPrefix = "Tcp"; | ||||
public const string UdpPrefix = "Udp"; | public const string UdpPrefix = "Udp"; | ||||
/// <summary> | |||||
///获取当前系统进程使用率 | |||||
/// </summary> | |||||
public static string SystemCollectGet = $"{RouteTablePrefix}/{SystemCollectPrefix}/Get"; | |||||
/// <summary> | |||||
///基于Tcp的添加转发过滤地址 | |||||
/// </summary> | |||||
public static string TransmitAdd = $"{RouteTablePrefix}/{TcpPrefix}/{TransmitPrefix}/Add"; | |||||
/// <summary> | |||||
/// 基于Tcp的删除转发过滤地址(不能删除在网关服务器配置文件配的地址) | |||||
/// </summary> | |||||
public static string TransmitRemove = $"{RouteTablePrefix}/{TcpPrefix}/{TransmitPrefix}/Remove"; | |||||
/// <summary> | |||||
///基于Tcp的获取转发过滤地址信息集合 | |||||
/// </summary> | |||||
public static string TransmitGetAll = $"{RouteTablePrefix}/{TcpPrefix}/{TransmitPrefix}/GetAll"; | |||||
/// <summary> | /// <summary> | ||||
/// 基于Tcp的包计数器 | /// 基于Tcp的包计数器 | ||||
/// </summary> | /// </summary> | ||||
@@ -54,11 +32,6 @@ | |||||
/// 基于Tcp的统一下发信息 | /// 基于Tcp的统一下发信息 | ||||
/// </summary> | /// </summary> | ||||
public static string UnificationTcpSend = $"{RouteTablePrefix}/{TcpPrefix}/UnificationSend"; | public static string UnificationTcpSend = $"{RouteTablePrefix}/{TcpPrefix}/UnificationSend"; | ||||
/// <summary> | |||||
/// 基于Tcp的流量服务获取 | |||||
/// </summary> | |||||
public static string TrafficTcpGet = $"{RouteTablePrefix}/{TcpPrefix}/{TrafficPrefix}/Get"; | |||||
/// <summary> | /// <summary> | ||||
/// 获取Udp包计数器 | /// 获取Udp包计数器 | ||||
/// </summary> | /// </summary> | ||||
@@ -75,10 +48,6 @@ | |||||
/// 基于Udp的会话服务-通过设备终端号移除对应会话 | /// 基于Udp的会话服务-通过设备终端号移除对应会话 | ||||
/// </summary> | /// </summary> | ||||
public static string SessionUdpRemoveByTerminalPhoneNo = $"{RouteTablePrefix}/{UdpPrefix}/{SessionPrefix}/RemoveByTerminalPhoneNo"; | public static string SessionUdpRemoveByTerminalPhoneNo = $"{RouteTablePrefix}/{UdpPrefix}/{SessionPrefix}/RemoveByTerminalPhoneNo"; | ||||
/// <summary> | |||||
/// 基于Udp的流量服务获取 | |||||
/// </summary | |||||
public static string TrafficUdpGet = $"{RouteTablePrefix}/{UdpPrefix}/{TrafficPrefix}/Get"; | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -4,9 +4,6 @@ using JT808.Protocol; | |||||
using DotNetty.Transport.Channels; | using DotNetty.Transport.Channels; | ||||
using JT808.DotNetty.Core.Interfaces; | using JT808.DotNetty.Core.Interfaces; | ||||
using Microsoft.Extensions.Logging; | using Microsoft.Extensions.Logging; | ||||
using JT808.DotNetty.Core.Services; | |||||
using JT808.DotNetty.Abstractions; | |||||
using JT808.DotNetty.Abstractions.Enums; | |||||
using JT808.Protocol.Interfaces; | using JT808.Protocol.Interfaces; | ||||
namespace JT808.DotNetty.Core.Codecs | namespace JT808.DotNetty.Core.Codecs | ||||
@@ -18,21 +15,13 @@ namespace JT808.DotNetty.Core.Codecs | |||||
{ | { | ||||
private readonly ILogger<JT808TcpEncoder> logger; | private readonly ILogger<JT808TcpEncoder> logger; | ||||
private readonly JT808TrafficService jT808TrafficService; | |||||
private readonly IJT808DownlinkPacket jT808DownlinkPacket; | |||||
private readonly JT808Serializer JT808Serializer; | private readonly JT808Serializer JT808Serializer; | ||||
public JT808TcpEncoder( | public JT808TcpEncoder( | ||||
IJT808Config jT808Config, | IJT808Config jT808Config, | ||||
ILoggerFactory loggerFactory, | |||||
JT808TrafficServiceFactory jT808TrafficServiceFactory, | |||||
IJT808DownlinkPacket jT808DownlinkPacket) | |||||
ILoggerFactory loggerFactory) | |||||
{ | { | ||||
logger = loggerFactory.CreateLogger<JT808TcpEncoder>(); | logger = loggerFactory.CreateLogger<JT808TcpEncoder>(); | ||||
this.jT808TrafficService = jT808TrafficServiceFactory.Create(JT808TransportProtocolType.tcp); | |||||
this.jT808DownlinkPacket = jT808DownlinkPacket; | |||||
this.JT808Serializer = jT808Config.GetSerializer(); | this.JT808Serializer = jT808Config.GetSerializer(); | ||||
} | } | ||||
@@ -43,8 +32,6 @@ namespace JT808.DotNetty.Core.Codecs | |||||
try | try | ||||
{ | { | ||||
var sendData = JT808Serializer.Serialize(message.Package, message.MinBufferSize); | var sendData = JT808Serializer.Serialize(message.Package, message.MinBufferSize); | ||||
jT808TrafficService.SendSize(sendData.Length); | |||||
jT808DownlinkPacket.ProcessorAsync(sendData, JT808TransportProtocolType.tcp); | |||||
output.WriteBytes(Unpooled.WrappedBuffer(sendData)); | output.WriteBytes(Unpooled.WrappedBuffer(sendData)); | ||||
} | } | ||||
catch (JT808.Protocol.Exceptions.JT808Exception ex) | catch (JT808.Protocol.Exceptions.JT808Exception ex) | ||||
@@ -58,8 +45,6 @@ namespace JT808.DotNetty.Core.Codecs | |||||
} | } | ||||
else if (message.HexData != null) | else if (message.HexData != null) | ||||
{ | { | ||||
jT808TrafficService.SendSize(message.HexData.Length); | |||||
jT808DownlinkPacket.ProcessorAsync(message.HexData, JT808TransportProtocolType.tcp); | |||||
output.WriteBytes(Unpooled.WrappedBuffer(message.HexData)); | output.WriteBytes(Unpooled.WrappedBuffer(message.HexData)); | ||||
} | } | ||||
} | } | ||||
@@ -13,19 +13,15 @@ namespace JT808.DotNetty.Core.Impls | |||||
{ | { | ||||
class JT808DatagramPacketImpl : IJT808DatagramPacket | class JT808DatagramPacketImpl : IJT808DatagramPacket | ||||
{ | { | ||||
private readonly JT808TrafficService jT808TrafficService; | |||||
private readonly IJT808DownlinkPacket jT808DownlinkPacket; | private readonly IJT808DownlinkPacket jT808DownlinkPacket; | ||||
public JT808DatagramPacketImpl( | public JT808DatagramPacketImpl( | ||||
JT808TrafficServiceFactory jT808TrafficServiceFactory, | |||||
IJT808DownlinkPacket jT808DownlinkPacket) | IJT808DownlinkPacket jT808DownlinkPacket) | ||||
{ | { | ||||
this.jT808DownlinkPacket = jT808DownlinkPacket; | this.jT808DownlinkPacket = jT808DownlinkPacket; | ||||
this.jT808TrafficService = jT808TrafficServiceFactory.Create(JT808TransportProtocolType.udp); | |||||
} | } | ||||
public DatagramPacket Create(byte[] message, EndPoint recipient) | public DatagramPacket Create(byte[] message, EndPoint recipient) | ||||
{ | { | ||||
jT808TrafficService.SendSize(message.Length); | |||||
jT808DownlinkPacket.ProcessorAsync(message, JT808TransportProtocolType.udp); | jT808DownlinkPacket.ProcessorAsync(message, JT808TransportProtocolType.udp); | ||||
return new DatagramPacket(Unpooled.WrappedBuffer(message), recipient); | return new DatagramPacket(Unpooled.WrappedBuffer(message), recipient); | ||||
} | } | ||||
@@ -1,17 +0,0 @@ | |||||
using JT808.DotNetty.Abstractions; | |||||
using JT808.DotNetty.Abstractions.Enums; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
namespace JT808.DotNetty.Core.Impls | |||||
{ | |||||
class JT808DownlinkPacketEmptyImpl : IJT808DownlinkPacket | |||||
{ | |||||
public Task ProcessorAsync(byte[] data, JT808TransportProtocolType transportProtocolType) | |||||
{ | |||||
return Task.CompletedTask; | |||||
} | |||||
} | |||||
} |
@@ -1,16 +0,0 @@ | |||||
using JT808.DotNetty.Abstractions; | |||||
using System.Threading.Tasks; | |||||
namespace JT808.DotNetty.Core.Impls | |||||
{ | |||||
/// <summary> | |||||
/// 原包分发器默认空实现 | |||||
/// </summary> | |||||
public class JT808SourcePackageDispatcherEmptyImpl : IJT808SourcePackageDispatcher | |||||
{ | |||||
public Task SendAsync(byte[] data) | |||||
{ | |||||
return Task.CompletedTask; | |||||
} | |||||
} | |||||
} |
@@ -1,17 +0,0 @@ | |||||
using JT808.DotNetty.Abstractions; | |||||
using JT808.DotNetty.Abstractions.Enums; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
namespace JT808.DotNetty.Core.Impls | |||||
{ | |||||
class JT808UplinkPacketEmptyImpl : IJT808UplinkPacket | |||||
{ | |||||
public Task ProcessorAsync(byte[] data, JT808TransportProtocolType transportProtocolType) | |||||
{ | |||||
return Task.CompletedTask; | |||||
} | |||||
} | |||||
} |
@@ -10,9 +10,6 @@ namespace JT808.DotNetty.Core.Interfaces | |||||
public interface IJT808NettyBuilder | public interface IJT808NettyBuilder | ||||
{ | { | ||||
IJT808Builder JT808Builder { get; } | IJT808Builder JT808Builder { get; } | ||||
IJT808NettyBuilder ReplaceSourcePackageDispatcher<T>() where T : IJT808SourcePackageDispatcher; | |||||
IJT808NettyBuilder ReplaceDownlinkPacket<T>() where T: IJT808DownlinkPacket; | |||||
IJT808NettyBuilder ReplaceUplinkPacket<T>() where T : IJT808UplinkPacket; | |||||
IJT808NettyBuilder ReplaceSessionPublishing<T>() where T : IJT808SessionPublishing; | IJT808NettyBuilder ReplaceSessionPublishing<T>() where T : IJT808SessionPublishing; | ||||
IJT808Builder Builder(); | IJT808Builder Builder(); | ||||
} | } | ||||
@@ -0,0 +1,20 @@ | |||||
using DotNetty.Transport.Channels; | |||||
using JT808.DotNetty.Abstractions.Enums; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT808.DotNetty.Core.Interfaces | |||||
{ | |||||
public interface IJT808Session | |||||
{ | |||||
/// <summary> | |||||
/// 终端手机号 | |||||
/// </summary> | |||||
string TerminalPhoneNo { get; set; } | |||||
IChannel Channel { get; set; } | |||||
DateTime LastActiveTime { get; set; } | |||||
DateTime StartTime { get; set; } | |||||
JT808TransportProtocolType TransportProtocolType { get; set; } | |||||
} | |||||
} |
@@ -1,20 +0,0 @@ | |||||
using JT808.DotNetty.Core.Metadata; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT808.DotNetty.Core.Interfaces | |||||
{ | |||||
public interface IJT808TcpCustomMsgIdHandler | |||||
{ | |||||
IJT808Reply Proccesser(JT808Request request); | |||||
} | |||||
public class JT808TcpCustomMsgIdHandlerEmpty : IJT808TcpCustomMsgIdHandler | |||||
{ | |||||
public IJT808Reply Proccesser(JT808Request request) | |||||
{ | |||||
return default; | |||||
} | |||||
} | |||||
} |
@@ -9,8 +9,6 @@ namespace JT808.DotNetty.Core.Interfaces | |||||
{ | { | ||||
IJT808NettyBuilder Instance { get; } | IJT808NettyBuilder Instance { get; } | ||||
IJT808NettyBuilder Builder(); | IJT808NettyBuilder Builder(); | ||||
IJT808TcpNettyBuilder ReplaceCustomMsgIdHandler<T>() where T : IJT808TcpCustomMsgIdHandler; | |||||
IJT808TcpNettyBuilder ReplaceMsgIdHandler<T>() where T : JT808MsgIdTcpHandlerBase; | |||||
IJT808TcpNettyBuilder ReplaceSessionService<T>() where T : IJT808TcpSessionService; | IJT808TcpNettyBuilder ReplaceSessionService<T>() where T : IJT808TcpSessionService; | ||||
IJT808TcpNettyBuilder ReplaceUnificationSendService<T>() where T : IJT808UnificationTcpSendService; | IJT808TcpNettyBuilder ReplaceUnificationSendService<T>() where T : IJT808UnificationTcpSendService; | ||||
} | } | ||||
@@ -1,20 +0,0 @@ | |||||
using JT808.DotNetty.Core.Metadata; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT808.DotNetty.Core.Interfaces | |||||
{ | |||||
public interface IJT808UdpCustomMsgIdHandler | |||||
{ | |||||
IJT808Reply Proccesser(JT808Request request); | |||||
} | |||||
public class JT808UdpCustomMsgIdHandlerEmpty : IJT808UdpCustomMsgIdHandler | |||||
{ | |||||
public IJT808Reply Proccesser(JT808Request request) | |||||
{ | |||||
return default; | |||||
} | |||||
} | |||||
} |
@@ -9,8 +9,6 @@ namespace JT808.DotNetty.Core.Interfaces | |||||
{ | { | ||||
IJT808NettyBuilder Instance { get; } | IJT808NettyBuilder Instance { get; } | ||||
IJT808NettyBuilder Builder(); | IJT808NettyBuilder Builder(); | ||||
IJT808UdpNettyBuilder ReplaceCustomMsgIdHandler<T>() where T : IJT808UdpCustomMsgIdHandler; | |||||
IJT808UdpNettyBuilder ReplaceMsgIdHandler<T>() where T : JT808MsgIdUdpHandlerBase; | |||||
IJT808UdpNettyBuilder ReplaceSessionService<T>() where T : IJT808UdpSessionService; | IJT808UdpNettyBuilder ReplaceSessionService<T>() where T : IJT808UdpSessionService; | ||||
IJT808UdpNettyBuilder ReplaceUnificationSendService<T>() where T : IJT808UnificationUdpSendService; | IJT808UdpNettyBuilder ReplaceUnificationSendService<T>() where T : IJT808UnificationUdpSendService; | ||||
} | } | ||||
@@ -7,10 +7,6 @@ | |||||
<PackageReleaseNotes>基于DotNetty实现的JT808DotNetty的核心库</PackageReleaseNotes> | <PackageReleaseNotes>基于DotNetty实现的JT808DotNetty的核心库</PackageReleaseNotes> | ||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | |||||
<Compile Remove="Jobs\JT808UdpMaintainSessionJob.cs" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="DotNetty.Handlers" Version="0.6.0" /> | <PackageReference Include="DotNetty.Handlers" Version="0.6.0" /> | ||||
<PackageReference Include="DotNetty.Transport.Libuv" Version="0.6.0" /> | <PackageReference Include="DotNetty.Transport.Libuv" Version="0.6.0" /> | ||||
@@ -1,74 +0,0 @@ | |||||
using Microsoft.Extensions.Hosting; | |||||
using System; | |||||
using System.Threading; | |||||
using System.Threading.Tasks; | |||||
namespace JT808.DotNetty.Core | |||||
{ | |||||
/// <summary> | |||||
/// | |||||
/// <see cref="https://blogs.msdn.microsoft.com/cesardelatorre/2017/11/18/implementing-background-tasks-in-microservices-with-ihostedservice-and-the-backgroundservice-class-net-core-2-x/"/> | |||||
/// </summary> | |||||
public abstract class JT808BackgroundService : IHostedService, IDisposable | |||||
{ | |||||
/// <summary> | |||||
/// 默认次日过期 | |||||
/// </summary> | |||||
public virtual TimeSpan DelayTimeSpan | |||||
{ | |||||
get | |||||
{ | |||||
DateTime current = DateTime.Now; | |||||
DateTime tmp = current.Date.AddDays(1).AddSeconds(-1); | |||||
return tmp.Subtract(current); | |||||
} | |||||
set { } | |||||
} | |||||
private Task _executingTask; | |||||
public abstract string ServiceName { get; } | |||||
private readonly CancellationTokenSource _stoppingCts = new CancellationTokenSource(); | |||||
protected abstract Task ExecuteAsync(CancellationToken stoppingToken); | |||||
public void Dispose() | |||||
{ | |||||
_stoppingCts.Cancel(); | |||||
} | |||||
public virtual Task StartAsync(CancellationToken cancellationToken) | |||||
{ | |||||
// Store the task we're executing | |||||
_executingTask = ExecuteAsync(_stoppingCts.Token); | |||||
// If the task is completed then return it, | |||||
// this will bubble cancellation and failure to the caller | |||||
if (_executingTask.IsCompleted) | |||||
{ | |||||
return _executingTask; | |||||
} | |||||
// Otherwise it's running | |||||
return Task.CompletedTask; | |||||
} | |||||
public virtual async Task StopAsync(CancellationToken cancellationToken) | |||||
{ | |||||
// Stop called without start | |||||
if (_executingTask == null) | |||||
{ | |||||
return; | |||||
} | |||||
try | |||||
{ | |||||
// Signal cancellation to the executing method | |||||
_stoppingCts.Cancel(); | |||||
} | |||||
finally | |||||
{ | |||||
// Wait until the task completes or the stop token triggers | |||||
await Task.WhenAny(_executingTask, Task.Delay(Timeout.Infinite,cancellationToken)); | |||||
} | |||||
} | |||||
} | |||||
} |
@@ -58,13 +58,7 @@ namespace JT808.DotNetty.Core | |||||
} | } | ||||
IJT808NettyBuilder nettyBuilder = new JT808NettyBuilderDefault(jt808Builder); | IJT808NettyBuilder nettyBuilder = new JT808NettyBuilderDefault(jt808Builder); | ||||
nettyBuilder.JT808Builder.Services.Configure<JT808Configuration>(configuration.GetSection("JT808Configuration")); | nettyBuilder.JT808Builder.Services.Configure<JT808Configuration>(configuration.GetSection("JT808Configuration")); | ||||
nettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808SessionPublishing, JT808SessionPublishingEmptyImpl>(); | |||||
nettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808DownlinkPacket, JT808DownlinkPacketEmptyImpl>(); | |||||
nettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808UplinkPacket, JT808UplinkPacketEmptyImpl>(); | |||||
nettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808SourcePackageDispatcher, JT808SourcePackageDispatcherEmptyImpl>(); | |||||
nettyBuilder.JT808Builder.Services.TryAddSingleton<JT808AtomicCounterServiceFactory>(); | nettyBuilder.JT808Builder.Services.TryAddSingleton<JT808AtomicCounterServiceFactory>(); | ||||
nettyBuilder.JT808Builder.Services.TryAddSingleton<JT808TrafficServiceFactory>(); | |||||
nettyBuilder.JT808Builder.Services.TryAddSingleton<JT808SimpleSystemCollectService>(); | |||||
return nettyBuilder; | return nettyBuilder; | ||||
} | } | ||||
@@ -83,13 +77,7 @@ namespace JT808.DotNetty.Core | |||||
} | } | ||||
IJT808NettyBuilder nettyBuilder = new JT808NettyBuilderDefault(jt808Builder); | IJT808NettyBuilder nettyBuilder = new JT808NettyBuilderDefault(jt808Builder); | ||||
nettyBuilder.JT808Builder.Services.Configure(jt808Options); | nettyBuilder.JT808Builder.Services.Configure(jt808Options); | ||||
nettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808SessionPublishing, JT808SessionPublishingEmptyImpl>(); | |||||
nettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808DownlinkPacket, JT808DownlinkPacketEmptyImpl>(); | |||||
nettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808UplinkPacket, JT808UplinkPacketEmptyImpl>(); | |||||
nettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808SourcePackageDispatcher, JT808SourcePackageDispatcherEmptyImpl>(); | |||||
nettyBuilder.JT808Builder.Services.TryAddSingleton<JT808AtomicCounterServiceFactory>(); | nettyBuilder.JT808Builder.Services.TryAddSingleton<JT808AtomicCounterServiceFactory>(); | ||||
nettyBuilder.JT808Builder.Services.TryAddSingleton<JT808TrafficServiceFactory>(); | |||||
nettyBuilder.JT808Builder.Services.TryAddSingleton<JT808SimpleSystemCollectService>(); | |||||
return nettyBuilder; | return nettyBuilder; | ||||
} | } | ||||
} | } |
@@ -1,38 +0,0 @@ | |||||
using JT808.DotNetty.Abstractions.Enums; | |||||
using JT808.DotNetty.Core.Services; | |||||
using Microsoft.Extensions.Logging; | |||||
using System.Threading; | |||||
using System.Threading.Tasks; | |||||
namespace JT808.DotNetty.Core.Jobs | |||||
{ | |||||
internal class JT808TcpAtomicCouterResetDailyJob : JT808BackgroundService | |||||
{ | |||||
private readonly ILogger<JT808TcpAtomicCouterResetDailyJob> _logger; | |||||
private readonly JT808AtomicCounterService _jT808AtomicCounterService; | |||||
public JT808TcpAtomicCouterResetDailyJob( | |||||
JT808AtomicCounterServiceFactory jT808AtomicCounterServiceFactory, | |||||
ILoggerFactory loggerFactory) | |||||
{ | |||||
_jT808AtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808TransportProtocolType.tcp); | |||||
_logger =loggerFactory.CreateLogger<JT808TcpAtomicCouterResetDailyJob>(); | |||||
} | |||||
public override string ServiceName => nameof(JT808TcpAtomicCouterResetDailyJob); | |||||
protected override async Task ExecuteAsync(CancellationToken stoppingToken) | |||||
{ | |||||
_logger.LogInformation($"{ServiceName} is starting."); | |||||
stoppingToken.Register(() => _logger.LogInformation($"{ServiceName} background task is stopping.")); | |||||
while (!stoppingToken.IsCancellationRequested) | |||||
{ | |||||
_logger.LogInformation($"{ServiceName} task doing background work."); | |||||
_jT808AtomicCounterService.Reset(); | |||||
await Task.Delay(DelayTimeSpan, stoppingToken); | |||||
} | |||||
_logger.LogInformation($"{ServiceName} background task is stopping."); | |||||
} | |||||
} | |||||
} |
@@ -1,38 +0,0 @@ | |||||
using JT808.DotNetty.Abstractions.Enums; | |||||
using JT808.DotNetty.Core.Services; | |||||
using Microsoft.Extensions.Logging; | |||||
using System.Threading; | |||||
using System.Threading.Tasks; | |||||
namespace JT808.DotNetty.Core.Jobs | |||||
{ | |||||
internal class JT808TcpTrafficResetDailyJob : JT808BackgroundService | |||||
{ | |||||
private readonly ILogger<JT808TcpTrafficResetDailyJob> _logger; | |||||
private readonly JT808TrafficService _jT808TrafficService; | |||||
public JT808TcpTrafficResetDailyJob( | |||||
JT808TrafficServiceFactory jT808TrafficServiceFactory, | |||||
ILoggerFactory loggerFactory) | |||||
{ | |||||
_jT808TrafficService = jT808TrafficServiceFactory.Create(JT808TransportProtocolType.tcp); | |||||
_logger =loggerFactory.CreateLogger<JT808TcpTrafficResetDailyJob>(); | |||||
} | |||||
public override string ServiceName => nameof(JT808TcpTrafficResetDailyJob); | |||||
protected override async Task ExecuteAsync(CancellationToken stoppingToken) | |||||
{ | |||||
_logger.LogInformation($"{ServiceName} is starting."); | |||||
stoppingToken.Register(() => _logger.LogInformation($"{ServiceName} background task is stopping.")); | |||||
while (!stoppingToken.IsCancellationRequested) | |||||
{ | |||||
_logger.LogInformation($"{ServiceName} task doing background work."); | |||||
_jT808TrafficService.ResetSize(); | |||||
await Task.Delay(DelayTimeSpan, stoppingToken); | |||||
} | |||||
_logger.LogInformation($"{ServiceName} background task is stopping."); | |||||
} | |||||
} | |||||
} |
@@ -1,38 +0,0 @@ | |||||
using JT808.DotNetty.Abstractions.Enums; | |||||
using JT808.DotNetty.Core.Services; | |||||
using Microsoft.Extensions.Logging; | |||||
using System.Threading; | |||||
using System.Threading.Tasks; | |||||
namespace JT808.DotNetty.Core.Jobs | |||||
{ | |||||
internal class JT808UdpAtomicCouterResetDailyJob : JT808BackgroundService | |||||
{ | |||||
private readonly ILogger<JT808UdpAtomicCouterResetDailyJob> _logger; | |||||
private readonly JT808AtomicCounterService _jT808AtomicCounterService; | |||||
public JT808UdpAtomicCouterResetDailyJob( | |||||
JT808AtomicCounterServiceFactory jT808AtomicCounterServiceFactory, | |||||
ILoggerFactory loggerFactory) | |||||
{ | |||||
_jT808AtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808TransportProtocolType.udp); | |||||
_logger =loggerFactory.CreateLogger<JT808UdpAtomicCouterResetDailyJob>(); | |||||
} | |||||
public override string ServiceName => nameof(JT808UdpAtomicCouterResetDailyJob); | |||||
protected override async Task ExecuteAsync(CancellationToken stoppingToken) | |||||
{ | |||||
_logger.LogInformation($"{ServiceName} is starting."); | |||||
stoppingToken.Register(() => _logger.LogInformation($"{ServiceName} background task is stopping.")); | |||||
while (!stoppingToken.IsCancellationRequested) | |||||
{ | |||||
_logger.LogInformation($"{ServiceName} task doing background work."); | |||||
_jT808AtomicCounterService.Reset(); | |||||
await Task.Delay(DelayTimeSpan, stoppingToken); | |||||
} | |||||
_logger.LogInformation($"{ServiceName} background task is stopping."); | |||||
} | |||||
} | |||||
} |
@@ -1,38 +0,0 @@ | |||||
using JT808.DotNetty.Abstractions.Enums; | |||||
using JT808.DotNetty.Core.Services; | |||||
using Microsoft.Extensions.Logging; | |||||
using System.Threading; | |||||
using System.Threading.Tasks; | |||||
namespace JT808.DotNetty.Core.Jobs | |||||
{ | |||||
internal class JT808UdpTrafficResetDailyJob : JT808BackgroundService | |||||
{ | |||||
private readonly ILogger<JT808UdpTrafficResetDailyJob> _logger; | |||||
private readonly JT808TrafficService _jT808TrafficService; | |||||
public JT808UdpTrafficResetDailyJob( | |||||
JT808TrafficServiceFactory jT808TrafficServiceFactory, | |||||
ILoggerFactory loggerFactory) | |||||
{ | |||||
_jT808TrafficService = jT808TrafficServiceFactory.Create(JT808TransportProtocolType.udp); | |||||
_logger =loggerFactory.CreateLogger<JT808UdpTrafficResetDailyJob>(); | |||||
} | |||||
public override string ServiceName => nameof(JT808UdpTrafficResetDailyJob); | |||||
protected override async Task ExecuteAsync(CancellationToken stoppingToken) | |||||
{ | |||||
_logger.LogInformation($"{ServiceName} is starting."); | |||||
stoppingToken.Register(() => _logger.LogInformation($"{ServiceName} background task is stopping.")); | |||||
while (!stoppingToken.IsCancellationRequested) | |||||
{ | |||||
_logger.LogInformation($"{ServiceName} task doing background work."); | |||||
_jT808TrafficService.ResetSize(); | |||||
await Task.Delay(DelayTimeSpan, stoppingToken); | |||||
} | |||||
_logger.LogInformation($"{ServiceName} background task is stopping."); | |||||
} | |||||
} | |||||
} |
@@ -1,9 +1,11 @@ | |||||
using DotNetty.Transport.Channels; | using DotNetty.Transport.Channels; | ||||
using JT808.DotNetty.Abstractions.Enums; | |||||
using JT808.DotNetty.Core.Interfaces; | |||||
using System; | using System; | ||||
namespace JT808.DotNetty.Core.Metadata | namespace JT808.DotNetty.Core.Metadata | ||||
{ | { | ||||
public class JT808TcpSession | |||||
public class JT808TcpSession: IJT808Session | |||||
{ | { | ||||
public JT808TcpSession(IChannel channel, string terminalPhoneNo) | public JT808TcpSession(IChannel channel, string terminalPhoneNo) | ||||
{ | { | ||||
@@ -25,5 +27,6 @@ namespace JT808.DotNetty.Core.Metadata | |||||
public DateTime LastActiveTime { get; set; } | public DateTime LastActiveTime { get; set; } | ||||
public DateTime StartTime { get; set; } | public DateTime StartTime { get; set; } | ||||
public JT808TransportProtocolType TransportProtocolType { get; set; } = JT808TransportProtocolType.tcp; | |||||
} | } | ||||
} | } |
@@ -1,10 +1,12 @@ | |||||
using DotNetty.Transport.Channels; | using DotNetty.Transport.Channels; | ||||
using JT808.DotNetty.Abstractions.Enums; | |||||
using JT808.DotNetty.Core.Interfaces; | |||||
using System; | using System; | ||||
using System.Net; | using System.Net; | ||||
namespace JT808.DotNetty.Core.Metadata | namespace JT808.DotNetty.Core.Metadata | ||||
{ | { | ||||
public class JT808UdpSession | |||||
public class JT808UdpSession: IJT808Session | |||||
{ | { | ||||
public JT808UdpSession(IChannel channel, | public JT808UdpSession(IChannel channel, | ||||
EndPoint sender, | EndPoint sender, | ||||
@@ -31,5 +33,6 @@ namespace JT808.DotNetty.Core.Metadata | |||||
public DateTime LastActiveTime { get; set; } | public DateTime LastActiveTime { get; set; } | ||||
public DateTime StartTime { get; set; } | public DateTime StartTime { get; set; } | ||||
public JT808TransportProtocolType TransportProtocolType { get; set; } = JT808TransportProtocolType.udp; | |||||
} | } | ||||
} | } |
@@ -1,30 +0,0 @@ | |||||
using JT808.DotNetty.Abstractions.Dtos; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Diagnostics; | |||||
using System.Text; | |||||
namespace JT808.DotNetty.Core.Services | |||||
{ | |||||
/// <summary> | |||||
/// 简单系统收集服务 | |||||
/// </summary> | |||||
public class JT808SimpleSystemCollectService | |||||
{ | |||||
/// <summary> | |||||
/// 获取系统当前进程使用情况 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
public JT808SystemCollectInfoDto Get() | |||||
{ | |||||
JT808SystemCollectInfoDto jT808SystemCollectInfoDto = new JT808SystemCollectInfoDto(); | |||||
var proc = Process.GetCurrentProcess(); | |||||
jT808SystemCollectInfoDto.ProcessId = proc.Id; | |||||
jT808SystemCollectInfoDto.WorkingSet64 = proc.WorkingSet64 / 1024.0 / 1024.0; | |||||
jT808SystemCollectInfoDto.PeakWorkingSet64 = proc.PeakWorkingSet64 / 1024.0 / 1024.0; | |||||
jT808SystemCollectInfoDto.PrivateMemorySize64 = proc.PrivateMemorySize64 / 1024.0 / 1024.0; | |||||
jT808SystemCollectInfoDto.CPUTotalProcessorTime = proc.TotalProcessorTime; | |||||
return jT808SystemCollectInfoDto; | |||||
} | |||||
} | |||||
} |
@@ -1,46 +0,0 @@ | |||||
using JT808.DotNetty.Core.Metadata; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT808.DotNetty.Core.Services | |||||
{ | |||||
public class JT808TrafficService | |||||
{ | |||||
public JT808TrafficService() | |||||
{ | |||||
receiveCounter = new JT808AtomicCounter(); | |||||
sendCounter = new JT808AtomicCounter(); | |||||
} | |||||
private readonly JT808AtomicCounter receiveCounter; | |||||
private readonly JT808AtomicCounter sendCounter; | |||||
public void ReceiveSize(long size) | |||||
{ | |||||
receiveCounter.Add(size); | |||||
} | |||||
public void SendSize(long size) | |||||
{ | |||||
sendCounter.Add(size); | |||||
} | |||||
public long TotalReceiveSize | |||||
{ | |||||
get { return receiveCounter.Count; } | |||||
} | |||||
public long TotalSendSize | |||||
{ | |||||
get { return sendCounter.Count; } | |||||
} | |||||
public void ResetSize() | |||||
{ | |||||
receiveCounter.Reset(); | |||||
sendCounter.Reset(); | |||||
} | |||||
} | |||||
} |
@@ -1,33 +0,0 @@ | |||||
using JT808.DotNetty.Abstractions.Enums; | |||||
using JT808.DotNetty.Core.Metadata; | |||||
using System; | |||||
using System.Collections.Concurrent; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT808.DotNetty.Core.Services | |||||
{ | |||||
public class JT808TrafficServiceFactory | |||||
{ | |||||
private readonly ConcurrentDictionary<JT808TransportProtocolType, JT808TrafficService> cache; | |||||
public JT808TrafficServiceFactory() | |||||
{ | |||||
cache = new ConcurrentDictionary<JT808TransportProtocolType, JT808TrafficService>(); | |||||
} | |||||
public JT808TrafficService Create(JT808TransportProtocolType type) | |||||
{ | |||||
if (cache.TryGetValue(type, out var service)) | |||||
{ | |||||
return service; | |||||
} | |||||
else | |||||
{ | |||||
var serviceNew = new JT808TrafficService(); | |||||
cache.TryAdd(type, serviceNew); | |||||
return serviceNew; | |||||
} | |||||
} | |||||
} | |||||
} |
@@ -1,102 +0,0 @@ | |||||
using JT808.DotNetty.Abstractions.Dtos; | |||||
using Microsoft.Extensions.Options; | |||||
using System; | |||||
using System.Collections.Concurrent; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Net; | |||||
using JT808.DotNetty.Core.Configurations; | |||||
namespace JT808.DotNetty.Core.Services | |||||
{ | |||||
/// <summary> | |||||
/// JT808转发地址过滤服务 | |||||
/// 按照808的消息,有些请求必须要应答,但是转发可以不需要有应答可以节省部分资源包括: | |||||
// 1.消息的序列化 | |||||
// 2.消息的下发 | |||||
// 都有一定的性能损耗,那么不需要判断写超时 IdleState.WriterIdle | |||||
// 就跟神兽貔貅一样。。。 | |||||
/// </summary> | |||||
public class JT808TransmitAddressFilterService : IDisposable | |||||
{ | |||||
private readonly IOptionsMonitor<JT808Configuration> jT808ConfigurationOptionsMonitor; | |||||
private ConcurrentDictionary<string,byte> ForwardingRemoteAddresssDict; | |||||
private IDisposable jT808ConfigurationOptionsMonitorDisposable; | |||||
public JT808TransmitAddressFilterService( | |||||
IOptionsMonitor<JT808Configuration> jT808ConfigurationOptionsMonitor) | |||||
{ | |||||
this.jT808ConfigurationOptionsMonitor = jT808ConfigurationOptionsMonitor; | |||||
ForwardingRemoteAddresssDict = new ConcurrentDictionary<string, byte>(); | |||||
InitForwardingRemoteAddress(jT808ConfigurationOptionsMonitor.CurrentValue.ForwardingRemoteIPAddress); | |||||
//OnChange 源码多播委托 | |||||
jT808ConfigurationOptionsMonitorDisposable = this.jT808ConfigurationOptionsMonitor.OnChange(options => | |||||
{ | |||||
ChangeForwardingRemoteAddress(options.ForwardingRemoteIPAddress); | |||||
}); | |||||
} | |||||
private void InitForwardingRemoteAddress(List<string> jT808ClientConfigurations) | |||||
{ | |||||
if (jT808ClientConfigurations != null && jT808ClientConfigurations.Count > 0) | |||||
{ | |||||
foreach (var item in jT808ClientConfigurations) | |||||
{ | |||||
ForwardingRemoteAddresssDict.TryAdd(item, 0); | |||||
} | |||||
} | |||||
} | |||||
private void ChangeForwardingRemoteAddress(List<string> jT808ClientConfigurations) | |||||
{ | |||||
if (jT808ClientConfigurations != null && jT808ClientConfigurations.Count > 0) | |||||
{ | |||||
ForwardingRemoteAddresssDict.Clear(); | |||||
foreach (var item in jT808ClientConfigurations) | |||||
{ | |||||
ForwardingRemoteAddresssDict.TryAdd(item, 0); | |||||
} | |||||
} | |||||
else | |||||
{ | |||||
ForwardingRemoteAddresssDict.Clear(); | |||||
} | |||||
} | |||||
public bool ContainsKey(EndPoint endPoint) | |||||
{ | |||||
IPAddress ip = ((IPEndPoint)endPoint).Address; | |||||
return ForwardingRemoteAddresssDict.ContainsKey(ip.ToString()); | |||||
} | |||||
public JT808ResultDto<bool> Add(string host) | |||||
{ | |||||
return new JT808ResultDto<bool>() { Code = JT808ResultCode.Ok, Data = ForwardingRemoteAddresssDict.TryAdd(host,0) }; | |||||
} | |||||
public JT808ResultDto<bool> Remove(string host) | |||||
{ | |||||
if(jT808ConfigurationOptionsMonitor.CurrentValue.ForwardingRemoteIPAddress!=null && | |||||
jT808ConfigurationOptionsMonitor.CurrentValue.ForwardingRemoteIPAddress.Any(w=>w== host)) | |||||
{ | |||||
return new JT808ResultDto<bool>() { Code = JT808ResultCode.Ok, Data = false,Message="不能删除服务器配置的地址" }; | |||||
} | |||||
else | |||||
{ | |||||
return new JT808ResultDto<bool>() { Code = JT808ResultCode.Ok, Data = ForwardingRemoteAddresssDict.TryRemove(host,out var temp) }; | |||||
} | |||||
} | |||||
public JT808ResultDto<List<string>> GetAll() | |||||
{ | |||||
return new JT808ResultDto<List<string>>(){ Code = JT808ResultCode.Ok, Data = ForwardingRemoteAddresssDict.Select(s=>s.Key).ToList() }; | |||||
} | |||||
public void Dispose() | |||||
{ | |||||
jT808ConfigurationOptionsMonitorDisposable.Dispose(); | |||||
} | |||||
} | |||||
} |
@@ -1,18 +0,0 @@ | |||||
using JT808.DotNetty.Core; | |||||
using JT808.DotNetty.Core.Handlers; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT808.DotNetty.Tcp.Handlers | |||||
{ | |||||
/// <summary> | |||||
/// 默认消息处理业务实现 | |||||
/// </summary> | |||||
internal class JT808MsgIdDefaultTcpHandler : JT808MsgIdTcpHandlerBase | |||||
{ | |||||
public JT808MsgIdDefaultTcpHandler(JT808TcpSessionManager sessionManager) : base(sessionManager) | |||||
{ | |||||
} | |||||
} | |||||
} |
@@ -3,14 +3,11 @@ using DotNetty.Transport.Channels; | |||||
using JT808.Protocol; | using JT808.Protocol; | ||||
using System; | using System; | ||||
using JT808.DotNetty.Core; | using JT808.DotNetty.Core; | ||||
using JT808.DotNetty.Abstractions; | |||||
using Microsoft.Extensions.Logging; | using Microsoft.Extensions.Logging; | ||||
using JT808.DotNetty.Core.Handlers; | |||||
using JT808.DotNetty.Core.Services; | using JT808.DotNetty.Core.Services; | ||||
using JT808.DotNetty.Core.Metadata; | |||||
using JT808.DotNetty.Core.Interfaces; | |||||
using JT808.DotNetty.Abstractions.Enums; | using JT808.DotNetty.Abstractions.Enums; | ||||
using JT808.Protocol.Interfaces; | using JT808.Protocol.Interfaces; | ||||
using JT808.Protocol.Exceptions; | |||||
namespace JT808.DotNetty.Tcp.Handlers | namespace JT808.DotNetty.Tcp.Handlers | ||||
{ | { | ||||
@@ -18,111 +15,48 @@ namespace JT808.DotNetty.Tcp.Handlers | |||||
/// JT808服务端处理程序 | /// JT808服务端处理程序 | ||||
/// </summary> | /// </summary> | ||||
internal class JT808TcpServerHandler : SimpleChannelInboundHandler<byte[]> | internal class JT808TcpServerHandler : SimpleChannelInboundHandler<byte[]> | ||||
{ | |||||
private readonly JT808MsgIdTcpHandlerBase handler; | |||||
{ | |||||
private readonly JT808TcpSessionManager jT808SessionManager; | private readonly JT808TcpSessionManager jT808SessionManager; | ||||
private readonly JT808TransmitAddressFilterService jT808TransmitAddressFilterService; | |||||
private readonly IJT808SourcePackageDispatcher jT808SourcePackageDispatcher; | |||||
private readonly JT808AtomicCounterService jT808AtomicCounterService; | private readonly JT808AtomicCounterService jT808AtomicCounterService; | ||||
private readonly JT808TrafficService jT808TrafficService; | |||||
private readonly IJT808UplinkPacket jT808UplinkPacket; | |||||
private readonly IJT808TcpCustomMsgIdHandler jT808TcpCustomMsgIdHandler; | |||||
private readonly ILogger<JT808TcpServerHandler> logger; | private readonly ILogger<JT808TcpServerHandler> logger; | ||||
private readonly ILogger unknownLogger; | |||||
private readonly JT808Serializer JT808Serializer; | private readonly JT808Serializer JT808Serializer; | ||||
public JT808TcpServerHandler( | public JT808TcpServerHandler( | ||||
IJT808Config jT808Config, | IJT808Config jT808Config, | ||||
JT808TrafficServiceFactory jT808TrafficServiceFactory, | |||||
ILoggerFactory loggerFactory, | ILoggerFactory loggerFactory, | ||||
JT808TransmitAddressFilterService jT808TransmitAddressFilterService, | |||||
IJT808SourcePackageDispatcher jT808SourcePackageDispatcher, | |||||
IJT808UplinkPacket jT808UplinkPacket, | |||||
JT808MsgIdTcpHandlerBase handler, | |||||
JT808AtomicCounterServiceFactory jT808AtomicCounterServiceFactory, | JT808AtomicCounterServiceFactory jT808AtomicCounterServiceFactory, | ||||
IJT808TcpCustomMsgIdHandler jT808TcpCustomMsgIdHandler, | |||||
JT808TcpSessionManager jT808SessionManager) | JT808TcpSessionManager jT808SessionManager) | ||||
{ | { | ||||
this.jT808TcpCustomMsgIdHandler = jT808TcpCustomMsgIdHandler; | |||||
this.jT808TrafficService = jT808TrafficServiceFactory.Create(JT808TransportProtocolType.tcp); | |||||
this.jT808TransmitAddressFilterService = jT808TransmitAddressFilterService; | |||||
this.handler = handler; | |||||
this.jT808SessionManager = jT808SessionManager; | this.jT808SessionManager = jT808SessionManager; | ||||
this.jT808SourcePackageDispatcher = jT808SourcePackageDispatcher; | |||||
this.jT808UplinkPacket = jT808UplinkPacket; | |||||
this.jT808AtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808TransportProtocolType.tcp); | this.jT808AtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808TransportProtocolType.tcp); | ||||
this.JT808Serializer = jT808Config.GetSerializer(); | this.JT808Serializer = jT808Config.GetSerializer(); | ||||
logger = loggerFactory.CreateLogger<JT808TcpServerHandler>(); | logger = loggerFactory.CreateLogger<JT808TcpServerHandler>(); | ||||
unknownLogger = loggerFactory.CreateLogger("tcp_unknown_msgid"); | |||||
} | } | ||||
protected override void ChannelRead0(IChannelHandlerContext ctx, byte[] msg) | protected override void ChannelRead0(IChannelHandlerContext ctx, byte[] msg) | ||||
{ | { | ||||
try | try | ||||
{ | { | ||||
jT808SourcePackageDispatcher.SendAsync(msg); | |||||
jT808UplinkPacket.ProcessorAsync(msg, JT808TransportProtocolType.tcp); | |||||
//解析到头部,然后根据具体的消息Id通过队列去进行消费 | //解析到头部,然后根据具体的消息Id通过队列去进行消费 | ||||
//要是一定要解析到数据体可以在JT808MsgIdHandlerBase类中根据具体的消息, | //要是一定要解析到数据体可以在JT808MsgIdHandlerBase类中根据具体的消息, | ||||
//解析具体的消息体,具体调用JT808Serializer.Deserialize<T> | //解析具体的消息体,具体调用JT808Serializer.Deserialize<T> | ||||
JT808HeaderPackage jT808HeaderPackage = JT808Serializer.Deserialize<JT808HeaderPackage>(msg); | JT808HeaderPackage jT808HeaderPackage = JT808Serializer.Deserialize<JT808HeaderPackage>(msg); | ||||
jT808AtomicCounterService.MsgSuccessIncrement(); | jT808AtomicCounterService.MsgSuccessIncrement(); | ||||
jT808TrafficService.ReceiveSize(msg.Length); | |||||
if (logger.IsEnabled(LogLevel.Trace)) | if (logger.IsEnabled(LogLevel.Trace)) | ||||
{ | { | ||||
logger.LogTrace("accept package success count<<<" + jT808AtomicCounterService.MsgSuccessCount.ToString()); | |||||
logger.LogTrace("accept msg <<< " + ByteBufferUtil.HexDump(msg)); | |||||
logger.LogTrace($"accept package success count=>{jT808AtomicCounterService.MsgSuccessCount.ToString()},accept msg=>{ByteBufferUtil.HexDump(msg)}"); | |||||
} | } | ||||
jT808SessionManager.TryAdd(jT808HeaderPackage.Header.TerminalPhoneNo,ctx.Channel); | jT808SessionManager.TryAdd(jT808HeaderPackage.Header.TerminalPhoneNo,ctx.Channel); | ||||
if (handler.HandlerDict.TryGetValue(jT808HeaderPackage.Header.MsgId, out var handlerFunc)) | |||||
{ | |||||
IJT808Reply jT808Response = handlerFunc(new JT808Request(jT808HeaderPackage, msg)); | |||||
if (jT808Response != null) | |||||
{ | |||||
if (!jT808TransmitAddressFilterService.ContainsKey(ctx.Channel.RemoteAddress)) | |||||
{ | |||||
ctx.WriteAndFlushAsync(jT808Response); | |||||
} | |||||
} | |||||
} | |||||
else | |||||
{ | |||||
IJT808Reply jT808CustomMsgIdResponse = jT808TcpCustomMsgIdHandler.Proccesser(new JT808Request(jT808HeaderPackage, msg)); | |||||
if (jT808CustomMsgIdResponse != null) | |||||
{ | |||||
if (!jT808TransmitAddressFilterService.ContainsKey(ctx.Channel.RemoteAddress)) | |||||
{ | |||||
ctx.WriteAndFlushAsync(jT808CustomMsgIdResponse); | |||||
} | |||||
} | |||||
else | |||||
{ | |||||
//未知的消息类型已日志形式输出 | |||||
if (unknownLogger.IsEnabled(LogLevel.Debug)) | |||||
{ | |||||
unknownLogger.LogDebug(ByteBufferUtil.HexDump(msg)); | |||||
} | |||||
} | |||||
} | |||||
} | } | ||||
catch (JT808.Protocol.Exceptions.JT808Exception ex) | |||||
catch (JT808Exception ex) | |||||
{ | { | ||||
jT808AtomicCounterService.MsgFailIncrement(); | jT808AtomicCounterService.MsgFailIncrement(); | ||||
if (logger.IsEnabled(LogLevel.Error)) | if (logger.IsEnabled(LogLevel.Error)) | ||||
{ | { | ||||
logger.LogError("accept package fail count<<<" + jT808AtomicCounterService.MsgFailCount.ToString()); | |||||
logger.LogError(ex, "accept msg<<<" + ByteBufferUtil.HexDump(msg)); | |||||
logger.LogError(ex,$"accept package fail count=>{jT808AtomicCounterService.MsgFailCount.ToString()},accept msg=>{ByteBufferUtil.HexDump(msg)}"); | |||||
} | } | ||||
} | } | ||||
catch (Exception ex) | catch (Exception ex) | ||||
@@ -130,8 +64,7 @@ namespace JT808.DotNetty.Tcp.Handlers | |||||
jT808AtomicCounterService.MsgFailIncrement(); | jT808AtomicCounterService.MsgFailIncrement(); | ||||
if (logger.IsEnabled(LogLevel.Error)) | if (logger.IsEnabled(LogLevel.Error)) | ||||
{ | { | ||||
logger.LogError("accept package fail count<<<" + jT808AtomicCounterService.MsgFailCount.ToString()); | |||||
logger.LogError(ex, "accept msg<<<" + ByteBufferUtil.HexDump(msg)); | |||||
logger.LogError(ex, $"accept package fail count=>{jT808AtomicCounterService.MsgFailCount.ToString()},accept msg=>{ByteBufferUtil.HexDump(msg)}"); | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -22,17 +22,6 @@ namespace JT808.DotNetty.Tcp | |||||
return Instance; | return Instance; | ||||
} | } | ||||
public IJT808TcpNettyBuilder ReplaceCustomMsgIdHandler<T>() where T : IJT808TcpCustomMsgIdHandler | |||||
{ | |||||
Instance.JT808Builder.Services.Replace(new ServiceDescriptor(typeof(IJT808TcpCustomMsgIdHandler), typeof(T), ServiceLifetime.Singleton)); | |||||
return this; | |||||
} | |||||
public IJT808TcpNettyBuilder ReplaceMsgIdHandler<T>() where T : JT808MsgIdTcpHandlerBase | |||||
{ | |||||
Instance.JT808Builder.Services.Replace(new ServiceDescriptor(typeof(JT808MsgIdTcpHandlerBase), typeof(T), ServiceLifetime.Singleton)); | |||||
return this; | |||||
} | |||||
public IJT808TcpNettyBuilder ReplaceSessionService<T>() where T : IJT808TcpSessionService | public IJT808TcpNettyBuilder ReplaceSessionService<T>() where T : IJT808TcpSessionService | ||||
{ | { | ||||
@@ -10,7 +10,6 @@ using Newtonsoft.Json; | |||||
using System; | using System; | ||||
using System.Reflection; | using System.Reflection; | ||||
using System.Runtime.CompilerServices; | using System.Runtime.CompilerServices; | ||||
using JT808.DotNetty.Core.Jobs; | |||||
using JT808.DotNetty.Core.Interfaces; | using JT808.DotNetty.Core.Interfaces; | ||||
using JT808.DotNetty.Internal; | using JT808.DotNetty.Internal; | ||||
@@ -22,18 +21,13 @@ namespace JT808.DotNetty.Tcp | |||||
{ | { | ||||
public static IJT808TcpNettyBuilder AddJT808TcpNettyHost(this IJT808NettyBuilder jT808NettyBuilder) | public static IJT808TcpNettyBuilder AddJT808TcpNettyHost(this IJT808NettyBuilder jT808NettyBuilder) | ||||
{ | { | ||||
jT808NettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808TcpCustomMsgIdHandler, JT808TcpCustomMsgIdHandlerEmpty>(); | |||||
jT808NettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808TcpSessionService, JT808TcpSessionService>(); | jT808NettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808TcpSessionService, JT808TcpSessionService>(); | ||||
jT808NettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808UnificationTcpSendService, JT808UnificationTcpSendService>(); | jT808NettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808UnificationTcpSendService, JT808UnificationTcpSendService>(); | ||||
jT808NettyBuilder.JT808Builder.Services.TryAddSingleton<JT808TcpSessionManager>(); | jT808NettyBuilder.JT808Builder.Services.TryAddSingleton<JT808TcpSessionManager>(); | ||||
jT808NettyBuilder.JT808Builder.Services.TryAddSingleton<JT808TransmitAddressFilterService>(); | |||||
jT808NettyBuilder.JT808Builder.Services.TryAddSingleton<JT808MsgIdTcpHandlerBase, JT808MsgIdDefaultTcpHandler>(); | |||||
jT808NettyBuilder.JT808Builder.Services.TryAddScoped<JT808TcpConnectionHandler>(); | jT808NettyBuilder.JT808Builder.Services.TryAddScoped<JT808TcpConnectionHandler>(); | ||||
jT808NettyBuilder.JT808Builder.Services.TryAddScoped<JT808TcpEncoder>(); | jT808NettyBuilder.JT808Builder.Services.TryAddScoped<JT808TcpEncoder>(); | ||||
jT808NettyBuilder.JT808Builder.Services.TryAddScoped<JT808TcpDecoder>(); | jT808NettyBuilder.JT808Builder.Services.TryAddScoped<JT808TcpDecoder>(); | ||||
jT808NettyBuilder.JT808Builder.Services.TryAddScoped<JT808TcpServerHandler>(); | jT808NettyBuilder.JT808Builder.Services.TryAddScoped<JT808TcpServerHandler>(); | ||||
jT808NettyBuilder.JT808Builder.Services.AddHostedService<JT808TcpAtomicCouterResetDailyJob>(); | |||||
jT808NettyBuilder.JT808Builder.Services.AddHostedService<JT808TcpTrafficResetDailyJob>(); | |||||
jT808NettyBuilder.JT808Builder.Services.AddHostedService<JT808TcpServerHost>(); | jT808NettyBuilder.JT808Builder.Services.AddHostedService<JT808TcpServerHost>(); | ||||
return new JT808TcpBuilderDefault(jT808NettyBuilder); | return new JT808TcpBuilderDefault(jT808NettyBuilder); | ||||
} | } | ||||
@@ -1,75 +0,0 @@ | |||||
using JT808.DotNetty.Abstractions.Dtos; | |||||
using JT808.DotNetty.Core.Configurations; | |||||
using JT808.DotNetty.Core.Services; | |||||
using Microsoft.Extensions.Configuration; | |||||
using Microsoft.Extensions.DependencyInjection; | |||||
using Microsoft.Extensions.Hosting; | |||||
using Microsoft.Extensions.Logging; | |||||
using Microsoft.VisualStudio.TestTools.UnitTesting; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
namespace JT808.DotNetty.Core.Test | |||||
{ | |||||
[TestClass] | |||||
public class JT808TransmitAddressFilterServiceTest | |||||
{ | |||||
private JT808TransmitAddressFilterService jT808TransmitAddressFilterService; | |||||
public JT808TransmitAddressFilterServiceTest() | |||||
{ | |||||
var serverHostBuilder = new HostBuilder() | |||||
.ConfigureAppConfiguration((hostingContext, config) => | |||||
{ | |||||
config.SetBasePath(AppDomain.CurrentDomain.BaseDirectory); | |||||
config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); | |||||
}) | |||||
.ConfigureServices((hostContext, services) => | |||||
{ | |||||
services.AddSingleton<ILoggerFactory, LoggerFactory>(); | |||||
services.AddSingleton(typeof(ILogger<>), typeof(Logger<>)); | |||||
services.Configure<JT808Configuration>(hostContext.Configuration.GetSection("JT808Configuration")); | |||||
services.AddSingleton<JT808TransmitAddressFilterService>(); | |||||
}); | |||||
var serviceProvider = serverHostBuilder.Build().Services; | |||||
jT808TransmitAddressFilterService = serviceProvider.GetService<JT808TransmitAddressFilterService>(); | |||||
jT808TransmitAddressFilterService.Add("127.0.0.1"); | |||||
} | |||||
[TestMethod] | |||||
public void Test1() | |||||
{ | |||||
Assert.IsTrue(jT808TransmitAddressFilterService.ContainsKey(new JT808IPAddressDto | |||||
{ | |||||
Host = "127.0.0.1", | |||||
Port = 12348 | |||||
}.EndPoint)); | |||||
} | |||||
[TestMethod] | |||||
public void Test2() | |||||
{ | |||||
var result = jT808TransmitAddressFilterService.GetAll(); | |||||
} | |||||
[TestMethod] | |||||
public void Test3() | |||||
{ | |||||
var result1= jT808TransmitAddressFilterService.Add("127.0.0.1"); | |||||
Assert.AreEqual(JT808ResultCode.Ok, result1.Code); | |||||
Assert.IsTrue(result1.Data); | |||||
var result2 = jT808TransmitAddressFilterService.Remove("127.0.0.1"); | |||||
Assert.AreEqual(JT808ResultCode.Ok, result2.Code); | |||||
Assert.IsTrue(result2.Data); | |||||
} | |||||
[TestMethod] | |||||
public void Test4() | |||||
{ | |||||
var result2 = jT808TransmitAddressFilterService.Remove("127.0.0.1"); | |||||
Assert.AreEqual(JT808ResultCode.Ok, result2.Code); | |||||
Assert.IsFalse(result2.Data); | |||||
Assert.AreEqual("不能删除服务器配置的地址", result2.Message); | |||||
} | |||||
} | |||||
} |
@@ -54,19 +54,9 @@ namespace JT808.DotNetty.Hosting | |||||
services.AddSingleton(typeof(ILogger<>), typeof(Logger<>)); | services.AddSingleton(typeof(ILogger<>), typeof(Logger<>)); | ||||
services.AddJT808Configure() | services.AddJT808Configure() | ||||
.AddJT808NettyCore(hostContext.Configuration) | .AddJT808NettyCore(hostContext.Configuration) | ||||
//自定义日志下发包 | |||||
.ReplaceDownlinkPacket<JT808DownlinkPacketLogging>() | |||||
//自定义会话通知(在线/离线)使用异步方式 | |||||
//.ReplaceSessionPublishing<CustomJT808SessionPublishing>() | |||||
//自定义原包转发 使用异步方式 | |||||
//.ReplaceSourcePackageDispatcher<CustomJT808SourcePackageDispatcher> | |||||
.AddJT808TcpNettyHost() | .AddJT808TcpNettyHost() | ||||
// 自定义Tcp消息处理业务 | |||||
.ReplaceMsgIdHandler<JT808MsgIdTcpCustomHandler>() | |||||
.Builder() | .Builder() | ||||
.AddJT808UdpNettyHost() | .AddJT808UdpNettyHost() | ||||
// 自定义Udp消息处理业务 | |||||
.ReplaceMsgIdHandler<JT808MsgIdUdpCustomHandler>() | |||||
.Builder() | .Builder() | ||||
.AddJT808WebApiNettyHost() | .AddJT808WebApiNettyHost() | ||||
.Builder(); | .Builder(); | ||||
@@ -22,24 +22,12 @@ namespace JT808.DotNetty.WebApi.Test | |||||
var api = HttpApi.Resolve<IJT808DotNettyWebApi>(); | var api = HttpApi.Resolve<IJT808DotNettyWebApi>(); | ||||
} | } | ||||
[TestMethod] | |||||
public void GetSystemCollectTest() | |||||
{ | |||||
var result = jT808DotNettyWebApi.GetSystemCollect().GetAwaiter().GetResult(); | |||||
} | |||||
[TestMethod] | [TestMethod] | ||||
public void GetUdpAtomicCounterTest() | public void GetUdpAtomicCounterTest() | ||||
{ | { | ||||
var result = jT808DotNettyWebApi.GetUdpAtomicCounter().GetAwaiter().GetResult(); | var result = jT808DotNettyWebApi.GetUdpAtomicCounter().GetAwaiter().GetResult(); | ||||
} | } | ||||
[TestMethod] | |||||
public void GetUdpTrafficTest() | |||||
{ | |||||
var result = jT808DotNettyWebApi.GetUdpTraffic().GetAwaiter().GetResult(); | |||||
} | |||||
[TestMethod] | [TestMethod] | ||||
public void UnificationUdpSendTest() | public void UnificationUdpSendTest() | ||||
{ | { | ||||
@@ -61,44 +49,12 @@ namespace JT808.DotNetty.WebApi.Test | |||||
var result = jT808DotNettyWebApi.GetUdpSessionAll().GetAwaiter().GetResult(); | var result = jT808DotNettyWebApi.GetUdpSessionAll().GetAwaiter().GetResult(); | ||||
} | } | ||||
[TestMethod] | |||||
public void GetTcpTrafficTest() | |||||
{ | |||||
var result = jT808DotNettyWebApi.GetTcpTraffic().GetAwaiter().GetResult(); | |||||
} | |||||
[TestMethod] | [TestMethod] | ||||
public void GetTcpAtomicCounterTest() | public void GetTcpAtomicCounterTest() | ||||
{ | { | ||||
var result = jT808DotNettyWebApi.GetTcpAtomicCounter().GetAwaiter().GetResult(); | var result = jT808DotNettyWebApi.GetTcpAtomicCounter().GetAwaiter().GetResult(); | ||||
} | } | ||||
[TestMethod] | |||||
public void GetTransmitAllTest() | |||||
{ | |||||
var result = jT808DotNettyWebApi.GetTransmitAll().GetAwaiter().GetResult(); | |||||
} | |||||
[TestMethod] | |||||
public void RemoveTransmitAddressTest() | |||||
{ | |||||
var result = jT808DotNettyWebApi.RemoveTransmitAddress(new Abstractions.Dtos.JT808IPAddressDto | |||||
{ | |||||
Host = "127.0.0.1", | |||||
Port = 6561 | |||||
}).GetAwaiter().GetResult(); | |||||
} | |||||
[TestMethod] | |||||
public void AddTransmitAddressTest() | |||||
{ | |||||
var result = jT808DotNettyWebApi.AddTransmitAddress(new Abstractions.Dtos.JT808IPAddressDto | |||||
{ | |||||
Host = "127.0.0.1", | |||||
Port = 6553 | |||||
}).GetAwaiter().GetResult(); | |||||
} | |||||
[TestMethod] | [TestMethod] | ||||
public void UnificationTcpSendTest() | public void UnificationTcpSendTest() | ||||
{ | { | ||||
@@ -1,15 +0,0 @@ | |||||
using JT808.DotNetty.Core; | |||||
using JT808.DotNetty.Core.Handlers; | |||||
namespace JT808.DotNetty.Udp.Handlers | |||||
{ | |||||
/// <summary> | |||||
/// 默认消息处理业务实现 | |||||
/// </summary> | |||||
internal class JT808MsgIdDefaultUdpHandler : JT808MsgIdUdpHandlerBase | |||||
{ | |||||
public JT808MsgIdDefaultUdpHandler(JT808UdpSessionManager sessionManager) : base(sessionManager) | |||||
{ | |||||
} | |||||
} | |||||
} |
@@ -3,14 +3,9 @@ using DotNetty.Transport.Channels; | |||||
using JT808.Protocol; | using JT808.Protocol; | ||||
using System; | using System; | ||||
using Microsoft.Extensions.Logging; | using Microsoft.Extensions.Logging; | ||||
using DotNetty.Transport.Channels.Sockets; | |||||
using JT808.DotNetty.Core.Metadata; | using JT808.DotNetty.Core.Metadata; | ||||
using JT808.DotNetty.Abstractions; | |||||
using JT808.DotNetty.Core.Services; | using JT808.DotNetty.Core.Services; | ||||
using JT808.DotNetty.Core; | using JT808.DotNetty.Core; | ||||
using JT808.DotNetty.Core.Handlers; | |||||
using System.Threading.Tasks; | |||||
using JT808.DotNetty.Core.Interfaces; | |||||
using JT808.DotNetty.Abstractions.Enums; | using JT808.DotNetty.Abstractions.Enums; | ||||
using JT808.Protocol.Interfaces; | using JT808.Protocol.Interfaces; | ||||
@@ -21,96 +16,39 @@ namespace JT808.DotNetty.Udp.Handlers | |||||
/// </summary> | /// </summary> | ||||
internal class JT808UdpServerHandler : SimpleChannelInboundHandler<JT808UdpPackage> | internal class JT808UdpServerHandler : SimpleChannelInboundHandler<JT808UdpPackage> | ||||
{ | { | ||||
private readonly IJT808SourcePackageDispatcher jT808SourcePackageDispatcher; | |||||
private readonly JT808AtomicCounterService jT808AtomicCounterService; | private readonly JT808AtomicCounterService jT808AtomicCounterService; | ||||
private readonly ILogger<JT808UdpServerHandler> logger; | private readonly ILogger<JT808UdpServerHandler> logger; | ||||
private readonly JT808UdpSessionManager jT808UdpSessionManager; | private readonly JT808UdpSessionManager jT808UdpSessionManager; | ||||
private readonly JT808MsgIdUdpHandlerBase handler; | |||||
private readonly JT808TrafficService jT808TrafficService; | |||||
private readonly IJT808UplinkPacket jT808UplinkPacket; | |||||
private readonly IJT808UdpCustomMsgIdHandler jT808UdpCustomMsgIdHandler; | |||||
private readonly IJT808DatagramPacket jT808DatagramPacket; | |||||
private readonly ILogger unknownLogger; | |||||
private readonly JT808Serializer JT808Serializer; | private readonly JT808Serializer JT808Serializer; | ||||
public JT808UdpServerHandler( | public JT808UdpServerHandler( | ||||
IJT808Config jT808Config, | IJT808Config jT808Config, | ||||
IJT808DatagramPacket jT808DatagramPacket, | |||||
JT808TrafficServiceFactory jT808TrafficServiceFactory, | |||||
ILoggerFactory loggerFactory, | ILoggerFactory loggerFactory, | ||||
IJT808SourcePackageDispatcher jT808SourcePackageDispatcher, | |||||
IJT808UplinkPacket jT808UplinkPacket, | |||||
JT808MsgIdUdpHandlerBase handler, | |||||
JT808AtomicCounterServiceFactory jT808AtomicCounterServiceFactory, | JT808AtomicCounterServiceFactory jT808AtomicCounterServiceFactory, | ||||
IJT808UdpCustomMsgIdHandler jT808UdpCustomMsgIdHandler, | |||||
JT808UdpSessionManager jT808UdpSessionManager) | JT808UdpSessionManager jT808UdpSessionManager) | ||||
{ | { | ||||
this.jT808UdpCustomMsgIdHandler = jT808UdpCustomMsgIdHandler; | |||||
this.jT808DatagramPacket = jT808DatagramPacket; | |||||
this.jT808TrafficService = jT808TrafficServiceFactory.Create(JT808TransportProtocolType.udp); | |||||
this.handler = handler; | |||||
this.jT808SourcePackageDispatcher = jT808SourcePackageDispatcher; | |||||
this.jT808AtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808TransportProtocolType.udp); | this.jT808AtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808TransportProtocolType.udp); | ||||
this.jT808UplinkPacket = jT808UplinkPacket; | |||||
this.jT808UdpSessionManager = jT808UdpSessionManager; | this.jT808UdpSessionManager = jT808UdpSessionManager; | ||||
logger = loggerFactory.CreateLogger<JT808UdpServerHandler>(); | logger = loggerFactory.CreateLogger<JT808UdpServerHandler>(); | ||||
JT808Serializer = jT808Config.GetSerializer(); | JT808Serializer = jT808Config.GetSerializer(); | ||||
unknownLogger = loggerFactory.CreateLogger("udp_unknown_msgid"); | |||||
} | } | ||||
protected override void ChannelRead0(IChannelHandlerContext ctx, JT808UdpPackage msg) | protected override void ChannelRead0(IChannelHandlerContext ctx, JT808UdpPackage msg) | ||||
{ | { | ||||
try | try | ||||
{ | { | ||||
jT808SourcePackageDispatcher.SendAsync(msg.Buffer); | |||||
jT808UplinkPacket.ProcessorAsync(msg.Buffer, JT808TransportProtocolType.udp); | |||||
//解析到头部,然后根据具体的消息Id通过队列去进行消费 | //解析到头部,然后根据具体的消息Id通过队列去进行消费 | ||||
//要是一定要解析到数据体可以在JT808MsgIdHandlerBase类中根据具体的消息, | //要是一定要解析到数据体可以在JT808MsgIdHandlerBase类中根据具体的消息, | ||||
//解析具体的消息体,具体调用JT808Serializer.Deserialize<T> | //解析具体的消息体,具体调用JT808Serializer.Deserialize<T> | ||||
JT808HeaderPackage jT808HeaderPackage = JT808Serializer.Deserialize<JT808HeaderPackage>(msg.Buffer); | JT808HeaderPackage jT808HeaderPackage = JT808Serializer.Deserialize<JT808HeaderPackage>(msg.Buffer); | ||||
jT808AtomicCounterService.MsgSuccessIncrement(); | jT808AtomicCounterService.MsgSuccessIncrement(); | ||||
jT808TrafficService.ReceiveSize(msg.Buffer.Length); | |||||
jT808UdpSessionManager.TryAdd(ctx.Channel, msg.Sender, jT808HeaderPackage.Header.TerminalPhoneNo); | jT808UdpSessionManager.TryAdd(ctx.Channel, msg.Sender, jT808HeaderPackage.Header.TerminalPhoneNo); | ||||
if (logger.IsEnabled(LogLevel.Trace)) | if (logger.IsEnabled(LogLevel.Trace)) | ||||
{ | { | ||||
logger.LogTrace("accept package success count<<<" + jT808AtomicCounterService.MsgSuccessCount.ToString()); | |||||
logger.LogTrace("accept msg <<< " + ByteBufferUtil.HexDump(msg.Buffer)); | |||||
} | |||||
if (handler.HandlerDict.TryGetValue(jT808HeaderPackage.Header.MsgId, out var handlerFunc)) | |||||
{ | |||||
IJT808Reply jT808Response = handlerFunc(new JT808Request(jT808HeaderPackage, msg.Buffer)); | |||||
if (jT808Response != null) | |||||
{ | |||||
var sendData = JT808Serializer.Serialize(jT808Response.Package, jT808Response.MinBufferSize); | |||||
ctx.WriteAndFlushAsync(jT808DatagramPacket.Create(sendData,msg.Sender)); | |||||
} | |||||
} | |||||
else | |||||
{ | |||||
IJT808Reply jT808CustomMsgIdResponse = jT808UdpCustomMsgIdHandler.Proccesser(new JT808Request(jT808HeaderPackage, msg.Buffer)); | |||||
if (jT808CustomMsgIdResponse != null) | |||||
{ | |||||
var sendData = JT808Serializer.Serialize(jT808CustomMsgIdResponse.Package, jT808CustomMsgIdResponse.MinBufferSize); | |||||
ctx.WriteAndFlushAsync(jT808DatagramPacket.Create(sendData, msg.Sender)); | |||||
} | |||||
else | |||||
{ | |||||
//未知的消息类型已日志形式输出 | |||||
if (unknownLogger.IsEnabled(LogLevel.Debug)) | |||||
{ | |||||
unknownLogger.LogDebug(ByteBufferUtil.HexDump(msg.Buffer)); | |||||
} | |||||
} | |||||
logger.LogTrace($"accept package success count=>{jT808AtomicCounterService.MsgFailCount.ToString()},accept msg=>{ByteBufferUtil.HexDump(msg.Buffer)}"); | |||||
} | } | ||||
} | } | ||||
catch (JT808.Protocol.Exceptions.JT808Exception ex) | catch (JT808.Protocol.Exceptions.JT808Exception ex) | ||||
@@ -118,8 +56,7 @@ namespace JT808.DotNetty.Udp.Handlers | |||||
jT808AtomicCounterService.MsgFailIncrement(); | jT808AtomicCounterService.MsgFailIncrement(); | ||||
if (logger.IsEnabled(LogLevel.Error)) | if (logger.IsEnabled(LogLevel.Error)) | ||||
{ | { | ||||
logger.LogError("accept package fail count<<<" + jT808AtomicCounterService.MsgFailCount.ToString()); | |||||
logger.LogError(ex, "accept msg<<<" + ByteBufferUtil.HexDump(msg.Buffer)); | |||||
logger.LogError(ex, $"accept package fail count=>{jT808AtomicCounterService.MsgFailCount.ToString()},accept msg=>{ByteBufferUtil.HexDump(msg.Buffer)}"); | |||||
} | } | ||||
} | } | ||||
catch (Exception ex) | catch (Exception ex) | ||||
@@ -127,13 +64,11 @@ namespace JT808.DotNetty.Udp.Handlers | |||||
jT808AtomicCounterService.MsgFailIncrement(); | jT808AtomicCounterService.MsgFailIncrement(); | ||||
if (logger.IsEnabled(LogLevel.Error)) | if (logger.IsEnabled(LogLevel.Error)) | ||||
{ | { | ||||
logger.LogError("accept package fail count<<<" + jT808AtomicCounterService.MsgFailCount.ToString()); | |||||
logger.LogError(ex, "accept msg<<<" + ByteBufferUtil.HexDump(msg.Buffer)); | |||||
logger.LogError(ex, $"accept package fail count=>{jT808AtomicCounterService.MsgFailCount.ToString()},accept msg=>{ByteBufferUtil.HexDump(msg.Buffer)}"); | |||||
} | } | ||||
} | } | ||||
} | } | ||||
public override void ChannelReadComplete(IChannelHandlerContext context) => context.Flush(); | public override void ChannelReadComplete(IChannelHandlerContext context) => context.Flush(); | ||||
} | } | ||||
} | } |
@@ -1,10 +1,6 @@ | |||||
using JT808.DotNetty.Core.Handlers; | |||||
using JT808.DotNetty.Core.Interfaces; | |||||
using JT808.DotNetty.Core.Interfaces; | |||||
using Microsoft.Extensions.DependencyInjection; | using Microsoft.Extensions.DependencyInjection; | ||||
using Microsoft.Extensions.DependencyInjection.Extensions; | using Microsoft.Extensions.DependencyInjection.Extensions; | ||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT808.DotNetty.Udp | namespace JT808.DotNetty.Udp | ||||
{ | { | ||||
@@ -22,18 +18,6 @@ namespace JT808.DotNetty.Udp | |||||
return Instance; | return Instance; | ||||
} | } | ||||
public IJT808UdpNettyBuilder ReplaceCustomMsgIdHandler<T>() where T : IJT808UdpCustomMsgIdHandler | |||||
{ | |||||
Instance.JT808Builder.Services.Replace(new ServiceDescriptor(typeof(IJT808UdpCustomMsgIdHandler), typeof(T), ServiceLifetime.Singleton)); | |||||
return this; | |||||
} | |||||
public IJT808UdpNettyBuilder ReplaceMsgIdHandler<T>() where T : JT808MsgIdUdpHandlerBase | |||||
{ | |||||
Instance.JT808Builder.Services.Replace(new ServiceDescriptor(typeof(JT808MsgIdUdpHandlerBase), typeof(T), ServiceLifetime.Singleton)); | |||||
return this; | |||||
} | |||||
public IJT808UdpNettyBuilder ReplaceSessionService<T>() where T : IJT808UdpSessionService | public IJT808UdpNettyBuilder ReplaceSessionService<T>() where T : IJT808UdpSessionService | ||||
{ | { | ||||
Instance.JT808Builder.Services.Replace(new ServiceDescriptor(typeof(IJT808UdpSessionService), typeof(T), ServiceLifetime.Singleton)); | Instance.JT808Builder.Services.Replace(new ServiceDescriptor(typeof(IJT808UdpSessionService), typeof(T), ServiceLifetime.Singleton)); | ||||
@@ -3,13 +3,11 @@ using JT808.DotNetty.Core.Codecs; | |||||
using JT808.DotNetty.Core.Handlers; | using JT808.DotNetty.Core.Handlers; | ||||
using JT808.DotNetty.Core.Impls; | using JT808.DotNetty.Core.Impls; | ||||
using JT808.DotNetty.Core.Interfaces; | using JT808.DotNetty.Core.Interfaces; | ||||
using JT808.DotNetty.Core.Jobs; | |||||
using JT808.DotNetty.Core.Services; | using JT808.DotNetty.Core.Services; | ||||
using JT808.DotNetty.Internal; | using JT808.DotNetty.Internal; | ||||
using JT808.DotNetty.Udp.Handlers; | using JT808.DotNetty.Udp.Handlers; | ||||
using Microsoft.Extensions.DependencyInjection; | using Microsoft.Extensions.DependencyInjection; | ||||
using Microsoft.Extensions.DependencyInjection.Extensions; | using Microsoft.Extensions.DependencyInjection.Extensions; | ||||
using Microsoft.Extensions.Internal; | |||||
using System; | using System; | ||||
using System.Runtime.CompilerServices; | using System.Runtime.CompilerServices; | ||||
@@ -21,16 +19,12 @@ namespace JT808.DotNetty.Udp | |||||
{ | { | ||||
public static IJT808UdpNettyBuilder AddJT808UdpNettyHost(this IJT808NettyBuilder jT808NettyBuilder) | public static IJT808UdpNettyBuilder AddJT808UdpNettyHost(this IJT808NettyBuilder jT808NettyBuilder) | ||||
{ | { | ||||
jT808NettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808UdpCustomMsgIdHandler, JT808UdpCustomMsgIdHandlerEmpty>(); | |||||
jT808NettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808UdpSessionService, JT808UdpSessionService>(); | jT808NettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808UdpSessionService, JT808UdpSessionService>(); | ||||
jT808NettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808DatagramPacket, JT808DatagramPacketImpl>(); | jT808NettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808DatagramPacket, JT808DatagramPacketImpl>(); | ||||
jT808NettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808UnificationUdpSendService, JT808UnificationUdpSendService>(); | jT808NettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808UnificationUdpSendService, JT808UnificationUdpSendService>(); | ||||
jT808NettyBuilder.JT808Builder.Services.TryAddSingleton<JT808UdpSessionManager>(); | jT808NettyBuilder.JT808Builder.Services.TryAddSingleton<JT808UdpSessionManager>(); | ||||
jT808NettyBuilder.JT808Builder.Services.TryAddSingleton<JT808MsgIdUdpHandlerBase, JT808MsgIdDefaultUdpHandler>(); | |||||
jT808NettyBuilder.JT808Builder.Services.TryAddScoped<JT808UdpDecoder>(); | jT808NettyBuilder.JT808Builder.Services.TryAddScoped<JT808UdpDecoder>(); | ||||
jT808NettyBuilder.JT808Builder.Services.TryAddScoped<JT808UdpServerHandler>(); | jT808NettyBuilder.JT808Builder.Services.TryAddScoped<JT808UdpServerHandler>(); | ||||
jT808NettyBuilder.JT808Builder.Services.AddHostedService<JT808UdpAtomicCouterResetDailyJob>(); | |||||
jT808NettyBuilder.JT808Builder.Services.AddHostedService<JT808UdpTrafficResetDailyJob>(); | |||||
jT808NettyBuilder.JT808Builder.Services.AddHostedService<JT808UdpServerHost>(); | jT808NettyBuilder.JT808Builder.Services.AddHostedService<JT808UdpServerHost>(); | ||||
return new JT1078UdpBuilderDefault(jT808NettyBuilder); | return new JT1078UdpBuilderDefault(jT808NettyBuilder); | ||||
} | } | ||||
@@ -18,8 +18,6 @@ namespace JT808.DotNetty.WebApi.Handlers | |||||
private readonly JT808AtomicCounterService jT808UdpAtomicCounterService; | private readonly JT808AtomicCounterService jT808UdpAtomicCounterService; | ||||
private readonly JT808TransmitAddressFilterService jT808TransmitAddressFilterService; | |||||
private readonly IJT808TcpSessionService jT808TcpSessionService; | private readonly IJT808TcpSessionService jT808TcpSessionService; | ||||
private readonly IJT808UdpSessionService jT808UdpSessionService; | private readonly IJT808UdpSessionService jT808UdpSessionService; | ||||
@@ -28,32 +26,19 @@ namespace JT808.DotNetty.WebApi.Handlers | |||||
private readonly IJT808UnificationUdpSendService jT808UnificationUdpSendService; | private readonly IJT808UnificationUdpSendService jT808UnificationUdpSendService; | ||||
private readonly JT808TrafficService jT808TcpTrafficService; | |||||
private readonly JT808TrafficService jT808UdpTrafficService; | |||||
private readonly JT808SimpleSystemCollectService jT808SimpleSystemCollectService; | |||||
/// <summary> | /// <summary> | ||||
/// TCP一套注入 | /// TCP一套注入 | ||||
/// </summary> | /// </summary> | ||||
/// <param name="jT808TcpAtomicCounterService"></param> | /// <param name="jT808TcpAtomicCounterService"></param> | ||||
public JT808MsgIdDefaultWebApiHandler( | public JT808MsgIdDefaultWebApiHandler( | ||||
JT808SimpleSystemCollectService jT808SimpleSystemCollectService, | |||||
JT808TrafficServiceFactory jT808TrafficServiceFactory, | |||||
IJT808UnificationTcpSendService jT808UnificationTcpSendService, | IJT808UnificationTcpSendService jT808UnificationTcpSendService, | ||||
IJT808TcpSessionService jT808TcpSessionService, | IJT808TcpSessionService jT808TcpSessionService, | ||||
JT808TransmitAddressFilterService jT808TransmitAddressFilterService, | |||||
JT808AtomicCounterServiceFactory jT808AtomicCounterServiceFactory | JT808AtomicCounterServiceFactory jT808AtomicCounterServiceFactory | ||||
) | ) | ||||
{ | { | ||||
this.jT808SimpleSystemCollectService = jT808SimpleSystemCollectService; | |||||
this.jT808TcpTrafficService = jT808TrafficServiceFactory.Create(JT808TransportProtocolType.tcp); | |||||
this.jT808UnificationTcpSendService = jT808UnificationTcpSendService; | this.jT808UnificationTcpSendService = jT808UnificationTcpSendService; | ||||
this.jT808TcpSessionService = jT808TcpSessionService; | |||||
this.jT808TransmitAddressFilterService = jT808TransmitAddressFilterService; | |||||
this.jT808TcpSessionService = jT808TcpSessionService; | |||||
this.jT808TcpAtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808TransportProtocolType.tcp); | this.jT808TcpAtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808TransportProtocolType.tcp); | ||||
InitCommonRoute(); | |||||
InitTcpRoute(); | InitTcpRoute(); | ||||
} | } | ||||
@@ -62,19 +47,14 @@ namespace JT808.DotNetty.WebApi.Handlers | |||||
/// </summary> | /// </summary> | ||||
/// <param name="jT808UdpAtomicCounterService"></param> | /// <param name="jT808UdpAtomicCounterService"></param> | ||||
public JT808MsgIdDefaultWebApiHandler( | public JT808MsgIdDefaultWebApiHandler( | ||||
JT808SimpleSystemCollectService jT808SimpleSystemCollectService, | |||||
JT808TrafficServiceFactory jT808TrafficServiceFactory, | |||||
IJT808UdpSessionService jT808UdpSessionService, | IJT808UdpSessionService jT808UdpSessionService, | ||||
IJT808UnificationUdpSendService jT808UnificationUdpSendService, | IJT808UnificationUdpSendService jT808UnificationUdpSendService, | ||||
JT808AtomicCounterServiceFactory jT808AtomicCounterServiceFactory | JT808AtomicCounterServiceFactory jT808AtomicCounterServiceFactory | ||||
) | ) | ||||
{ | { | ||||
this.jT808SimpleSystemCollectService = jT808SimpleSystemCollectService; | |||||
this.jT808UdpTrafficService = jT808TrafficServiceFactory.Create(JT808TransportProtocolType.udp); | |||||
this.jT808UdpSessionService = jT808UdpSessionService; | this.jT808UdpSessionService = jT808UdpSessionService; | ||||
this.jT808UnificationUdpSendService = jT808UnificationUdpSendService; | this.jT808UnificationUdpSendService = jT808UnificationUdpSendService; | ||||
this.jT808UdpAtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808TransportProtocolType.udp); | this.jT808UdpAtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808TransportProtocolType.udp); | ||||
InitCommonRoute(); | |||||
InitUdpRoute(); | InitUdpRoute(); | ||||
} | } | ||||
@@ -84,27 +64,19 @@ namespace JT808.DotNetty.WebApi.Handlers | |||||
/// <param name="jT808TcpAtomicCounterService"></param> | /// <param name="jT808TcpAtomicCounterService"></param> | ||||
/// <param name="jT808UdpAtomicCounterService"></param> | /// <param name="jT808UdpAtomicCounterService"></param> | ||||
public JT808MsgIdDefaultWebApiHandler( | public JT808MsgIdDefaultWebApiHandler( | ||||
JT808SimpleSystemCollectService jT808SimpleSystemCollectService, | |||||
JT808TrafficServiceFactory jT808TrafficServiceFactory, | |||||
IJT808UnificationTcpSendService jT808UnificationTcpSendService, | IJT808UnificationTcpSendService jT808UnificationTcpSendService, | ||||
IJT808UnificationUdpSendService jT808UnificationUdpSendService, | IJT808UnificationUdpSendService jT808UnificationUdpSendService, | ||||
IJT808TcpSessionService jT808TcpSessionService, | IJT808TcpSessionService jT808TcpSessionService, | ||||
IJT808UdpSessionService jT808UdpSessionService, | IJT808UdpSessionService jT808UdpSessionService, | ||||
JT808TransmitAddressFilterService jT808TransmitAddressFilterService, | |||||
JT808AtomicCounterServiceFactory jT808AtomicCounterServiceFactory | JT808AtomicCounterServiceFactory jT808AtomicCounterServiceFactory | ||||
) | ) | ||||
{ | { | ||||
this.jT808SimpleSystemCollectService = jT808SimpleSystemCollectService; | |||||
this.jT808TcpTrafficService = jT808TrafficServiceFactory.Create(JT808TransportProtocolType.tcp); | |||||
this.jT808UdpTrafficService = jT808TrafficServiceFactory.Create(JT808TransportProtocolType.udp); | |||||
this.jT808UdpSessionService = jT808UdpSessionService; | this.jT808UdpSessionService = jT808UdpSessionService; | ||||
this.jT808UnificationTcpSendService = jT808UnificationTcpSendService; | this.jT808UnificationTcpSendService = jT808UnificationTcpSendService; | ||||
this.jT808UnificationUdpSendService = jT808UnificationUdpSendService; | this.jT808UnificationUdpSendService = jT808UnificationUdpSendService; | ||||
this.jT808TcpSessionService = jT808TcpSessionService; | this.jT808TcpSessionService = jT808TcpSessionService; | ||||
this.jT808TransmitAddressFilterService = jT808TransmitAddressFilterService; | |||||
this.jT808TcpAtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808TransportProtocolType.tcp); | this.jT808TcpAtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808TransportProtocolType.tcp); | ||||
this.jT808UdpAtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808TransportProtocolType.udp); | this.jT808UdpAtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808TransportProtocolType.udp); | ||||
InitCommonRoute(); | |||||
InitTcpRoute(); | InitTcpRoute(); | ||||
InitUdpRoute(); | InitUdpRoute(); | ||||
} | } | ||||
@@ -161,44 +133,6 @@ namespace JT808.DotNetty.WebApi.Handlers | |||||
return CreateJT808HttpResponse(result); | return CreateJT808HttpResponse(result); | ||||
} | } | ||||
/// <summary> | |||||
/// 添加转发过滤地址 | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <returns></returns> | |||||
public JT808HttpResponse AddTransmitAddress(JT808HttpRequest request) | |||||
{ | |||||
if (string.IsNullOrEmpty(request.Json)) | |||||
{ | |||||
return EmptyHttpResponse(); | |||||
} | |||||
return CreateJT808HttpResponse(jT808TransmitAddressFilterService.Add(request.Json)); | |||||
} | |||||
/// <summary> | |||||
/// 删除转发过滤地址(不能删除在网关服务器配置文件配的地址) | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <returns></returns> | |||||
public JT808HttpResponse RemoveTransmitAddress(JT808HttpRequest request) | |||||
{ | |||||
if (string.IsNullOrEmpty(request.Json)) | |||||
{ | |||||
return EmptyHttpResponse(); | |||||
} | |||||
return CreateJT808HttpResponse(jT808TransmitAddressFilterService.Remove(request.Json)); | |||||
} | |||||
/// <summary> | |||||
/// 获取转发过滤地址信息集合 | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <returns></returns> | |||||
public JT808HttpResponse GetTransmitAll(JT808HttpRequest request) | |||||
{ | |||||
return CreateJT808HttpResponse(jT808TransmitAddressFilterService.GetAll()); | |||||
} | |||||
/// <summary> | /// <summary> | ||||
/// 获取Tcp包计数器 | /// 获取Tcp包计数器 | ||||
/// </summary> | /// </summary> | ||||
@@ -265,61 +199,12 @@ namespace JT808.DotNetty.WebApi.Handlers | |||||
return CreateJT808HttpResponse(result); | return CreateJT808HttpResponse(result); | ||||
} | } | ||||
/// <summary> | |||||
/// 基于Tcp的流量获取 | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <returns></returns> | |||||
public JT808HttpResponse TrafficTcpGet(JT808HttpRequest request) | |||||
{ | |||||
JT808ResultDto<JT808TrafficInfoDto> jT808ResultDto = new JT808ResultDto<JT808TrafficInfoDto>(); | |||||
jT808ResultDto.Data = new JT808TrafficInfoDto(); | |||||
jT808ResultDto.Data.TotalReceiveSize = (jT808TcpTrafficService.TotalReceiveSize * 1.0) / 1024; | |||||
jT808ResultDto.Data.TotalSendSize = (jT808TcpTrafficService.TotalSendSize * 1.0) / 1024; | |||||
return CreateJT808HttpResponse(jT808ResultDto); | |||||
} | |||||
/// <summary> | |||||
/// 基于Udp的流量获取 | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <returns></returns> | |||||
public JT808HttpResponse TrafficUdpGet(JT808HttpRequest request) | |||||
{ | |||||
JT808ResultDto<JT808TrafficInfoDto> jT808ResultDto = new JT808ResultDto<JT808TrafficInfoDto>(); | |||||
jT808ResultDto.Data = new JT808TrafficInfoDto(); | |||||
jT808ResultDto.Data.TotalReceiveSize = (jT808UdpTrafficService.TotalReceiveSize * 1.0) / 1024; | |||||
jT808ResultDto.Data.TotalSendSize = (jT808UdpTrafficService.TotalSendSize * 1.0) / 1024; | |||||
return CreateJT808HttpResponse(jT808ResultDto); | |||||
} | |||||
/// <summary> | |||||
/// 获取当前系统进程使用率 | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <returns></returns> | |||||
public JT808HttpResponse SystemCollectGet(JT808HttpRequest request) | |||||
{ | |||||
JT808ResultDto<JT808SystemCollectInfoDto> jT808ResultDto = new JT808ResultDto<JT808SystemCollectInfoDto>(); | |||||
jT808ResultDto.Data = jT808SimpleSystemCollectService.Get(); | |||||
return CreateJT808HttpResponse(jT808ResultDto); | |||||
} | |||||
protected virtual void InitCommonRoute() | |||||
{ | |||||
CreateRoute(JT808Constants.JT808WebApiRouteTable.SystemCollectGet, SystemCollectGet); | |||||
} | |||||
protected virtual void InitTcpRoute() | protected virtual void InitTcpRoute() | ||||
{ | { | ||||
CreateRoute(JT808Constants.JT808WebApiRouteTable.TransmitAdd, AddTransmitAddress); | |||||
CreateRoute(JT808Constants.JT808WebApiRouteTable.TransmitRemove, RemoveTransmitAddress); | |||||
CreateRoute(JT808Constants.JT808WebApiRouteTable.TransmitGetAll, GetTransmitAll); | |||||
CreateRoute(JT808Constants.JT808WebApiRouteTable.GetTcpAtomicCounter, GetTcpAtomicCounter); | CreateRoute(JT808Constants.JT808WebApiRouteTable.GetTcpAtomicCounter, GetTcpAtomicCounter); | ||||
CreateRoute(JT808Constants.JT808WebApiRouteTable.SessionTcpGetAll, GetTcpSessionAll); | CreateRoute(JT808Constants.JT808WebApiRouteTable.SessionTcpGetAll, GetTcpSessionAll); | ||||
CreateRoute(JT808Constants.JT808WebApiRouteTable.SessionTcpRemoveByTerminalPhoneNo, RemoveTcpSessionByTerminalPhoneNo); | CreateRoute(JT808Constants.JT808WebApiRouteTable.SessionTcpRemoveByTerminalPhoneNo, RemoveTcpSessionByTerminalPhoneNo); | ||||
CreateRoute(JT808Constants.JT808WebApiRouteTable.UnificationTcpSend, UnificationTcpSend); | CreateRoute(JT808Constants.JT808WebApiRouteTable.UnificationTcpSend, UnificationTcpSend); | ||||
CreateRoute(JT808Constants.JT808WebApiRouteTable.TrafficTcpGet, TrafficTcpGet); | |||||
} | } | ||||
protected virtual void InitUdpRoute() | protected virtual void InitUdpRoute() | ||||
@@ -328,7 +213,6 @@ namespace JT808.DotNetty.WebApi.Handlers | |||||
CreateRoute(JT808Constants.JT808WebApiRouteTable.UnificationUdpSend, UnificationUdpSend); | CreateRoute(JT808Constants.JT808WebApiRouteTable.UnificationUdpSend, UnificationUdpSend); | ||||
CreateRoute(JT808Constants.JT808WebApiRouteTable.SessionUdpGetAll, GetUdpSessionAll); | CreateRoute(JT808Constants.JT808WebApiRouteTable.SessionUdpGetAll, GetUdpSessionAll); | ||||
CreateRoute(JT808Constants.JT808WebApiRouteTable.SessionUdpRemoveByTerminalPhoneNo, RemoveUdpSessionByTerminalPhoneNo); | CreateRoute(JT808Constants.JT808WebApiRouteTable.SessionUdpRemoveByTerminalPhoneNo, RemoveUdpSessionByTerminalPhoneNo); | ||||
CreateRoute(JT808Constants.JT808WebApiRouteTable.TrafficUdpGet, TrafficUdpGet); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -29,38 +29,12 @@ namespace JT808.DotNetty.WebApiClientTool | |||||
[HttpPost("Tcp/UnificationSend")] | [HttpPost("Tcp/UnificationSend")] | ||||
ITask<JT808ResultDto<bool>> UnificationTcpSend([JsonContent]JT808UnificationSendRequestDto jT808UnificationSendRequestDto); | ITask<JT808ResultDto<bool>> UnificationTcpSend([JsonContent]JT808UnificationSendRequestDto jT808UnificationSendRequestDto); | ||||
/// <summary> | /// <summary> | ||||
/// 添加转发过滤地址 | |||||
/// </summary> | |||||
/// <param name="jT808IPAddressDto"></param> | |||||
/// <returns></returns> | |||||
[HttpPost("Tcp/Transmit/Add")] | |||||
ITask<JT808ResultDto<bool>> AddTransmitAddress([JsonContent]JT808IPAddressDto jT808IPAddressDto); | |||||
/// <summary> | |||||
/// 删除转发过滤地址(不能删除在网关服务器配置文件配的地址) | |||||
/// </summary> | |||||
/// <param name="jT808IPAddressDto"></param> | |||||
/// <returns></returns> | |||||
[HttpPost("Tcp/Transmit/Remove")] | |||||
ITask<JT808ResultDto<bool>> RemoveTransmitAddress([JsonContent]JT808IPAddressDto jT808IPAddressDto); | |||||
/// <summary> | |||||
/// 获取转发过滤地址信息集合 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
[HttpGet("Tcp/Transmit/GetAll")] | |||||
ITask<JT808ResultDto<List<string>>> GetTransmitAll(); | |||||
/// <summary> | |||||
/// 获取Tcp包计数器 | /// 获取Tcp包计数器 | ||||
/// </summary> | /// </summary> | ||||
/// <param name="uri"></param> | /// <param name="uri"></param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
[HttpGet("Tcp/GetAtomicCounter")] | [HttpGet("Tcp/GetAtomicCounter")] | ||||
ITask<JT808ResultDto<JT808AtomicCounterDto>> GetTcpAtomicCounter(); | ITask<JT808ResultDto<JT808AtomicCounterDto>> GetTcpAtomicCounter(); | ||||
/// <summary> | |||||
/// 基于Tcp的流量获取 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
[HttpGet("Tcp/Traffic/Get")] | |||||
ITask<JT808ResultDto<JT808TrafficInfoDto>> GetTcpTraffic(); | |||||
#endregion | #endregion | ||||
@@ -87,26 +61,11 @@ namespace JT808.DotNetty.WebApiClientTool | |||||
[HttpPost("Udp/UnificationSend")] | [HttpPost("Udp/UnificationSend")] | ||||
ITask<JT808ResultDto<bool>> UnificationUdpSend([JsonContent]JT808UnificationSendRequestDto jT808UnificationSendRequestDto); | ITask<JT808ResultDto<bool>> UnificationUdpSend([JsonContent]JT808UnificationSendRequestDto jT808UnificationSendRequestDto); | ||||
/// <summary> | /// <summary> | ||||
/// 基于Udp的流量获取 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
[HttpGet("Udp/Traffic/Get")] | |||||
ITask<JT808ResultDto<JT808TrafficInfoDto>> GetUdpTraffic(); | |||||
/// <summary> | |||||
/// 获取Udp包计数器 | /// 获取Udp包计数器 | ||||
/// </summary> | /// </summary> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
[HttpGet("Udp/GetAtomicCounter")] | [HttpGet("Udp/GetAtomicCounter")] | ||||
ITask<JT808ResultDto<JT808AtomicCounterDto>> GetUdpAtomicCounter(); | ITask<JT808ResultDto<JT808AtomicCounterDto>> GetUdpAtomicCounter(); | ||||
#endregion | #endregion | ||||
#region 公共部分 | |||||
/// <summary> | |||||
/// 获取当前系统进程使用率 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
[HttpGet("SystemCollect/Get")] | |||||
ITask<JT808ResultDto<JT808SystemCollectInfoDto>> GetSystemCollect(); | |||||
#endregion | |||||
} | } | ||||
} | } |