diff --git a/simples/JT808.DotNetty.SimpleServer/Handlers/JT808MsgIdTcpSimpleHandler.cs b/simples/JT808.DotNetty.SimpleServer/Handlers/JT808MsgIdTcpSimpleHandler.cs index f0b0396..7489978 100644 --- a/simples/JT808.DotNetty.SimpleServer/Handlers/JT808MsgIdTcpSimpleHandler.cs +++ b/simples/JT808.DotNetty.SimpleServer/Handlers/JT808MsgIdTcpSimpleHandler.cs @@ -1,5 +1,6 @@ using JT808.DotNetty.Core; using JT808.DotNetty.Core.Handlers; +using JT808.DotNetty.Core.Interfaces; using JT808.DotNetty.Core.Metadata; using Microsoft.Extensions.Logging; using System; @@ -19,37 +20,37 @@ namespace JT808.DotNetty.SimpleServer.Handlers private readonly ILogger logger; - public override JT808Response Msg0x0200(JT808Request request) + public override IJT808Reply Msg0x0200(JT808Request request) { logger.LogDebug("Tcp_Msg0x0200"); return base.Msg0x0200(request); } - public override JT808Response Msg0x0001(JT808Request request) + public override IJT808Reply Msg0x0001(JT808Request request) { logger.LogDebug("Tcp_Msg0x0001"); return base.Msg0x0001(request); } - public override JT808Response Msg0x0002(JT808Request request) + public override IJT808Reply Msg0x0002(JT808Request request) { logger.LogDebug("Tcp_Msg0x0002"); return base.Msg0x0002(request); } - public override JT808Response Msg0x0003(JT808Request request) + public override IJT808Reply Msg0x0003(JT808Request request) { logger.LogDebug("Tcp_Msg0x0003"); return base.Msg0x0003(request); } - public override JT808Response Msg0x0100(JT808Request request) + public override IJT808Reply Msg0x0100(JT808Request request) { logger.LogDebug("Tcp_Msg0x0100"); return base.Msg0x0100(request); } - public override JT808Response Msg0x0102(JT808Request request) + public override IJT808Reply Msg0x0102(JT808Request request) { logger.LogDebug("Tcp_Msg0x0102"); return base.Msg0x0102(request); diff --git a/src/JT808.DotNetty.Client/JT808TcpClient.cs b/src/JT808.DotNetty.Client/JT808TcpClient.cs index 510e1d0..eb8a105 100644 --- a/src/JT808.DotNetty.Client/JT808TcpClient.cs +++ b/src/JT808.DotNetty.Client/JT808TcpClient.cs @@ -56,7 +56,6 @@ namespace JT808.DotNetty.Client channel.Pipeline.AddLast("jt808TcpClientConnection", new JT808TcpClientConnectionHandler(this)); channel.Pipeline.AddLast("jt808TcpService", new JT808TcpClientHandler(this)); })); - clientChannel = bootstrap.ConnectAsync(IPAddress.Parse(DeviceConfig.TcpHost), DeviceConfig.TcpPort).Result; } @@ -79,7 +78,6 @@ namespace JT808.DotNetty.Client } if (disposing) { - // 清理托管资源 group.ShutdownGracefullyAsync(TimeSpan.FromMilliseconds(100), TimeSpan.FromSeconds(1)); } diff --git a/src/JT808.DotNetty.Core/Codecs/JT808TcpEncoder.cs b/src/JT808.DotNetty.Core/Codecs/JT808TcpEncoder.cs new file mode 100644 index 0000000..dbd143b --- /dev/null +++ b/src/JT808.DotNetty.Core/Codecs/JT808TcpEncoder.cs @@ -0,0 +1,52 @@ +using DotNetty.Buffers; +using DotNetty.Codecs; +using JT808.Protocol; +using DotNetty.Transport.Channels; +using JT808.DotNetty.Core.Interfaces; +using Microsoft.Extensions.Logging; +using JT808.DotNetty.Core.Services; + +namespace JT808.DotNetty.Core.Codecs +{ + /// + /// tcp统一下发出口 + /// + public class JT808TcpEncoder : MessageToByteEncoder + { + private readonly ILogger logger; + + private readonly JT808TrafficService jT808TrafficService; + + public JT808TcpEncoder(ILoggerFactory loggerFactory, JT808TrafficServiceFactory jT808TrafficServiceFactory) + { + logger = loggerFactory.CreateLogger(); + this.jT808TrafficService = jT808TrafficServiceFactory.Create(Core.Enums.JT808ModeType.Tcp); + } + + protected override void Encode(IChannelHandlerContext context, IJT808Reply message, IByteBuffer output) + { + if (message.Package != null) + { + try + { + var sendData = JT808Serializer.Serialize(message.Package, message.MinBufferSize); + jT808TrafficService.SendSize(sendData.Length); + output.WriteBytes(Unpooled.WrappedBuffer(sendData)); + } + catch (JT808.Protocol.Exceptions.JT808Exception ex) + { + logger.LogError(ex, context.Channel.Id.AsShortText()); + } + catch (System.Exception ex) + { + logger.LogError(ex, context.Channel.Id.AsShortText()); + } + } + else if (message.HexData != null) + { + jT808TrafficService.SendSize(message.HexData.Length); + output.WriteBytes(Unpooled.WrappedBuffer(message.HexData)); + } + } + } +} diff --git a/src/JT808.DotNetty.Core/Handlers/JT808MsgIdTcpHandlerBase.cs b/src/JT808.DotNetty.Core/Handlers/JT808MsgIdTcpHandlerBase.cs index d6291e4..8729013 100644 --- a/src/JT808.DotNetty.Core/Handlers/JT808MsgIdTcpHandlerBase.cs +++ b/src/JT808.DotNetty.Core/Handlers/JT808MsgIdTcpHandlerBase.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using JT808.DotNetty.Core.Interfaces; using JT808.DotNetty.Core.Metadata; using JT808.Protocol.Enums; using JT808.Protocol.Extensions; @@ -24,7 +25,7 @@ namespace JT808.DotNetty.Core.Handlers protected JT808MsgIdTcpHandlerBase(JT808TcpSessionManager sessionManager) { this.sessionManager = sessionManager; - HandlerDict = new Dictionary> + HandlerDict = new Dictionary> { {JT808MsgId.终端通用应答.ToUInt16Value(), Msg0x0001}, {JT808MsgId.终端鉴权.ToUInt16Value(), Msg0x0102}, @@ -37,7 +38,7 @@ namespace JT808.DotNetty.Core.Handlers }; } - public Dictionary> HandlerDict { get; protected set; } + public Dictionary> HandlerDict { get; protected set; } /// /// 终端通用应答 /// 平台无需回复 @@ -45,7 +46,7 @@ namespace JT808.DotNetty.Core.Handlers /// /// /// - public virtual JT808Response Msg0x0001(JT808Request request) + public virtual IJT808Reply Msg0x0001(JT808Request request) { return null; } @@ -54,7 +55,7 @@ namespace JT808.DotNetty.Core.Handlers /// /// /// - public virtual JT808Response Msg0x0002(JT808Request request) + public virtual IJT808Reply Msg0x0002(JT808Request request) { sessionManager.Heartbeat(request.Package.Header.TerminalPhoneNo); return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001() @@ -69,7 +70,7 @@ namespace JT808.DotNetty.Core.Handlers /// /// /// - public virtual JT808Response Msg0x0003(JT808Request request) + public virtual IJT808Reply Msg0x0003(JT808Request request) { return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001() { @@ -83,7 +84,7 @@ namespace JT808.DotNetty.Core.Handlers /// /// /// - public virtual JT808Response Msg0x0100(JT808Request request) + public virtual IJT808Reply Msg0x0100(JT808Request request) { return new JT808Response(JT808MsgId.终端注册应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8100() { @@ -97,7 +98,7 @@ namespace JT808.DotNetty.Core.Handlers /// /// /// - public virtual JT808Response Msg0x0102(JT808Request request) + public virtual IJT808Reply Msg0x0102(JT808Request request) { return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001() { @@ -111,7 +112,7 @@ namespace JT808.DotNetty.Core.Handlers /// /// /// - public virtual JT808Response Msg0x0200(JT808Request request) + public virtual IJT808Reply Msg0x0200(JT808Request request) { return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001() { @@ -125,7 +126,7 @@ namespace JT808.DotNetty.Core.Handlers /// /// /// - public virtual JT808Response Msg0x0704(JT808Request request) + public virtual IJT808Reply Msg0x0704(JT808Request request) { return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001() { @@ -139,7 +140,7 @@ namespace JT808.DotNetty.Core.Handlers /// /// /// - public virtual JT808Response Msg0x0900(JT808Request request) + public virtual IJT808Reply Msg0x0900(JT808Request request) { return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001() { diff --git a/src/JT808.DotNetty.Core/Handlers/JT808MsgIdUdpHandlerBase.cs b/src/JT808.DotNetty.Core/Handlers/JT808MsgIdUdpHandlerBase.cs index 44d9708..19a072b 100644 --- a/src/JT808.DotNetty.Core/Handlers/JT808MsgIdUdpHandlerBase.cs +++ b/src/JT808.DotNetty.Core/Handlers/JT808MsgIdUdpHandlerBase.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using JT808.DotNetty.Core.Interfaces; using JT808.DotNetty.Core.Metadata; using JT808.Protocol.Enums; using JT808.Protocol.Extensions; @@ -24,7 +25,7 @@ namespace JT808.DotNetty.Core.Handlers protected JT808MsgIdUdpHandlerBase(JT808UdpSessionManager sessionManager) { this.sessionManager = sessionManager; - HandlerDict = new Dictionary> + HandlerDict = new Dictionary> { {JT808MsgId.终端通用应答.ToUInt16Value(), Msg0x0001}, {JT808MsgId.终端鉴权.ToUInt16Value(), Msg0x0102}, @@ -37,7 +38,7 @@ namespace JT808.DotNetty.Core.Handlers }; } - public Dictionary> HandlerDict { get; protected set; } + public Dictionary> HandlerDict { get; protected set; } /// /// 终端通用应答 /// 平台无需回复 @@ -45,7 +46,7 @@ namespace JT808.DotNetty.Core.Handlers /// /// /// - public virtual JT808Response Msg0x0001(JT808Request request) + public virtual IJT808Reply Msg0x0001(JT808Request request) { return null; } @@ -54,7 +55,7 @@ namespace JT808.DotNetty.Core.Handlers /// /// /// - public virtual JT808Response Msg0x0002(JT808Request request) + public virtual IJT808Reply Msg0x0002(JT808Request request) { sessionManager.Heartbeat(request.Package.Header.TerminalPhoneNo); return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001() @@ -69,7 +70,7 @@ namespace JT808.DotNetty.Core.Handlers /// /// /// - public virtual JT808Response Msg0x0003(JT808Request request) + public virtual IJT808Reply Msg0x0003(JT808Request request) { return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001() { @@ -83,7 +84,7 @@ namespace JT808.DotNetty.Core.Handlers /// /// /// - public virtual JT808Response Msg0x0100(JT808Request request) + public virtual IJT808Reply Msg0x0100(JT808Request request) { return new JT808Response(JT808MsgId.终端注册应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8100() { @@ -97,7 +98,7 @@ namespace JT808.DotNetty.Core.Handlers /// /// /// - public virtual JT808Response Msg0x0102(JT808Request request) + public virtual IJT808Reply Msg0x0102(JT808Request request) { return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001() { @@ -112,7 +113,7 @@ namespace JT808.DotNetty.Core.Handlers /// /// /// - public virtual JT808Response Msg0x0200(JT808Request request) + public virtual IJT808Reply Msg0x0200(JT808Request request) { return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001() { @@ -126,7 +127,7 @@ namespace JT808.DotNetty.Core.Handlers /// /// /// - public virtual JT808Response Msg0x0704(JT808Request request) + public virtual IJT808Reply Msg0x0704(JT808Request request) { return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001() { @@ -140,7 +141,7 @@ namespace JT808.DotNetty.Core.Handlers /// /// /// - public virtual JT808Response Msg0x0900(JT808Request request) + public virtual IJT808Reply Msg0x0900(JT808Request request) { return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001() { diff --git a/src/JT808.DotNetty.Core/Interfaces/IJT808Reply.cs b/src/JT808.DotNetty.Core/Interfaces/IJT808Reply.cs new file mode 100644 index 0000000..99a2a74 --- /dev/null +++ b/src/JT808.DotNetty.Core/Interfaces/IJT808Reply.cs @@ -0,0 +1,17 @@ +using JT808.Protocol; +using System; +using System.Collections.Generic; +using System.Text; + +namespace JT808.DotNetty.Core.Interfaces +{ + public interface IJT808Reply + { + JT808Package Package { get; set; } + byte[] HexData { get; set; } + /// + /// 根据实际情况适当调整包的大小 + /// + int MinBufferSize { get; set; } + } +} diff --git a/src/JT808.DotNetty.Core/JT808.DotNetty.Core.csproj b/src/JT808.DotNetty.Core/JT808.DotNetty.Core.csproj index 4a2cfe3..7fcafee 100644 --- a/src/JT808.DotNetty.Core/JT808.DotNetty.Core.csproj +++ b/src/JT808.DotNetty.Core/JT808.DotNetty.Core.csproj @@ -27,7 +27,7 @@ - + diff --git a/src/JT808.DotNetty.Core/Metadata/JT808Response.cs b/src/JT808.DotNetty.Core/Metadata/JT808Response.cs index 1496720..ef75f3c 100644 --- a/src/JT808.DotNetty.Core/Metadata/JT808Response.cs +++ b/src/JT808.DotNetty.Core/Metadata/JT808Response.cs @@ -1,17 +1,15 @@ -using JT808.Protocol; +using JT808.DotNetty.Core.Interfaces; +using JT808.Protocol; using System; using System.Collections.Generic; using System.Reflection; namespace JT808.DotNetty.Core.Metadata { - public class JT808Response + public class JT808Response: IJT808Reply { public JT808Package Package { get; set; } public byte[] HexData { get; set; } - /// - /// 根据实际情况适当调整包的大小 - /// public int MinBufferSize { get; set; } public JT808Response() diff --git a/src/JT808.DotNetty.Core/Services/JT808UnificationTcpSendService.cs b/src/JT808.DotNetty.Core/Services/JT808UnificationTcpSendService.cs index 651bf35..3e28133 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.Metadata; using JT808.DotNetty.Core.Services; using System; using System.Linq; @@ -12,13 +13,9 @@ namespace JT808.DotNetty.Internal { private readonly JT808TcpSessionManager jT808SessionManager; - private readonly JT808TrafficService jT808TrafficService; - public JT808UnificationTcpSendService( - JT808TrafficServiceFactory jT808TrafficServiceFactory, JT808TcpSessionManager jT808SessionManager) { - this.jT808TrafficService = jT808TrafficServiceFactory.Create(Core.Enums.JT808ModeType.Tcp); this.jT808SessionManager = jT808SessionManager; } @@ -27,29 +24,16 @@ namespace JT808.DotNetty.Internal JT808ResultDto resultDto = new JT808ResultDto(); try { - var session = jT808SessionManager.GetSession(terminalPhoneNo); - if (session != null) + if(jT808SessionManager.TrySend(terminalPhoneNo, data, out var message)) { - //判断转发数据是下发不了消息的 - if (jT808SessionManager.GetAll().Count(c => c.Channel.Id == session.Channel.Id) > 1) - { - resultDto.Code = JT808ResultCode.Ok; - resultDto.Data = false; - resultDto.Message = "not support transmit data send."; - } - else - { - jT808TrafficService.SendSize(data.Length); - session.Channel.WriteAndFlushAsync(Unpooled.WrappedBuffer(data)); - resultDto.Code = JT808ResultCode.Ok; - resultDto.Data = true; - } + resultDto.Code = JT808ResultCode.Ok; + resultDto.Data = false; } else { resultDto.Code = JT808ResultCode.Ok; resultDto.Data = false; - resultDto.Message = "offline"; + resultDto.Message = message; } } catch (Exception ex) diff --git a/src/JT808.DotNetty.Core/Session/JT808TcpSessionManager.cs b/src/JT808.DotNetty.Core/Session/JT808TcpSessionManager.cs index 38b190e..1d2e907 100644 --- a/src/JT808.DotNetty.Core/Session/JT808TcpSessionManager.cs +++ b/src/JT808.DotNetty.Core/Session/JT808TcpSessionManager.cs @@ -6,6 +6,7 @@ using System.Linq; using DotNetty.Transport.Channels; using JT808.DotNetty.Abstractions; using JT808.DotNetty.Core.Metadata; +using JT808.DotNetty.Core.Interfaces; namespace JT808.DotNetty.Core { @@ -60,6 +61,60 @@ namespace JT808.DotNetty.Core } } + public bool TrySend(string terminalPhoneNo, byte[] data, out string message) + { + bool isSuccessed; + var session = GetSession(terminalPhoneNo); + if (session != null) + { + //判断转发数据是下发不了消息的 + if (SessionIdDict.Select(s=>s.Value).Count(c => c.Channel.Id == session.Channel.Id) > 1) + { + isSuccessed = false; + message = "not support transmit data send."; + } + else + { + session.Channel.WriteAndFlushAsync(new JT808Response(data)); + isSuccessed = true; + message = ""; + } + } + else + { + isSuccessed = false; + message = "offline"; + } + return isSuccessed; + } + + public bool TrySend(string terminalPhoneNo, IJT808Reply reply, out string message) + { + bool isSuccessed; + var session = GetSession(terminalPhoneNo); + if (session != null) + { + //判断转发数据是下发不了消息的 + if (SessionIdDict.Select(s => s.Value).Count(c => c.Channel.Id == session.Channel.Id) > 1) + { + isSuccessed = false; + message = "not support transmit data send."; + } + else + { + session.Channel.WriteAndFlushAsync(reply); + isSuccessed = true; + message = ""; + } + } + else + { + isSuccessed = false; + message = "offline"; + } + return isSuccessed; + } + public void TryAdd(string terminalPhoneNo,IChannel channel) { // 解决了设备号跟通道绑定到一起,不需要用到通道本身的SessionId diff --git a/src/JT808.DotNetty.Tcp/Handlers/JT808TcpServerHandler.cs b/src/JT808.DotNetty.Tcp/Handlers/JT808TcpServerHandler.cs index 429f152..0c6ca48 100644 --- a/src/JT808.DotNetty.Tcp/Handlers/JT808TcpServerHandler.cs +++ b/src/JT808.DotNetty.Tcp/Handlers/JT808TcpServerHandler.cs @@ -8,6 +8,7 @@ using Microsoft.Extensions.Logging; using JT808.DotNetty.Core.Handlers; using JT808.DotNetty.Core.Services; using JT808.DotNetty.Core.Metadata; +using JT808.DotNetty.Core.Interfaces; namespace JT808.DotNetty.Tcp.Handlers { @@ -30,6 +31,8 @@ namespace JT808.DotNetty.Tcp.Handlers private readonly ILogger logger; + private readonly ILogger unknownLogger; + public JT808TcpServerHandler( JT808TrafficServiceFactory jT808TrafficServiceFactory, ILoggerFactory loggerFactory, @@ -46,6 +49,7 @@ namespace JT808.DotNetty.Tcp.Handlers this.jT808SourcePackageDispatcher = jT808SourcePackageDispatcher; this.jT808AtomicCounterService = jT808AtomicCounterServiceFactory.Create(Core.Enums.JT808ModeType.Tcp); logger = loggerFactory.CreateLogger(); + unknownLogger = loggerFactory.CreateLogger("tcp_unknown_msgid"); } @@ -65,20 +69,25 @@ namespace JT808.DotNetty.Tcp.Handlers logger.LogDebug("accept package success count<<<" + jT808AtomicCounterService.MsgSuccessCount.ToString()); } jT808SessionManager.TryAdd(jT808HeaderPackage.Header.TerminalPhoneNo,ctx.Channel); - Func handlerFunc; - if (handler.HandlerDict.TryGetValue(jT808HeaderPackage.Header.MsgId, out handlerFunc)) + if (handler.HandlerDict.TryGetValue(jT808HeaderPackage.Header.MsgId, out var handlerFunc)) { - JT808Response jT808Response = handlerFunc(new JT808Request(jT808HeaderPackage, msg)); + IJT808Reply jT808Response = handlerFunc(new JT808Request(jT808HeaderPackage, msg)); if (jT808Response != null) { if (!jT808TransmitAddressFilterService.ContainsKey(ctx.Channel.RemoteAddress)) { - var sendData = JT808Serializer.Serialize(jT808Response.Package, jT808Response.MinBufferSize); - jT808TrafficService.SendSize(sendData.Length); - ctx.WriteAndFlushAsync(Unpooled.WrappedBuffer(sendData)); + ctx.WriteAndFlushAsync(jT808Response); } } } + else + { + //未知的消息类型已日志形式输出 + if (unknownLogger.IsEnabled(LogLevel.Debug)) + { + unknownLogger.LogDebug(ByteBufferUtil.HexDump(msg)); + } + } } catch (JT808.Protocol.Exceptions.JT808Exception ex) { diff --git a/src/JT808.DotNetty.Tcp/JT808TcpDotnettyExtensions.cs b/src/JT808.DotNetty.Tcp/JT808TcpDotnettyExtensions.cs index 577de2c..724afe6 100644 --- a/src/JT808.DotNetty.Tcp/JT808TcpDotnettyExtensions.cs +++ b/src/JT808.DotNetty.Tcp/JT808TcpDotnettyExtensions.cs @@ -24,6 +24,7 @@ namespace JT808.DotNetty.Tcp serviceDescriptors.TryAddSingleton(); serviceDescriptors.TryAddSingleton(); serviceDescriptors.TryAddScoped(); + serviceDescriptors.TryAddScoped(); serviceDescriptors.TryAddScoped(); serviceDescriptors.TryAddScoped(); serviceDescriptors.AddHostedService(); diff --git a/src/JT808.DotNetty.Tcp/JT808TcpServerHost.cs b/src/JT808.DotNetty.Tcp/JT808TcpServerHost.cs index d1c93eb..c19f31d 100644 --- a/src/JT808.DotNetty.Tcp/JT808TcpServerHost.cs +++ b/src/JT808.DotNetty.Tcp/JT808TcpServerHost.cs @@ -65,15 +65,16 @@ namespace JT808.DotNetty.Tcp IChannelPipeline pipeline = channel.Pipeline; using (var scope = serviceProvider.CreateScope()) { + channel.Pipeline.AddLast("jt808TcpBuffer", new DelimiterBasedFrameDecoder(int.MaxValue, + Unpooled.CopiedBuffer(new byte[] { JT808.Protocol.JT808Package.BeginFlag }), + Unpooled.CopiedBuffer(new byte[] { JT808.Protocol.JT808Package.EndFlag }))); + channel.Pipeline.AddLast("jt808TcpDecode", scope.ServiceProvider.GetRequiredService()); + channel.Pipeline.AddLast("jt808TcpEncode", scope.ServiceProvider.GetRequiredService()); channel.Pipeline.AddLast("systemIdleState", new IdleStateHandler( configuration.ReaderIdleTimeSeconds, configuration.WriterIdleTimeSeconds, configuration.AllIdleTimeSeconds)); channel.Pipeline.AddLast("jt808TcpConnection", scope.ServiceProvider.GetRequiredService()); - channel.Pipeline.AddLast("jt808TcpBuffer", new DelimiterBasedFrameDecoder(int.MaxValue, - Unpooled.CopiedBuffer(new byte[] { JT808.Protocol.JT808Package.BeginFlag }), - Unpooled.CopiedBuffer(new byte[] { JT808.Protocol.JT808Package.EndFlag }))); - channel.Pipeline.AddLast("jt808TcpDecode", scope.ServiceProvider.GetRequiredService()); channel.Pipeline.AddLast("jt808TcpService", scope.ServiceProvider.GetRequiredService()); } })); diff --git a/src/JT808.DotNetty.Tests/JT808.DotNetty.Hosting/Handlers/JT808MsgIdTcpCustomHandler.cs b/src/JT808.DotNetty.Tests/JT808.DotNetty.Hosting/Handlers/JT808MsgIdTcpCustomHandler.cs index ba23262..50a6ac9 100644 --- a/src/JT808.DotNetty.Tests/JT808.DotNetty.Hosting/Handlers/JT808MsgIdTcpCustomHandler.cs +++ b/src/JT808.DotNetty.Tests/JT808.DotNetty.Hosting/Handlers/JT808MsgIdTcpCustomHandler.cs @@ -1,5 +1,6 @@ using JT808.DotNetty.Core; using JT808.DotNetty.Core.Handlers; +using JT808.DotNetty.Core.Interfaces; using JT808.DotNetty.Core.Metadata; using Microsoft.Extensions.Logging; using System; @@ -19,7 +20,7 @@ namespace JT808.DotNetty.Hosting.Handlers private readonly ILogger logger; - public override JT808Response Msg0x0200(JT808Request request) + public override IJT808Reply Msg0x0200(JT808Request request) { logger.LogDebug("Tcp_Msg0x0200"); return base.Msg0x0200(request); diff --git a/src/JT808.DotNetty.Tests/JT808.DotNetty.Hosting/Handlers/JT808MsgIdUdpCustomHandler.cs b/src/JT808.DotNetty.Tests/JT808.DotNetty.Hosting/Handlers/JT808MsgIdUdpCustomHandler.cs index d35eafc..2ce4db0 100644 --- a/src/JT808.DotNetty.Tests/JT808.DotNetty.Hosting/Handlers/JT808MsgIdUdpCustomHandler.cs +++ b/src/JT808.DotNetty.Tests/JT808.DotNetty.Hosting/Handlers/JT808MsgIdUdpCustomHandler.cs @@ -1,5 +1,6 @@ using JT808.DotNetty.Core; using JT808.DotNetty.Core.Handlers; +using JT808.DotNetty.Core.Interfaces; using JT808.DotNetty.Core.Metadata; using Microsoft.Extensions.Logging; using System; @@ -19,7 +20,7 @@ namespace JT808.DotNetty.Hosting.Handlers private readonly ILogger logger; - public override JT808Response Msg0x0200(JT808Request request) + public override IJT808Reply Msg0x0200(JT808Request request) { logger.LogDebug("Udp_Msg0x0200"); return base.Msg0x0200(request); diff --git a/src/JT808.DotNetty.Udp/Handlers/JT808UdpServerHandler.cs b/src/JT808.DotNetty.Udp/Handlers/JT808UdpServerHandler.cs index 127ab33..8a72481 100644 --- a/src/JT808.DotNetty.Udp/Handlers/JT808UdpServerHandler.cs +++ b/src/JT808.DotNetty.Udp/Handlers/JT808UdpServerHandler.cs @@ -10,6 +10,7 @@ using JT808.DotNetty.Core.Services; using JT808.DotNetty.Core; using JT808.DotNetty.Core.Handlers; using System.Threading.Tasks; +using JT808.DotNetty.Core.Interfaces; namespace JT808.DotNetty.Udp.Handlers { @@ -62,10 +63,9 @@ namespace JT808.DotNetty.Udp.Handlers { logger.LogDebug("accept package success count<<<" + jT808AtomicCounterService.MsgSuccessCount.ToString()); } - Func handlerFunc; - if (handler.HandlerDict.TryGetValue(jT808HeaderPackage.Header.MsgId, out handlerFunc)) + if (handler.HandlerDict.TryGetValue(jT808HeaderPackage.Header.MsgId, out var handlerFunc)) { - JT808Response jT808Response = handlerFunc(new JT808Request(jT808HeaderPackage, msg.Buffer)); + IJT808Reply jT808Response = handlerFunc(new JT808Request(jT808HeaderPackage, msg.Buffer)); if (jT808Response != null) { var sendData = JT808Serializer.Serialize(jT808Response.Package, jT808Response.MinBufferSize); diff --git a/src/JT808.DotNetty.WebApi/JT808WebAPIServerHost.cs b/src/JT808.DotNetty.WebApi/JT808WebAPIServerHost.cs index 8439ac1..66cd93e 100644 --- a/src/JT808.DotNetty.WebApi/JT808WebAPIServerHost.cs +++ b/src/JT808.DotNetty.WebApi/JT808WebAPIServerHost.cs @@ -62,7 +62,7 @@ namespace JT808.DotNetty.WebApi pipeline.AddLast("http_encoder", new HttpResponseEncoder()); pipeline.AddLast("http_decoder", new HttpRequestDecoder(4096, 8192, 8192, false)); //将多个消息转换为单一的request或者response对象 =>IFullHttpRequest - pipeline.AddLast("http_aggregator", new HttpObjectAggregator(65536)); + pipeline.AddLast("http_aggregator", new HttpObjectAggregator(int.MaxValue)); pipeline.AddLast("http_jt808webapihandler", scope.ServiceProvider.GetRequiredService()); } })); diff --git a/src/JT808.DotNetty.sln b/src/JT808.DotNetty.sln index 078c561..e2d886d 100644 --- a/src/JT808.DotNetty.sln +++ b/src/JT808.DotNetty.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.28307.168 +# 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 @@ -35,9 +35,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.Client", "JT EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "simples", "simples", "{2459FB59-8A33-49A4-ADBC-A0B12C5886A6}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JT808.DotNetty.SimpleClient", "..\simples\JT808.DotNetty.SimpleClient\JT808.DotNetty.SimpleClient.csproj", "{E6F61CE8-BFB4-4946-A0D3-AECCE77824E5}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.SimpleClient", "..\simples\JT808.DotNetty.SimpleClient\JT808.DotNetty.SimpleClient.csproj", "{E6F61CE8-BFB4-4946-A0D3-AECCE77824E5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JT808.DotNetty.SimpleServer", "..\simples\JT808.DotNetty.SimpleServer\JT808.DotNetty.SimpleServer.csproj", "{CCE6AEFB-1AB0-4BD9-8EA2-8B4CDD097E88}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.SimpleServer", "..\simples\JT808.DotNetty.SimpleServer\JT808.DotNetty.SimpleServer.csproj", "{CCE6AEFB-1AB0-4BD9-8EA2-8B4CDD097E88}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution