diff --git a/api/README.md b/api/README.md index f1194b9..14437a5 100644 --- a/api/README.md +++ b/api/README.md @@ -47,7 +47,7 @@ ### 基于Tcp统一下发设备消息服务 -请求地址:UnificationTcpSend +请求地址:Tcp/UnificationSend 请求方式:POST @@ -76,7 +76,7 @@ ### 基于Udp统一下发设备消息服务 -请求地址:UnificationUdpSend +请求地址:Udp/UnificationSend 请求方式:POST @@ -116,7 +116,7 @@ #### 1.获取会话集合 -请求地址:Session/Tcp/GetAll +请求地址:Tcp/Session/GetAll 请求方式:GET @@ -150,7 +150,7 @@ #### 2.通过设备终端号移除对应会话 -请求地址:Session/Tcp/RemoveByTerminalPhoneNo +请求地址:Tcp/Session/RemoveByTerminalPhoneNo 请求方式:POST @@ -189,7 +189,7 @@ #### 1.获取会话集合 -请求地址:Session/Udp/GetAll +请求地址:Udp/Session/GetAll 请求方式:GET @@ -223,7 +223,7 @@ #### 2.通过设备终端号移除对应会话 -请求地址:Session/Udp/RemoveByTerminalPhoneNo +请求地址:Udp/Session/RemoveByTerminalPhoneNo 请求方式:POST @@ -253,7 +253,7 @@ #### 1.添加转发过滤地址 -请求地址:Transmit/Add +请求地址:Tcp/Transmit/Add 请求方式:POST @@ -282,7 +282,7 @@ #### 2.删除转发过滤地址(不能删除在网关服务器配置文件配的地址) -请求地址:Transmit/Remove +请求地址:Tcp/Transmit/Remove 请求方式:POST @@ -311,7 +311,7 @@ #### 3.获取转发过滤地址信息集合 -请求地址:Transmit/GetAll +请求地址:Tcp/Transmit/GetAll 请求方式:GET @@ -336,7 +336,7 @@ ### 基于Tcp消息包计数服务 -请求地址:GetTcpAtomicCounter +请求地址:Tcp/GetAtomicCounter 请求方式:GET @@ -362,7 +362,7 @@ ### 基于Udp消息包计数服务 -请求地址:GetUdpAtomicCounter +请求地址:Udp/GetAtomicCounter 请求方式:GET diff --git a/src/JT808.DotNetty.Abstractions/JT808Constants.cs b/src/JT808.DotNetty.Abstractions/JT808Constants.cs index ea9a959..14e3965 100644 --- a/src/JT808.DotNetty.Abstractions/JT808Constants.cs +++ b/src/JT808.DotNetty.Abstractions/JT808Constants.cs @@ -13,50 +13,55 @@ public const string SessionPrefix = "Session"; public const string TransmitPrefix = "Transmit"; + + public const string TcpPrefix = "Tcp"; + + public const string UdpPrefix = "Udp"; + /// /// 添加转发过滤地址 /// - public static string TransmitAdd = $"{RouteTablePrefix}/{TransmitPrefix}/Add"; + public static string TransmitAdd = $"{RouteTablePrefix}/{TcpPrefix}/{TransmitPrefix}/Add"; /// /// 删除转发过滤地址(不能删除在网关服务器配置文件配的地址) /// - public static string TransmitRemove = $"{RouteTablePrefix}/{TransmitPrefix}/Remove"; + public static string TransmitRemove = $"{RouteTablePrefix}/{TcpPrefix}/{TransmitPrefix}/Remove"; /// /// 获取转发过滤地址信息集合 /// - public static string TransmitGetAll = $"{RouteTablePrefix}/{TransmitPrefix}/GetAll"; + public static string TransmitGetAll = $"{RouteTablePrefix}/{TcpPrefix}/{TransmitPrefix}/GetAll"; /// /// 获取Tcp包计数器 /// - public static string GetTcpAtomicCounter = $"{RouteTablePrefix}/GetTcpAtomicCounter"; + public static string GetTcpAtomicCounter = $"{RouteTablePrefix}/{TcpPrefix}/GetAtomicCounter"; /// /// 基于Tcp的会话服务集合 /// - public static string SessionTcpGetAll = $"{RouteTablePrefix}/{SessionPrefix}/Tcp/GetAll"; + public static string SessionTcpGetAll = $"{RouteTablePrefix}/{TcpPrefix}/{SessionPrefix}/GetAll"; /// /// 基于Tcp的会话服务-通过设备终端号移除对应会话 /// - public static string SessionTcpRemoveByTerminalPhoneNo = $"{RouteTablePrefix}/{SessionPrefix}/Tcp/RemoveByTerminalPhoneNo"; + public static string SessionTcpRemoveByTerminalPhoneNo = $"{RouteTablePrefix}/{TcpPrefix}/{SessionPrefix}/RemoveByTerminalPhoneNo"; /// /// 基于Tcp的统一下发信息 /// - public static string UnificationTcpSend = $"{RouteTablePrefix}/UnificationTcpSend"; + public static string UnificationTcpSend = $"{RouteTablePrefix}/{TcpPrefix}/UnificationSend"; /// /// 获取Udp包计数器 /// - public static string GetUdpAtomicCounter = $"{RouteTablePrefix}/GetUdpAtomicCounter"; + public static string GetUdpAtomicCounter = $"{RouteTablePrefix}/{UdpPrefix}/GetAtomicCounter"; /// /// 基于Udp的统一下发信息 /// - public static string UnificationUdpSend = $"{RouteTablePrefix}/UnificationUdpSend"; + public static string UnificationUdpSend = $"{RouteTablePrefix}/{UdpPrefix}/UnificationSend"; /// /// 基于Udp的会话服务集合 /// - public static string SessionUdpGetAll = $"{RouteTablePrefix}/{SessionPrefix}/Udp/GetAll"; + public static string SessionUdpGetAll = $"{RouteTablePrefix}/{UdpPrefix}/{SessionPrefix}/GetAll"; /// /// 基于Udp的会话服务-通过设备终端号移除对应会话 /// - public static string SessionUdpRemoveByTerminalPhoneNo = $"{RouteTablePrefix}/{SessionPrefix}/Udp/RemoveByTerminalPhoneNo"; + public static string SessionUdpRemoveByTerminalPhoneNo = $"{RouteTablePrefix}/{UdpPrefix}/{SessionPrefix}/RemoveByTerminalPhoneNo"; } } diff --git a/src/JT808.DotNetty.Core/JT808BackgroundService.cs b/src/JT808.DotNetty.Core/JT808BackgroundService.cs index 9c9e512..bf7acc3 100644 --- a/src/JT808.DotNetty.Core/JT808BackgroundService.cs +++ b/src/JT808.DotNetty.Core/JT808BackgroundService.cs @@ -33,6 +33,8 @@ namespace JT808.DotNetty.Core private Task _executingTask; + public abstract string ServiceName { get; } + private readonly CancellationTokenSource _stoppingCts = new CancellationTokenSource(); protected abstract Task ExecuteAsync(CancellationToken stoppingToken); diff --git a/src/JT808.DotNetty.Core/Jobs/JT808TcpAtomicCouterResetDailyJob.cs b/src/JT808.DotNetty.Core/Jobs/JT808TcpAtomicCouterResetDailyJob.cs index 8894a01..06625bd 100644 --- a/src/JT808.DotNetty.Core/Jobs/JT808TcpAtomicCouterResetDailyJob.cs +++ b/src/JT808.DotNetty.Core/Jobs/JT808TcpAtomicCouterResetDailyJob.cs @@ -19,17 +19,19 @@ namespace JT808.DotNetty.Core.Jobs _logger =loggerFactory.CreateLogger(); } + public override string ServiceName => nameof(JT808TcpAtomicCouterResetDailyJob); + protected override async Task ExecuteAsync(CancellationToken stoppingToken) { - _logger.LogInformation($"{nameof(JT808TcpAtomicCouterResetDailyJob)} is starting."); - stoppingToken.Register(() => _logger.LogInformation($"{nameof(JT808TcpAtomicCouterResetDailyJob)} background task is stopping.")); + _logger.LogInformation($"{ServiceName} is starting."); + stoppingToken.Register(() => _logger.LogInformation($"{ServiceName} background task is stopping.")); while (!stoppingToken.IsCancellationRequested) { - _logger.LogInformation($"{nameof(JT808TcpAtomicCouterResetDailyJob)} task doing background work."); + _logger.LogInformation($"{ServiceName} task doing background work."); _jT808TcpAtomicCounterService.Reset(); await Task.Delay(DelayTimeSpan, stoppingToken); } - _logger.LogInformation($"{nameof(JT808TcpAtomicCouterResetDailyJob)} background task is stopping."); + _logger.LogInformation($"{ServiceName} background task is stopping."); } } } diff --git a/src/JT808.DotNetty.Core/Jobs/JT808TcpTrafficResetDailyJob.cs b/src/JT808.DotNetty.Core/Jobs/JT808TcpTrafficResetDailyJob.cs new file mode 100644 index 0000000..ca270fa --- /dev/null +++ b/src/JT808.DotNetty.Core/Jobs/JT808TcpTrafficResetDailyJob.cs @@ -0,0 +1,37 @@ +using JT808.DotNetty.Core.Services; +using Microsoft.Extensions.Logging; +using System.Threading; +using System.Threading.Tasks; + +namespace JT808.DotNetty.Core.Jobs +{ + public class JT808TcpTrafficResetDailyJob : JT808BackgroundService + { + private readonly ILogger _logger; + + private readonly JT808TcpTrafficService _jT808TcpTrafficService; + + public JT808TcpTrafficResetDailyJob( + JT808TcpTrafficService jT808TcpTrafficService, + ILoggerFactory loggerFactory) + { + _jT808TcpTrafficService = jT808TcpTrafficService; + _logger =loggerFactory.CreateLogger(); + } + + 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."); + _jT808TcpTrafficService.ResetSize(); + await Task.Delay(DelayTimeSpan, stoppingToken); + } + _logger.LogInformation($"{ServiceName} background task is stopping."); + } + } +} diff --git a/src/JT808.DotNetty.Core/Jobs/JT808UdpAtomicCouterResetDailyJob.cs b/src/JT808.DotNetty.Core/Jobs/JT808UdpAtomicCouterResetDailyJob.cs index 973143d..73630bb 100644 --- a/src/JT808.DotNetty.Core/Jobs/JT808UdpAtomicCouterResetDailyJob.cs +++ b/src/JT808.DotNetty.Core/Jobs/JT808UdpAtomicCouterResetDailyJob.cs @@ -23,17 +23,19 @@ namespace JT808.DotNetty.Core.Jobs _logger =loggerFactory.CreateLogger(); } + public override string ServiceName => nameof(JT808UdpAtomicCouterResetDailyJob); + protected override async Task ExecuteAsync(CancellationToken stoppingToken) { - _logger.LogInformation($"{nameof(JT808UdpAtomicCouterResetDailyJob)} is starting."); - stoppingToken.Register(() => _logger.LogInformation($"{nameof(JT808UdpAtomicCouterResetDailyJob)} background task is stopping.")); + _logger.LogInformation($"{ServiceName} is starting."); + stoppingToken.Register(() => _logger.LogInformation($"{ServiceName} background task is stopping.")); while (!stoppingToken.IsCancellationRequested) { - _logger.LogInformation($"{nameof(JT808UdpAtomicCouterResetDailyJob)} task doing background work."); + _logger.LogInformation($"{ServiceName} task doing background work."); _jT808UdpAtomicCounterService.Reset(); await Task.Delay(DelayTimeSpan, stoppingToken); } - _logger.LogInformation($"{nameof(JT808UdpAtomicCouterResetDailyJob)} background task is stopping."); + _logger.LogInformation($"{ServiceName} background task is stopping."); } } } diff --git a/src/JT808.DotNetty.Core/Jobs/JT808UdpTrafficResetDailyJob.cs b/src/JT808.DotNetty.Core/Jobs/JT808UdpTrafficResetDailyJob.cs new file mode 100644 index 0000000..8641ac7 --- /dev/null +++ b/src/JT808.DotNetty.Core/Jobs/JT808UdpTrafficResetDailyJob.cs @@ -0,0 +1,37 @@ +using JT808.DotNetty.Core.Services; +using Microsoft.Extensions.Logging; +using System.Threading; +using System.Threading.Tasks; + +namespace JT808.DotNetty.Core.Jobs +{ + public class JT808UdpTrafficResetDailyJob : JT808BackgroundService + { + private readonly ILogger _logger; + + private readonly JT808UdpTrafficService _jT808UdpTrafficService; + + public JT808UdpTrafficResetDailyJob( + JT808UdpTrafficService jT808UdpTrafficService, + ILoggerFactory loggerFactory) + { + _jT808UdpTrafficService = jT808UdpTrafficService; + _logger =loggerFactory.CreateLogger(); + } + + 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."); + _jT808UdpTrafficService.ResetSize(); + await Task.Delay(DelayTimeSpan, stoppingToken); + } + _logger.LogInformation($"{ServiceName} background task is stopping."); + } + } +} diff --git a/src/JT808.DotNetty.Core/Services/JT808TcpTrafficService.cs b/src/JT808.DotNetty.Core/Services/JT808TcpTrafficService.cs new file mode 100644 index 0000000..eacc211 --- /dev/null +++ b/src/JT808.DotNetty.Core/Services/JT808TcpTrafficService.cs @@ -0,0 +1,30 @@ +using JT808.DotNetty.Core.Metadata; +using System; +using System.Collections.Generic; +using System.Text; + +namespace JT808.DotNetty.Core.Services +{ + public class JT808TcpTrafficService + { + private readonly JT808AtomicCounter receiveCounter = new JT808AtomicCounter(); + + private readonly JT808AtomicCounter sendCounter = new JT808AtomicCounter(); + + public void ReceiveSize(long size) + { + receiveCounter.Add(size); + } + + public void SendSize(long size) + { + sendCounter.Add(size); + } + + public void ResetSize() + { + receiveCounter.Reset(); + sendCounter.Reset(); + } + } +} diff --git a/src/JT808.DotNetty.Core/Services/JT808UdpTrafficService.cs b/src/JT808.DotNetty.Core/Services/JT808UdpTrafficService.cs new file mode 100644 index 0000000..7049cd6 --- /dev/null +++ b/src/JT808.DotNetty.Core/Services/JT808UdpTrafficService.cs @@ -0,0 +1,30 @@ +using JT808.DotNetty.Core.Metadata; +using System; +using System.Collections.Generic; +using System.Text; + +namespace JT808.DotNetty.Core.Services +{ + public class JT808UdpTrafficService + { + private readonly JT808AtomicCounter receiveCounter = new JT808AtomicCounter(); + + private readonly JT808AtomicCounter sendCounter = new JT808AtomicCounter(); + + public void ReceiveSize(long size) + { + receiveCounter.Add(size); + } + + public void SendSize(long size) + { + sendCounter.Add(size); + } + + public void ResetSize() + { + receiveCounter.Reset(); + sendCounter.Reset(); + } + } +} diff --git a/src/JT808.DotNetty.Core/Services/JT808UnificationTcpSendService.cs b/src/JT808.DotNetty.Core/Services/JT808UnificationTcpSendService.cs index c60e803..e5a95c8 100644 --- a/src/JT808.DotNetty.Core/Services/JT808UnificationTcpSendService.cs +++ b/src/JT808.DotNetty.Core/Services/JT808UnificationTcpSendService.cs @@ -2,6 +2,7 @@ using JT808.DotNetty.Abstractions.Dtos; using JT808.DotNetty.Core; using JT808.DotNetty.Core.Interfaces; +using JT808.DotNetty.Core.Services; using System; namespace JT808.DotNetty.Internal @@ -10,8 +11,13 @@ namespace JT808.DotNetty.Internal { private readonly JT808TcpSessionManager jT808SessionManager; - public JT808UnificationTcpSendService(JT808TcpSessionManager jT808SessionManager) + private readonly JT808TcpTrafficService jT808TcpTrafficService; + + public JT808UnificationTcpSendService( + JT808TcpTrafficService jT808TcpTrafficService, + JT808TcpSessionManager jT808SessionManager) { + this.jT808TcpTrafficService = jT808TcpTrafficService; this.jT808SessionManager = jT808SessionManager; } @@ -22,7 +28,8 @@ namespace JT808.DotNetty.Internal { var session = jT808SessionManager.GetSession(terminalPhoneNo); if (session != null) - { + { + jT808TcpTrafficService.SendSize(data.Length); session.Channel.WriteAndFlushAsync(Unpooled.WrappedBuffer(data)); resultDto.Code = JT808ResultCode.Ok; resultDto.Data = true; diff --git a/src/JT808.DotNetty.Core/Services/JT808UnificationUdpSendService.cs b/src/JT808.DotNetty.Core/Services/JT808UnificationUdpSendService.cs index 6b267bf..896e2ac 100644 --- a/src/JT808.DotNetty.Core/Services/JT808UnificationUdpSendService.cs +++ b/src/JT808.DotNetty.Core/Services/JT808UnificationUdpSendService.cs @@ -3,6 +3,7 @@ using DotNetty.Transport.Channels.Sockets; using JT808.DotNetty.Abstractions.Dtos; using JT808.DotNetty.Core; using JT808.DotNetty.Core.Interfaces; +using JT808.DotNetty.Core.Services; using System; namespace JT808.DotNetty.Internal @@ -11,8 +12,13 @@ namespace JT808.DotNetty.Internal { private readonly JT808UdpSessionManager jT808SessionManager; - public JT808UnificationUdpSendService(JT808UdpSessionManager jT808SessionManager) + private readonly JT808UdpTrafficService jT808UdpTrafficService; + + public JT808UnificationUdpSendService( + JT808UdpTrafficService jT808UdpTrafficService, + JT808UdpSessionManager jT808SessionManager) { + this.jT808UdpTrafficService = jT808UdpTrafficService; this.jT808SessionManager = jT808SessionManager; } @@ -24,6 +30,7 @@ namespace JT808.DotNetty.Internal var session = jT808SessionManager.GetSession(terminalPhoneNo); if (session != null) { + jT808UdpTrafficService.SendSize(data.Length); session.Channel.WriteAndFlushAsync(new DatagramPacket(Unpooled.WrappedBuffer(data), session.Sender)); resultDto.Code = JT808ResultCode.Ok; resultDto.Data = true; diff --git a/src/JT808.DotNetty.Tcp/Handlers/JT808TcpServerHandler.cs b/src/JT808.DotNetty.Tcp/Handlers/JT808TcpServerHandler.cs index a0fdcdc..ed4308f 100644 --- a/src/JT808.DotNetty.Tcp/Handlers/JT808TcpServerHandler.cs +++ b/src/JT808.DotNetty.Tcp/Handlers/JT808TcpServerHandler.cs @@ -26,9 +26,12 @@ namespace JT808.DotNetty.Tcp.Handlers private readonly JT808TcpAtomicCounterService jT808AtomicCounterService; + private readonly JT808TcpTrafficService jT808TcpTrafficService; + private readonly ILogger logger; public JT808TcpServerHandler( + JT808TcpTrafficService jT808TcpTrafficService, ILoggerFactory loggerFactory, JT808TransmitAddressFilterService jT808TransmitAddressFilterService, IJT808SourcePackageDispatcher jT808SourcePackageDispatcher, @@ -36,6 +39,7 @@ namespace JT808.DotNetty.Tcp.Handlers JT808TcpAtomicCounterService jT808AtomicCounterService, JT808TcpSessionManager jT808SessionManager) { + this.jT808TcpTrafficService = jT808TcpTrafficService; this.jT808TransmitAddressFilterService = jT808TransmitAddressFilterService; this.handler = handler; this.jT808SessionManager = jT808SessionManager; @@ -55,6 +59,7 @@ namespace JT808.DotNetty.Tcp.Handlers //解析具体的消息体,具体调用JT808Serializer.Deserialize JT808HeaderPackage jT808HeaderPackage = JT808Serializer.Deserialize(msg); jT808AtomicCounterService.MsgSuccessIncrement(); + jT808TcpTrafficService.ReceiveSize(msg.Length); if (logger.IsEnabled(LogLevel.Debug)) { logger.LogDebug("accept package success count<<<" + jT808AtomicCounterService.MsgSuccessCount.ToString()); @@ -68,7 +73,9 @@ namespace JT808.DotNetty.Tcp.Handlers { if (!jT808TransmitAddressFilterService.ContainsKey(ctx.Channel.RemoteAddress)) { - ctx.WriteAndFlushAsync(Unpooled.WrappedBuffer(JT808Serializer.Serialize(jT808Response.Package, jT808Response.MinBufferSize))); + var sendData = JT808Serializer.Serialize(jT808Response.Package, jT808Response.MinBufferSize); + jT808TcpTrafficService.SendSize(sendData.Length); + ctx.WriteAndFlushAsync(Unpooled.WrappedBuffer(sendData)); } } } diff --git a/src/JT808.DotNetty.Tcp/JT808TcpDotnettyExtensions.cs b/src/JT808.DotNetty.Tcp/JT808TcpDotnettyExtensions.cs index 1db92cc..6277254 100644 --- a/src/JT808.DotNetty.Tcp/JT808TcpDotnettyExtensions.cs +++ b/src/JT808.DotNetty.Tcp/JT808TcpDotnettyExtensions.cs @@ -24,11 +24,13 @@ namespace JT808.DotNetty.Tcp serviceDescriptors.TryAddSingleton(); serviceDescriptors.TryAddSingleton(); serviceDescriptors.TryAddSingleton(); + serviceDescriptors.TryAddSingleton(); serviceDescriptors.TryAddSingleton(); serviceDescriptors.TryAddScoped(); serviceDescriptors.TryAddScoped(); serviceDescriptors.TryAddScoped(); serviceDescriptors.AddHostedService(); + serviceDescriptors.AddHostedService(); serviceDescriptors.AddHostedService(); return serviceDescriptors; } diff --git a/src/JT808.DotNetty.Udp/Handlers/JT808UdpServerHandler.cs b/src/JT808.DotNetty.Udp/Handlers/JT808UdpServerHandler.cs index 63c0f79..33f82b8 100644 --- a/src/JT808.DotNetty.Udp/Handlers/JT808UdpServerHandler.cs +++ b/src/JT808.DotNetty.Udp/Handlers/JT808UdpServerHandler.cs @@ -28,13 +28,17 @@ namespace JT808.DotNetty.Udp.Handlers private readonly JT808MsgIdUdpHandlerBase handler; + private readonly JT808UdpTrafficService jT808UdpTrafficService; + public JT808UdpServerHandler( + JT808UdpTrafficService jT808UdpTrafficService, ILoggerFactory loggerFactory, IJT808SourcePackageDispatcher jT808SourcePackageDispatcher, JT808MsgIdUdpHandlerBase handler, JT808UdpAtomicCounterService jT808UdpAtomicCounterService, JT808UdpSessionManager jT808UdpSessionManager) { + this.jT808UdpTrafficService = jT808UdpTrafficService; this.handler = handler; this.jT808SourcePackageDispatcher = jT808SourcePackageDispatcher; this.jT808UdpAtomicCounterService = jT808UdpAtomicCounterService; @@ -47,6 +51,7 @@ namespace JT808.DotNetty.Udp.Handlers try { jT808SourcePackageDispatcher?.SendAsync(msg.Buffer); + jT808UdpTrafficService.ReceiveSize(msg.Buffer.Length); //解析到头部,然后根据具体的消息Id通过队列去进行消费 //要是一定要解析到数据体可以在JT808MsgIdHandlerBase类中根据具体的消息, //解析具体的消息体,具体调用JT808Serializer.Deserialize @@ -63,7 +68,9 @@ namespace JT808.DotNetty.Udp.Handlers JT808Response jT808Response = handlerFunc(new JT808Request(jT808HeaderPackage, msg.Buffer)); if (jT808Response != null) { - ctx.WriteAndFlushAsync(new DatagramPacket(Unpooled.WrappedBuffer(JT808Serializer.Serialize(jT808Response.Package, jT808Response.MinBufferSize)), msg.Sender)); + var sendData = JT808Serializer.Serialize(jT808Response.Package, jT808Response.MinBufferSize); + jT808UdpTrafficService.SendSize(sendData.Length); + ctx.WriteAndFlushAsync(new DatagramPacket(Unpooled.WrappedBuffer(sendData), msg.Sender)); } } } diff --git a/src/JT808.DotNetty.Udp/JT808UdpDotnettyExtensions.cs b/src/JT808.DotNetty.Udp/JT808UdpDotnettyExtensions.cs index 7662744..6619f04 100644 --- a/src/JT808.DotNetty.Udp/JT808UdpDotnettyExtensions.cs +++ b/src/JT808.DotNetty.Udp/JT808UdpDotnettyExtensions.cs @@ -18,10 +18,12 @@ namespace JT808.DotNetty.Udp { serviceDescriptors.TryAddSingleton(); serviceDescriptors.TryAddSingleton(); + serviceDescriptors.TryAddSingleton(); serviceDescriptors.TryAddSingleton(); serviceDescriptors.TryAddScoped(); serviceDescriptors.TryAddScoped(); serviceDescriptors.AddHostedService(); + serviceDescriptors.AddHostedService(); serviceDescriptors.AddHostedService(); return serviceDescriptors; }