diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 7e62ef9..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "src/JT808.Protocol"] - path = src/JT808.Protocol - url = https://github.com/SmallChi/JT808.git diff --git a/README.md b/README.md index 93dfb12..ccff203 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,8 @@ |:------:|:------|:------| | IJT808SessionPublishing| 会话通知(在线/离线)| 有些超长待机的设备,不会实时保持连接,那么通过平台下发的命令是无法到达的,这时候就需要设备一上线,就即时通知服务去处理,然后在即时的下发消息到设备。| | IJT808SourcePackageDispatcher| 原包分发器| 需要将源数据转给其他平台| +| IJT808UplinkPacket| 上行数据包处理接口| 平台需要查看网关的上行数据日志(可以配合InfluxDB使用)| +| IJT808DownlinkPacket| 下行数据包处理接口| 平台需要查看网关的下行数据日志(可以配合InfluxDB使用)| > 只要实现IJT808SessionPublishing接口的任意一款MQ都能实现该功能。 diff --git a/src/JT808.DotNetty.Abstractions/Enums/JT808TransportProtocolType.cs b/src/JT808.DotNetty.Abstractions/Enums/JT808TransportProtocolType.cs new file mode 100644 index 0000000..0134bb8 --- /dev/null +++ b/src/JT808.DotNetty.Abstractions/Enums/JT808TransportProtocolType.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace JT808.DotNetty.Abstractions.Enums +{ + /// + /// 传输协议类型 + /// + public enum JT808TransportProtocolType + { + tcp=1, + udp = 2 + } +} diff --git a/src/JT808.DotNetty.Abstractions/IJT808DownlinkPacket.cs b/src/JT808.DotNetty.Abstractions/IJT808DownlinkPacket.cs new file mode 100644 index 0000000..9969bd0 --- /dev/null +++ b/src/JT808.DotNetty.Abstractions/IJT808DownlinkPacket.cs @@ -0,0 +1,22 @@ +using JT808.DotNetty.Abstractions.Enums; +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; + +namespace JT808.DotNetty.Abstractions +{ + /// + /// 下行数据包处理接口 + /// + public interface IJT808DownlinkPacket + { + /// + /// + /// + /// 数据包 + /// 协议类型:tcp/udp + /// + Task ProcessorAsync(byte[] data, JT808TransportProtocolType transportProtocolType); + } +} diff --git a/src/JT808.DotNetty.Abstractions/IJT808UplinkPacket.cs b/src/JT808.DotNetty.Abstractions/IJT808UplinkPacket.cs new file mode 100644 index 0000000..5198855 --- /dev/null +++ b/src/JT808.DotNetty.Abstractions/IJT808UplinkPacket.cs @@ -0,0 +1,19 @@ +using JT808.DotNetty.Abstractions.Enums; +using System.Threading.Tasks; + +namespace JT808.DotNetty.Abstractions +{ + /// + /// 上行数据包处理接口 + /// + public interface IJT808UplinkPacket + { + /// + /// + /// + /// 数据包 + /// 传输协议类型 + /// + Task ProcessorAsync(byte[] data, JT808TransportProtocolType transportProtocolType); + } +} diff --git a/src/JT808.DotNetty.Abstractions/JT808.DotNetty.Abstractions.csproj b/src/JT808.DotNetty.Abstractions/JT808.DotNetty.Abstractions.csproj index 359146f..123bd14 100644 --- a/src/JT808.DotNetty.Abstractions/JT808.DotNetty.Abstractions.csproj +++ b/src/JT808.DotNetty.Abstractions/JT808.DotNetty.Abstractions.csproj @@ -12,9 +12,9 @@ false https://github.com/SmallChi/JT808DotNetty https://github.com/SmallChi/JT808DotNetty - https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE + https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE true - 1.1.1 + 1.2.0 diff --git a/src/JT808.DotNetty.Client/JT808.DotNetty.Client.csproj b/src/JT808.DotNetty.Client/JT808.DotNetty.Client.csproj index e644ef6..48870ae 100644 --- a/src/JT808.DotNetty.Client/JT808.DotNetty.Client.csproj +++ b/src/JT808.DotNetty.Client/JT808.DotNetty.Client.csproj @@ -12,23 +12,20 @@ false https://github.com/SmallChi/JT808DotNetty https://github.com/SmallChi/JT808DotNetty - https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE + https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE true - 1.1.1 + 1.2.0 + - - - - diff --git a/src/JT808.DotNetty.Core/Codecs/JT808TcpEncoder.cs b/src/JT808.DotNetty.Core/Codecs/JT808TcpEncoder.cs index dbd143b..21bb4e5 100644 --- a/src/JT808.DotNetty.Core/Codecs/JT808TcpEncoder.cs +++ b/src/JT808.DotNetty.Core/Codecs/JT808TcpEncoder.cs @@ -5,6 +5,8 @@ using DotNetty.Transport.Channels; using JT808.DotNetty.Core.Interfaces; using Microsoft.Extensions.Logging; using JT808.DotNetty.Core.Services; +using JT808.DotNetty.Abstractions; +using JT808.DotNetty.Abstractions.Enums; namespace JT808.DotNetty.Core.Codecs { @@ -17,10 +19,15 @@ namespace JT808.DotNetty.Core.Codecs private readonly JT808TrafficService jT808TrafficService; - public JT808TcpEncoder(ILoggerFactory loggerFactory, JT808TrafficServiceFactory jT808TrafficServiceFactory) + private readonly IJT808DownlinkPacket jT808DownlinkPacket; + + public JT808TcpEncoder(ILoggerFactory loggerFactory, + JT808TrafficServiceFactory jT808TrafficServiceFactory, + IJT808DownlinkPacket jT808DownlinkPacket) { logger = loggerFactory.CreateLogger(); - this.jT808TrafficService = jT808TrafficServiceFactory.Create(Core.Enums.JT808ModeType.Tcp); + this.jT808TrafficService = jT808TrafficServiceFactory.Create(JT808TransportProtocolType.tcp); + this.jT808DownlinkPacket = jT808DownlinkPacket; } protected override void Encode(IChannelHandlerContext context, IJT808Reply message, IByteBuffer output) @@ -31,6 +38,7 @@ namespace JT808.DotNetty.Core.Codecs { var sendData = JT808Serializer.Serialize(message.Package, message.MinBufferSize); jT808TrafficService.SendSize(sendData.Length); + jT808DownlinkPacket.ProcessorAsync(sendData, JT808TransportProtocolType.tcp); output.WriteBytes(Unpooled.WrappedBuffer(sendData)); } catch (JT808.Protocol.Exceptions.JT808Exception ex) @@ -45,6 +53,7 @@ namespace JT808.DotNetty.Core.Codecs else if (message.HexData != null) { jT808TrafficService.SendSize(message.HexData.Length); + jT808DownlinkPacket.ProcessorAsync(message.HexData, JT808TransportProtocolType.tcp); output.WriteBytes(Unpooled.WrappedBuffer(message.HexData)); } } diff --git a/src/JT808.DotNetty.Core/Configurations/JT808Configuration.cs b/src/JT808.DotNetty.Core/Configurations/JT808Configuration.cs index 48f1975..e732647 100644 --- a/src/JT808.DotNetty.Core/Configurations/JT808Configuration.cs +++ b/src/JT808.DotNetty.Core/Configurations/JT808Configuration.cs @@ -8,7 +8,7 @@ namespace JT808.DotNetty.Core.Configurations { public int TcpPort { get; set; } = 808; - public int UdpPort { get; set; } = 818; + public int UdpPort { get; set; } = 808; public int QuietPeriodSeconds { get; set; } = 1; diff --git a/src/JT808.DotNetty.Core/Impls/JT808DatagramPacketImpl.cs b/src/JT808.DotNetty.Core/Impls/JT808DatagramPacketImpl.cs new file mode 100644 index 0000000..71421f2 --- /dev/null +++ b/src/JT808.DotNetty.Core/Impls/JT808DatagramPacketImpl.cs @@ -0,0 +1,33 @@ +using DotNetty.Buffers; +using DotNetty.Transport.Channels.Sockets; +using JT808.DotNetty.Abstractions; +using JT808.DotNetty.Abstractions.Enums; +using JT808.DotNetty.Core.Interfaces; +using JT808.DotNetty.Core.Services; +using System; +using System.Collections.Generic; +using System.Net; +using System.Text; + +namespace JT808.DotNetty.Core.Impls +{ + class JT808DatagramPacketImpl : IJT808DatagramPacket + { + private readonly JT808TrafficService jT808TrafficService; + private readonly IJT808DownlinkPacket jT808DownlinkPacket; + public JT808DatagramPacketImpl( + JT808TrafficServiceFactory jT808TrafficServiceFactory, + IJT808DownlinkPacket jT808DownlinkPacket) + { + this.jT808DownlinkPacket = jT808DownlinkPacket; + this.jT808TrafficService = jT808TrafficServiceFactory.Create(JT808TransportProtocolType.udp); + } + + public DatagramPacket Create(byte[] message, EndPoint recipient) + { + jT808TrafficService.SendSize(message.Length); + jT808DownlinkPacket.ProcessorAsync(message, JT808TransportProtocolType.udp); + return new DatagramPacket(Unpooled.WrappedBuffer(message), recipient); + } + } +} diff --git a/src/JT808.DotNetty.Core/Impls/JT808DownlinkPacketEmptyImpl.cs b/src/JT808.DotNetty.Core/Impls/JT808DownlinkPacketEmptyImpl.cs new file mode 100644 index 0000000..7ba5593 --- /dev/null +++ b/src/JT808.DotNetty.Core/Impls/JT808DownlinkPacketEmptyImpl.cs @@ -0,0 +1,17 @@ +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; + } + } +} diff --git a/src/JT808.DotNetty.Core/Impls/JT808UplinkPacketEmptyImpl.cs b/src/JT808.DotNetty.Core/Impls/JT808UplinkPacketEmptyImpl.cs new file mode 100644 index 0000000..11a1b04 --- /dev/null +++ b/src/JT808.DotNetty.Core/Impls/JT808UplinkPacketEmptyImpl.cs @@ -0,0 +1,17 @@ +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; + } + } +} diff --git a/src/JT808.DotNetty.Core/Interfaces/IJT808DatagramPacket.cs b/src/JT808.DotNetty.Core/Interfaces/IJT808DatagramPacket.cs new file mode 100644 index 0000000..70e2a4b --- /dev/null +++ b/src/JT808.DotNetty.Core/Interfaces/IJT808DatagramPacket.cs @@ -0,0 +1,13 @@ +using DotNetty.Transport.Channels.Sockets; +using System.Net; + +namespace JT808.DotNetty.Core.Interfaces +{ + /// + /// 基于udp的创建发送包 + /// + interface IJT808DatagramPacket + { + DatagramPacket Create(byte[] message, EndPoint recipient); + } +} diff --git a/src/JT808.DotNetty.Core/JT808.DotNetty.Core.csproj b/src/JT808.DotNetty.Core/JT808.DotNetty.Core.csproj index 7fcafee..f42f1f4 100644 --- a/src/JT808.DotNetty.Core/JT808.DotNetty.Core.csproj +++ b/src/JT808.DotNetty.Core/JT808.DotNetty.Core.csproj @@ -12,9 +12,9 @@ false https://github.com/SmallChi/JT808DotNetty https://github.com/SmallChi/JT808DotNetty - https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE + https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE true - 1.1.1 + 1.2.0 @@ -25,6 +25,7 @@ + @@ -33,7 +34,6 @@ - diff --git a/src/JT808.DotNetty.Core/JT808CoreDotnettyExtensions.cs b/src/JT808.DotNetty.Core/JT808CoreDotnettyExtensions.cs index d48cac2..edaa37c 100644 --- a/src/JT808.DotNetty.Core/JT808CoreDotnettyExtensions.cs +++ b/src/JT808.DotNetty.Core/JT808CoreDotnettyExtensions.cs @@ -55,6 +55,8 @@ namespace JT808.DotNetty.Core } serviceDescriptors.Configure(configuration.GetSection("JT808Configuration")); serviceDescriptors.TryAddSingleton(); + serviceDescriptors.TryAddSingleton(); + serviceDescriptors.TryAddSingleton(); serviceDescriptors.TryAddSingleton(); serviceDescriptors.TryAddSingleton(); serviceDescriptors.TryAddSingleton(); @@ -80,6 +82,8 @@ namespace JT808.DotNetty.Core } serviceDescriptors.Configure(jt808Options); serviceDescriptors.TryAddSingleton(); + serviceDescriptors.TryAddSingleton(); + serviceDescriptors.TryAddSingleton(); serviceDescriptors.TryAddSingleton(); serviceDescriptors.TryAddSingleton(); serviceDescriptors.TryAddSingleton(); diff --git a/src/JT808.DotNetty.Core/Jobs/JT808TcpAtomicCouterResetDailyJob.cs b/src/JT808.DotNetty.Core/Jobs/JT808TcpAtomicCouterResetDailyJob.cs index 2211981..54b438b 100644 --- a/src/JT808.DotNetty.Core/Jobs/JT808TcpAtomicCouterResetDailyJob.cs +++ b/src/JT808.DotNetty.Core/Jobs/JT808TcpAtomicCouterResetDailyJob.cs @@ -1,4 +1,5 @@ -using JT808.DotNetty.Core.Services; +using JT808.DotNetty.Abstractions.Enums; +using JT808.DotNetty.Core.Services; using Microsoft.Extensions.Logging; using System.Threading; using System.Threading.Tasks; @@ -15,7 +16,7 @@ namespace JT808.DotNetty.Core.Jobs JT808AtomicCounterServiceFactory jT808AtomicCounterServiceFactory, ILoggerFactory loggerFactory) { - _jT808AtomicCounterService = jT808AtomicCounterServiceFactory.Create(Enums.JT808ModeType.Tcp); + _jT808AtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808TransportProtocolType.tcp); _logger =loggerFactory.CreateLogger(); } diff --git a/src/JT808.DotNetty.Core/Jobs/JT808TcpTrafficResetDailyJob.cs b/src/JT808.DotNetty.Core/Jobs/JT808TcpTrafficResetDailyJob.cs index f90fc75..5e5dcad 100644 --- a/src/JT808.DotNetty.Core/Jobs/JT808TcpTrafficResetDailyJob.cs +++ b/src/JT808.DotNetty.Core/Jobs/JT808TcpTrafficResetDailyJob.cs @@ -1,4 +1,5 @@ -using JT808.DotNetty.Core.Services; +using JT808.DotNetty.Abstractions.Enums; +using JT808.DotNetty.Core.Services; using Microsoft.Extensions.Logging; using System.Threading; using System.Threading.Tasks; @@ -15,7 +16,7 @@ namespace JT808.DotNetty.Core.Jobs JT808TrafficServiceFactory jT808TrafficServiceFactory, ILoggerFactory loggerFactory) { - _jT808TrafficService = jT808TrafficServiceFactory.Create( Enums.JT808ModeType.Tcp); + _jT808TrafficService = jT808TrafficServiceFactory.Create(JT808TransportProtocolType.tcp); _logger =loggerFactory.CreateLogger(); } diff --git a/src/JT808.DotNetty.Core/Jobs/JT808UdpAtomicCouterResetDailyJob.cs b/src/JT808.DotNetty.Core/Jobs/JT808UdpAtomicCouterResetDailyJob.cs index 9e12afa..1cd668f 100644 --- a/src/JT808.DotNetty.Core/Jobs/JT808UdpAtomicCouterResetDailyJob.cs +++ b/src/JT808.DotNetty.Core/Jobs/JT808UdpAtomicCouterResetDailyJob.cs @@ -1,4 +1,5 @@ -using JT808.DotNetty.Core.Services; +using JT808.DotNetty.Abstractions.Enums; +using JT808.DotNetty.Core.Services; using Microsoft.Extensions.Logging; using System.Threading; using System.Threading.Tasks; @@ -15,7 +16,7 @@ namespace JT808.DotNetty.Core.Jobs JT808AtomicCounterServiceFactory jT808AtomicCounterServiceFactory, ILoggerFactory loggerFactory) { - _jT808AtomicCounterService = jT808AtomicCounterServiceFactory.Create(Enums.JT808ModeType.Udp); + _jT808AtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808TransportProtocolType.udp); _logger =loggerFactory.CreateLogger(); } diff --git a/src/JT808.DotNetty.Core/Jobs/JT808UdpTrafficResetDailyJob.cs b/src/JT808.DotNetty.Core/Jobs/JT808UdpTrafficResetDailyJob.cs index f9b9891..620a80f 100644 --- a/src/JT808.DotNetty.Core/Jobs/JT808UdpTrafficResetDailyJob.cs +++ b/src/JT808.DotNetty.Core/Jobs/JT808UdpTrafficResetDailyJob.cs @@ -1,4 +1,5 @@ -using JT808.DotNetty.Core.Services; +using JT808.DotNetty.Abstractions.Enums; +using JT808.DotNetty.Core.Services; using Microsoft.Extensions.Logging; using System.Threading; using System.Threading.Tasks; @@ -15,7 +16,7 @@ namespace JT808.DotNetty.Core.Jobs JT808TrafficServiceFactory jT808TrafficServiceFactory, ILoggerFactory loggerFactory) { - _jT808TrafficService = jT808TrafficServiceFactory.Create(Enums.JT808ModeType.Udp); + _jT808TrafficService = jT808TrafficServiceFactory.Create(JT808TransportProtocolType.udp); _logger =loggerFactory.CreateLogger(); } diff --git a/src/JT808.DotNetty.Core/Services/JT808AtomicCounterServiceFactory.cs b/src/JT808.DotNetty.Core/Services/JT808AtomicCounterServiceFactory.cs index 7878ac4..916befb 100644 --- a/src/JT808.DotNetty.Core/Services/JT808AtomicCounterServiceFactory.cs +++ b/src/JT808.DotNetty.Core/Services/JT808AtomicCounterServiceFactory.cs @@ -1,4 +1,4 @@ -using JT808.DotNetty.Core.Enums; +using JT808.DotNetty.Abstractions.Enums; using System; using System.Collections.Concurrent; @@ -6,14 +6,14 @@ namespace JT808.DotNetty.Core.Services { public class JT808AtomicCounterServiceFactory { - private readonly ConcurrentDictionary cache; + private readonly ConcurrentDictionary cache; public JT808AtomicCounterServiceFactory() { - cache = new ConcurrentDictionary(); + cache = new ConcurrentDictionary(); } - public JT808AtomicCounterService Create(JT808ModeType type) + public JT808AtomicCounterService Create(JT808TransportProtocolType type) { if(cache.TryGetValue(type,out var service)) { diff --git a/src/JT808.DotNetty.Core/Services/JT808TrafficServiceFactory.cs b/src/JT808.DotNetty.Core/Services/JT808TrafficServiceFactory.cs index 7d9238f..1e3bc3d 100644 --- a/src/JT808.DotNetty.Core/Services/JT808TrafficServiceFactory.cs +++ b/src/JT808.DotNetty.Core/Services/JT808TrafficServiceFactory.cs @@ -1,4 +1,4 @@ -using JT808.DotNetty.Core.Enums; +using JT808.DotNetty.Abstractions.Enums; using JT808.DotNetty.Core.Metadata; using System; using System.Collections.Concurrent; @@ -9,14 +9,14 @@ namespace JT808.DotNetty.Core.Services { public class JT808TrafficServiceFactory { - private readonly ConcurrentDictionary cache; + private readonly ConcurrentDictionary cache; public JT808TrafficServiceFactory() { - cache = new ConcurrentDictionary(); + cache = new ConcurrentDictionary(); } - public JT808TrafficService Create(JT808ModeType type) + public JT808TrafficService Create(JT808TransportProtocolType type) { if (cache.TryGetValue(type, out var service)) { diff --git a/src/JT808.DotNetty.Core/Services/JT808UnificationUdpSendService.cs b/src/JT808.DotNetty.Core/Services/JT808UnificationUdpSendService.cs index 5a58f83..e8bf963 100644 --- a/src/JT808.DotNetty.Core/Services/JT808UnificationUdpSendService.cs +++ b/src/JT808.DotNetty.Core/Services/JT808UnificationUdpSendService.cs @@ -12,13 +12,13 @@ namespace JT808.DotNetty.Internal { private readonly JT808UdpSessionManager jT808SessionManager; - private readonly JT808TrafficService jT808TrafficService; + private readonly IJT808DatagramPacket jT808DatagramPacket; public JT808UnificationUdpSendService( - JT808TrafficServiceFactory jT808TrafficServiceFactory, + IJT808DatagramPacket jT808DatagramPacket, JT808UdpSessionManager jT808SessionManager) { - this.jT808TrafficService = jT808TrafficServiceFactory.Create(Core.Enums.JT808ModeType.Udp); + this.jT808DatagramPacket = jT808DatagramPacket; this.jT808SessionManager = jT808SessionManager; } @@ -30,8 +30,7 @@ namespace JT808.DotNetty.Internal var session = jT808SessionManager.GetSession(terminalPhoneNo); if (session != null) { - jT808TrafficService.SendSize(data.Length); - session.Channel.WriteAndFlushAsync(new DatagramPacket(Unpooled.WrappedBuffer(data), session.Sender)); + session.Channel.WriteAndFlushAsync(jT808DatagramPacket.Create(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 0c6ca48..1dd7211 100644 --- a/src/JT808.DotNetty.Tcp/Handlers/JT808TcpServerHandler.cs +++ b/src/JT808.DotNetty.Tcp/Handlers/JT808TcpServerHandler.cs @@ -9,6 +9,7 @@ using JT808.DotNetty.Core.Handlers; using JT808.DotNetty.Core.Services; using JT808.DotNetty.Core.Metadata; using JT808.DotNetty.Core.Interfaces; +using JT808.DotNetty.Abstractions.Enums; namespace JT808.DotNetty.Tcp.Handlers { @@ -29,6 +30,8 @@ namespace JT808.DotNetty.Tcp.Handlers private readonly JT808TrafficService jT808TrafficService; + private readonly IJT808UplinkPacket jT808UplinkPacket; + private readonly ILogger logger; private readonly ILogger unknownLogger; @@ -38,16 +41,18 @@ namespace JT808.DotNetty.Tcp.Handlers ILoggerFactory loggerFactory, JT808TransmitAddressFilterService jT808TransmitAddressFilterService, IJT808SourcePackageDispatcher jT808SourcePackageDispatcher, + IJT808UplinkPacket jT808UplinkPacket, JT808MsgIdTcpHandlerBase handler, JT808AtomicCounterServiceFactory jT808AtomicCounterServiceFactory, JT808TcpSessionManager jT808SessionManager) { - this.jT808TrafficService = jT808TrafficServiceFactory.Create(Core.Enums.JT808ModeType.Tcp); + this.jT808TrafficService = jT808TrafficServiceFactory.Create(JT808TransportProtocolType.tcp); this.jT808TransmitAddressFilterService = jT808TransmitAddressFilterService; this.handler = handler; this.jT808SessionManager = jT808SessionManager; this.jT808SourcePackageDispatcher = jT808SourcePackageDispatcher; - this.jT808AtomicCounterService = jT808AtomicCounterServiceFactory.Create(Core.Enums.JT808ModeType.Tcp); + this.jT808UplinkPacket = jT808UplinkPacket; + this.jT808AtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808TransportProtocolType.tcp); logger = loggerFactory.CreateLogger(); unknownLogger = loggerFactory.CreateLogger("tcp_unknown_msgid"); } @@ -57,7 +62,8 @@ namespace JT808.DotNetty.Tcp.Handlers { try { - jT808SourcePackageDispatcher?.SendAsync(msg); + jT808SourcePackageDispatcher.SendAsync(msg); + jT808UplinkPacket.ProcessorAsync(msg, JT808TransportProtocolType.tcp); //解析到头部,然后根据具体的消息Id通过队列去进行消费 //要是一定要解析到数据体可以在JT808MsgIdHandlerBase类中根据具体的消息, //解析具体的消息体,具体调用JT808Serializer.Deserialize diff --git a/src/JT808.DotNetty.Tcp/JT808.DotNetty.Tcp.csproj b/src/JT808.DotNetty.Tcp/JT808.DotNetty.Tcp.csproj index 1647bd2..f12d0f1 100644 --- a/src/JT808.DotNetty.Tcp/JT808.DotNetty.Tcp.csproj +++ b/src/JT808.DotNetty.Tcp/JT808.DotNetty.Tcp.csproj @@ -12,9 +12,9 @@ false https://github.com/SmallChi/JT808DotNetty https://github.com/SmallChi/JT808DotNetty - https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE + https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE true - 1.1.1 + 1.2.0 diff --git a/src/JT808.DotNetty.Tests/JT808.DotNetty.WebApi.Test/JT808DotNettyWebApiTest.cs b/src/JT808.DotNetty.Tests/JT808.DotNetty.WebApi.Test/JT808DotNettyWebApiTest.cs index 15c82ed..bbb9014 100644 --- a/src/JT808.DotNetty.Tests/JT808.DotNetty.WebApi.Test/JT808DotNettyWebApiTest.cs +++ b/src/JT808.DotNetty.Tests/JT808.DotNetty.WebApi.Test/JT808DotNettyWebApiTest.cs @@ -14,13 +14,12 @@ namespace JT808.DotNetty.WebApi.Test public JT808DotNettyWebApiTest() { - - var httpApiConfig = new HttpApiConfig + HttpApi.Register().ConfigureHttpApiConfig(c => { - HttpHost = new Uri("http://127.0.0.1:12828"+ JT808Constants.JT808WebApiRouteTable.RouteTablePrefix+"/"), - LoggerFactory = new LoggerFactory(), - }; - jT808DotNettyWebApi = HttpApiClient.Create(httpApiConfig); + c.HttpHost = new Uri("http://127.0.0.1:12828" + JT808Constants.JT808WebApiRouteTable.RouteTablePrefix + "/"); + c.LoggerFactory = new LoggerFactory(); + }); + var api = HttpApi.Resolve(); } [TestMethod] diff --git a/src/JT808.DotNetty.Udp/Handlers/JT808UdpServerHandler.cs b/src/JT808.DotNetty.Udp/Handlers/JT808UdpServerHandler.cs index 8a72481..43b75a2 100644 --- a/src/JT808.DotNetty.Udp/Handlers/JT808UdpServerHandler.cs +++ b/src/JT808.DotNetty.Udp/Handlers/JT808UdpServerHandler.cs @@ -11,6 +11,7 @@ using JT808.DotNetty.Core; using JT808.DotNetty.Core.Handlers; using System.Threading.Tasks; using JT808.DotNetty.Core.Interfaces; +using JT808.DotNetty.Abstractions.Enums; namespace JT808.DotNetty.Udp.Handlers { @@ -31,33 +32,44 @@ namespace JT808.DotNetty.Udp.Handlers private readonly JT808TrafficService jT808TrafficService; + private readonly IJT808UplinkPacket jT808UplinkPacket; + + private readonly IJT808DatagramPacket jT808DatagramPacket; + + private readonly ILogger unknownLogger; public JT808UdpServerHandler( + IJT808DatagramPacket jT808DatagramPacket, JT808TrafficServiceFactory jT808TrafficServiceFactory, ILoggerFactory loggerFactory, IJT808SourcePackageDispatcher jT808SourcePackageDispatcher, + IJT808UplinkPacket jT808UplinkPacket, JT808MsgIdUdpHandlerBase handler, JT808AtomicCounterServiceFactory jT808AtomicCounterServiceFactory, JT808UdpSessionManager jT808UdpSessionManager) { - this.jT808TrafficService = jT808TrafficServiceFactory.Create(Core.Enums.JT808ModeType.Udp); + this.jT808DatagramPacket = jT808DatagramPacket; + this.jT808TrafficService = jT808TrafficServiceFactory.Create(JT808TransportProtocolType.udp); this.handler = handler; this.jT808SourcePackageDispatcher = jT808SourcePackageDispatcher; - this.jT808AtomicCounterService = jT808AtomicCounterServiceFactory.Create(Core.Enums.JT808ModeType.Udp); + this.jT808AtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808TransportProtocolType.udp); + this.jT808UplinkPacket = jT808UplinkPacket; this.jT808UdpSessionManager = jT808UdpSessionManager; logger = loggerFactory.CreateLogger(); + unknownLogger = loggerFactory.CreateLogger("udp_unknown_msgid"); } protected override void ChannelRead0(IChannelHandlerContext ctx, JT808UdpPackage msg) { try { - jT808SourcePackageDispatcher?.SendAsync(msg.Buffer); - jT808TrafficService.ReceiveSize(msg.Buffer.Length); + jT808SourcePackageDispatcher.SendAsync(msg.Buffer); + jT808UplinkPacket.ProcessorAsync(msg.Buffer, JT808TransportProtocolType.udp); //解析到头部,然后根据具体的消息Id通过队列去进行消费 //要是一定要解析到数据体可以在JT808MsgIdHandlerBase类中根据具体的消息, //解析具体的消息体,具体调用JT808Serializer.Deserialize JT808HeaderPackage jT808HeaderPackage = JT808Serializer.Deserialize(msg.Buffer); jT808AtomicCounterService.MsgSuccessIncrement(); + jT808TrafficService.ReceiveSize(msg.Buffer.Length); jT808UdpSessionManager.TryAdd(ctx.Channel, msg.Sender, jT808HeaderPackage.Header.TerminalPhoneNo); if (logger.IsEnabled(LogLevel.Debug)) { @@ -69,8 +81,15 @@ namespace JT808.DotNetty.Udp.Handlers if (jT808Response != null) { var sendData = JT808Serializer.Serialize(jT808Response.Package, jT808Response.MinBufferSize); - jT808TrafficService.SendSize(sendData.Length); - ctx.WriteAndFlushAsync(new DatagramPacket(Unpooled.WrappedBuffer(sendData), msg.Sender)); + ctx.WriteAndFlushAsync(jT808DatagramPacket.Create(sendData,msg.Sender)); + } + } + else + { + //未知的消息类型已日志形式输出 + if (unknownLogger.IsEnabled(LogLevel.Debug)) + { + unknownLogger.LogDebug(ByteBufferUtil.HexDump(msg.Buffer)); } } } diff --git a/src/JT808.DotNetty.Udp/JT808.DotNetty.Udp.csproj b/src/JT808.DotNetty.Udp/JT808.DotNetty.Udp.csproj index d893348..88e902e 100644 --- a/src/JT808.DotNetty.Udp/JT808.DotNetty.Udp.csproj +++ b/src/JT808.DotNetty.Udp/JT808.DotNetty.Udp.csproj @@ -12,9 +12,9 @@ false https://github.com/SmallChi/JT808DotNetty https://github.com/SmallChi/JT808DotNetty - https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE + https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE true - 1.1.1 + 1.2.0 diff --git a/src/JT808.DotNetty.Udp/JT808UdpDotnettyExtensions.cs b/src/JT808.DotNetty.Udp/JT808UdpDotnettyExtensions.cs index 9081927..dd13dfb 100644 --- a/src/JT808.DotNetty.Udp/JT808UdpDotnettyExtensions.cs +++ b/src/JT808.DotNetty.Udp/JT808UdpDotnettyExtensions.cs @@ -1,6 +1,8 @@ using JT808.DotNetty.Core; using JT808.DotNetty.Core.Codecs; using JT808.DotNetty.Core.Handlers; +using JT808.DotNetty.Core.Impls; +using JT808.DotNetty.Core.Interfaces; using JT808.DotNetty.Core.Jobs; using JT808.DotNetty.Core.Services; using JT808.DotNetty.Udp.Handlers; @@ -18,6 +20,7 @@ namespace JT808.DotNetty.Udp { public static IServiceCollection AddJT808UdpHost(this IServiceCollection serviceDescriptors) { + serviceDescriptors.TryAddSingleton(); serviceDescriptors.TryAddSingleton(); serviceDescriptors.TryAddSingleton(); serviceDescriptors.TryAddScoped(); diff --git a/src/JT808.DotNetty.WebApi/Handlers/JT808MsgIdDefaultWebApiHandler.cs b/src/JT808.DotNetty.WebApi/Handlers/JT808MsgIdDefaultWebApiHandler.cs index d7f86e9..d247fb1 100644 --- a/src/JT808.DotNetty.WebApi/Handlers/JT808MsgIdDefaultWebApiHandler.cs +++ b/src/JT808.DotNetty.WebApi/Handlers/JT808MsgIdDefaultWebApiHandler.cs @@ -1,6 +1,6 @@ using JT808.DotNetty.Abstractions; using JT808.DotNetty.Abstractions.Dtos; -using JT808.DotNetty.Core.Enums; +using JT808.DotNetty.Abstractions.Enums; using JT808.DotNetty.Core.Handlers; using JT808.DotNetty.Core.Interfaces; using JT808.DotNetty.Core.Metadata; @@ -48,11 +48,11 @@ namespace JT808.DotNetty.WebApi.Handlers ) { this.jT808SimpleSystemCollectService = jT808SimpleSystemCollectService; - this.jT808TcpTrafficService = jT808TrafficServiceFactory.Create(JT808ModeType.Tcp); + this.jT808TcpTrafficService = jT808TrafficServiceFactory.Create(JT808TransportProtocolType.tcp); this.jT808UnificationTcpSendService = jT808UnificationTcpSendService; this.jT808TcpSessionService = jT808TcpSessionService; this.jT808TransmitAddressFilterService = jT808TransmitAddressFilterService; - this.jT808TcpAtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808ModeType.Tcp); + this.jT808TcpAtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808TransportProtocolType.tcp); InitCommonRoute(); InitTcpRoute(); } @@ -70,10 +70,10 @@ namespace JT808.DotNetty.WebApi.Handlers ) { this.jT808SimpleSystemCollectService = jT808SimpleSystemCollectService; - this.jT808UdpTrafficService = jT808TrafficServiceFactory.Create(JT808ModeType.Udp); + this.jT808UdpTrafficService = jT808TrafficServiceFactory.Create(JT808TransportProtocolType.udp); this.jT808UdpSessionService = jT808UdpSessionService; this.jT808UnificationUdpSendService = jT808UnificationUdpSendService; - this.jT808UdpAtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808ModeType.Udp); + this.jT808UdpAtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808TransportProtocolType.udp); InitCommonRoute(); InitUdpRoute(); } @@ -95,15 +95,15 @@ namespace JT808.DotNetty.WebApi.Handlers ) { this.jT808SimpleSystemCollectService = jT808SimpleSystemCollectService; - this.jT808TcpTrafficService = jT808TrafficServiceFactory.Create(JT808ModeType.Tcp); - this.jT808UdpTrafficService = jT808TrafficServiceFactory.Create(JT808ModeType.Udp); + this.jT808TcpTrafficService = jT808TrafficServiceFactory.Create(JT808TransportProtocolType.tcp); + this.jT808UdpTrafficService = jT808TrafficServiceFactory.Create(JT808TransportProtocolType.udp); this.jT808UdpSessionService = jT808UdpSessionService; this.jT808UnificationTcpSendService = jT808UnificationTcpSendService; this.jT808UnificationUdpSendService = jT808UnificationUdpSendService; this.jT808TcpSessionService = jT808TcpSessionService; this.jT808TransmitAddressFilterService = jT808TransmitAddressFilterService; - this.jT808TcpAtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808ModeType.Tcp); - this.jT808UdpAtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808ModeType.Udp); + this.jT808TcpAtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808TransportProtocolType.tcp); + this.jT808UdpAtomicCounterService = jT808AtomicCounterServiceFactory.Create(JT808TransportProtocolType.udp); InitCommonRoute(); InitTcpRoute(); InitUdpRoute(); diff --git a/src/JT808.DotNetty.WebApi/JT808.DotNetty.WebApi.csproj b/src/JT808.DotNetty.WebApi/JT808.DotNetty.WebApi.csproj index 16622ca..5e9656d 100644 --- a/src/JT808.DotNetty.WebApi/JT808.DotNetty.WebApi.csproj +++ b/src/JT808.DotNetty.WebApi/JT808.DotNetty.WebApi.csproj @@ -12,9 +12,9 @@ false https://github.com/SmallChi/JT808DotNetty https://github.com/SmallChi/JT808DotNetty - https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE + https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE true - 1.1.1 + 1.2.0 diff --git a/src/JT808.DotNetty.WebApiClientTool/JT808.DotNetty.WebApiClientTool.csproj b/src/JT808.DotNetty.WebApiClientTool/JT808.DotNetty.WebApiClientTool.csproj index 75d438e..e98cb3e 100644 --- a/src/JT808.DotNetty.WebApiClientTool/JT808.DotNetty.WebApiClientTool.csproj +++ b/src/JT808.DotNetty.WebApiClientTool/JT808.DotNetty.WebApiClientTool.csproj @@ -12,13 +12,13 @@ false https://github.com/SmallChi/JT808DotNetty https://github.com/SmallChi/JT808DotNetty - https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE + https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE true - 1.1.1 + 1.2.0 - + diff --git a/src/JT808.DotNetty.sln b/src/JT808.DotNetty.sln index e2d886d..80833d2 100644 --- a/src/JT808.DotNetty.sln +++ b/src/JT808.DotNetty.sln @@ -3,10 +3,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.28922.388 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{B5A80356-5AF6-449F-9D8B-3C1BBB9D2443}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Protocol", "JT808.Protocol\src\JT808.Protocol\JT808.Protocol.csproj", "{9FCA2EE9-8253-41AA-A64C-9883413864F9}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.Udp", "JT808.DotNetty.Udp\JT808.DotNetty.Udp.csproj", "{C960084C-2CF4-4748-AD35-D2384285D6A3}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.Core", "JT808.DotNetty.Core\JT808.DotNetty.Core.csproj", "{67C5DC72-0004-48B3-BB5A-9CB7069B4F02}" @@ -45,10 +41,6 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {9FCA2EE9-8253-41AA-A64C-9883413864F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9FCA2EE9-8253-41AA-A64C-9883413864F9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9FCA2EE9-8253-41AA-A64C-9883413864F9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9FCA2EE9-8253-41AA-A64C-9883413864F9}.Release|Any CPU.Build.0 = Release|Any CPU {C960084C-2CF4-4748-AD35-D2384285D6A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C960084C-2CF4-4748-AD35-D2384285D6A3}.Debug|Any CPU.Build.0 = Debug|Any CPU {C960084C-2CF4-4748-AD35-D2384285D6A3}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -110,7 +102,6 @@ Global HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {9FCA2EE9-8253-41AA-A64C-9883413864F9} = {B5A80356-5AF6-449F-9D8B-3C1BBB9D2443} {1C4CCE9B-761B-4581-B5DA-5B6D83572D56} = {3BD7FF02-8516-4A77-A385-9FDCDD792E22} {AEF1E1E2-C861-4268-86F6-6F376FAF79A7} = {3BD7FF02-8516-4A77-A385-9FDCDD792E22} {E503BFD8-D90A-4610-97C7-5B9A0497303B} = {3BD7FF02-8516-4A77-A385-9FDCDD792E22} diff --git a/src/JT808.Protocol b/src/JT808.Protocol deleted file mode 160000 index f0a1c92..0000000 --- a/src/JT808.Protocol +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f0a1c9255c52540af52fdc679f67380b442fce36