diff --git a/src/JT808.DotNetty.Abstractions/Dtos/JT808SourcePackageChannelInfoDto.cs b/src/JT808.DotNetty.Abstractions/Dtos/JT808SourcePackageChannelInfoDto.cs deleted file mode 100644 index 6ff0c37..0000000 --- a/src/JT808.DotNetty.Abstractions/Dtos/JT808SourcePackageChannelInfoDto.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace JT808.DotNetty.Abstractions.Dtos -{ - /// - /// 原包通道信息 - /// - public class JT808SourcePackageChannelInfoDto - { - /// - /// 远程地址 - /// - public string RemoteAddress { get; set; } - /// - /// 本地地址 - /// - public string LocalAddress { get; set; } - /// - /// 是否注册 - /// - public bool Registered { get; set; } - /// - /// 是否活动 - /// - public bool Active { get; set; } - /// - /// 是否打开 - /// - public bool Open { get; set; } - } -} diff --git a/src/JT808.DotNetty.Abstractions/JT808.DotNetty.Abstractions.csproj b/src/JT808.DotNetty.Abstractions/JT808.DotNetty.Abstractions.csproj index 3993216..b8779d3 100644 --- a/src/JT808.DotNetty.Abstractions/JT808.DotNetty.Abstractions.csproj +++ b/src/JT808.DotNetty.Abstractions/JT808.DotNetty.Abstractions.csproj @@ -1,8 +1,20 @@ - + netstandard2.0 7.1 + Copyright 2018. + SmallChi + JT808.DotNetty.Abstractions + JT808.DotNetty.Abstractions + 基于DotNetty实现的JT808DotNetty的抽象库 + 基于DotNetty实现的JT808DotNetty的抽象库 + false + https://github.com/SmallChi/JT808DotNetty + https://github.com/SmallChi/JT808DotNetty + https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE + true + 1.0.0 diff --git a/src/JT808.DotNetty.Codecs/JT808.DotNetty.Codecs.csproj b/src/JT808.DotNetty.Codecs/JT808.DotNetty.Codecs.csproj index 19d837a..56628c4 100644 --- a/src/JT808.DotNetty.Codecs/JT808.DotNetty.Codecs.csproj +++ b/src/JT808.DotNetty.Codecs/JT808.DotNetty.Codecs.csproj @@ -3,6 +3,18 @@ netstandard2.0 7.1 + Copyright 2018. + SmallChi + JT808.DotNetty.Codecs + JT808.DotNetty.Codecs + 基于DotNetty实现的JT808DotNetty的编解码库 + 基于DotNetty实现的JT808DotNetty的编解码库 + false + https://github.com/SmallChi/JT808DotNetty + https://github.com/SmallChi/JT808DotNetty + https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE + true + 1.0.0 diff --git a/src/JT808.DotNetty.Core/Interfaces/IJT808UnificationTcpSendService.cs b/src/JT808.DotNetty.Core/Interfaces/IJT808UnificationTcpSendService.cs index c4cc5db..528edcf 100644 --- a/src/JT808.DotNetty.Core/Interfaces/IJT808UnificationTcpSendService.cs +++ b/src/JT808.DotNetty.Core/Interfaces/IJT808UnificationTcpSendService.cs @@ -5,7 +5,7 @@ namespace JT808.DotNetty.Core.Interfaces /// /// JT808基于tcp的统一下发命令服务 /// - internal interface IJT808UnificationTcpSendService + public interface IJT808UnificationTcpSendService { JT808ResultDto Send(string terminalPhoneNo, byte[] data); } diff --git a/src/JT808.DotNetty.Core/Interfaces/IJT808UnificationUdpSendService.cs b/src/JT808.DotNetty.Core/Interfaces/IJT808UnificationUdpSendService.cs index 722f02d..fffbd94 100644 --- a/src/JT808.DotNetty.Core/Interfaces/IJT808UnificationUdpSendService.cs +++ b/src/JT808.DotNetty.Core/Interfaces/IJT808UnificationUdpSendService.cs @@ -5,7 +5,7 @@ namespace JT808.DotNetty.Core.Interfaces /// /// JT808基于udp的统一下发命令服务 /// - internal interface IJT808UnificationUdpSendService + public interface IJT808UnificationUdpSendService { JT808ResultDto Send(string terminalPhoneNo, byte[] data); } diff --git a/src/JT808.DotNetty.Core/JT808.DotNetty.Core.csproj b/src/JT808.DotNetty.Core/JT808.DotNetty.Core.csproj index 351436a..d0f8873 100644 --- a/src/JT808.DotNetty.Core/JT808.DotNetty.Core.csproj +++ b/src/JT808.DotNetty.Core/JT808.DotNetty.Core.csproj @@ -3,6 +3,18 @@ netstandard2.0 7.1 + Copyright 2018. + SmallChi + JT808.DotNetty.Core + JT808.DotNetty.Core + 基于DotNetty实现的JT808DotNetty的核心库 + 基于DotNetty实现的JT808DotNetty的核心库 + false + https://github.com/SmallChi/JT808DotNetty + https://github.com/SmallChi/JT808DotNetty + https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE + true + 1.0.0 diff --git a/src/JT808.DotNetty.Tcp/JT808.DotNetty.Tcp.csproj b/src/JT808.DotNetty.Tcp/JT808.DotNetty.Tcp.csproj index 0e326c3..b637e79 100644 --- a/src/JT808.DotNetty.Tcp/JT808.DotNetty.Tcp.csproj +++ b/src/JT808.DotNetty.Tcp/JT808.DotNetty.Tcp.csproj @@ -2,6 +2,19 @@ netstandard2.0 + 7.1 + Copyright 2018. + SmallChi + JT808.DotNetty.Tcp + JT808.DotNetty.Tcp + 基于DotNetty实现的JT808DotNetty的Tcp服务 + 基于DotNetty实现的JT808DotNetty的Tcp服务 + false + https://github.com/SmallChi/JT808DotNetty + https://github.com/SmallChi/JT808DotNetty + https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE + true + 1.0.0 diff --git a/src/JT808.DotNetty.Udp/Handlers/JT808UdpServerHandler.cs b/src/JT808.DotNetty.Udp/Handlers/JT808UdpServerHandler.cs index ba170c6..29cc648 100644 --- a/src/JT808.DotNetty.Udp/Handlers/JT808UdpServerHandler.cs +++ b/src/JT808.DotNetty.Udp/Handlers/JT808UdpServerHandler.cs @@ -51,6 +51,11 @@ namespace JT808.DotNetty.Udp.Handlers //解析具体的消息体,具体调用JT808Serializer.Deserialize JT808HeaderPackage jT808HeaderPackage = JT808Serializer.Deserialize(msg.Buffer); jT808UdpAtomicCounterService.MsgSuccessIncrement(); + jT808UdpSessionManager.TryAdd(new JT808UdpSession { + Channel= ctx.Channel, + Sender= msg.Sender, + TerminalPhoneNo= jT808HeaderPackage.Header.TerminalPhoneNo + }); if (logger.IsEnabled(LogLevel.Debug)) { logger.LogDebug("accept package success count<<<" + jT808UdpAtomicCounterService.MsgSuccessCount.ToString()); diff --git a/src/JT808.DotNetty.Udp/JT808.DotNetty.Udp.csproj b/src/JT808.DotNetty.Udp/JT808.DotNetty.Udp.csproj index e04aa62..ca0c59e 100644 --- a/src/JT808.DotNetty.Udp/JT808.DotNetty.Udp.csproj +++ b/src/JT808.DotNetty.Udp/JT808.DotNetty.Udp.csproj @@ -1,8 +1,20 @@ - + netstandard2.0 7.1 + Copyright 2018. + SmallChi + JT808.DotNetty.Udp + JT808.DotNetty.Udp + 基于DotNetty实现的JT808DotNetty的Udp服务 + 基于DotNetty实现的JT808DotNetty的Udp服务 + false + https://github.com/SmallChi/JT808DotNetty + https://github.com/SmallChi/JT808DotNetty + https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE + true + 1.0.0 diff --git a/src/JT808.DotNetty.WebApi/Handlers/JT808MsgIdDefaultWebApiHandler.cs b/src/JT808.DotNetty.WebApi/Handlers/JT808MsgIdDefaultWebApiHandler.cs index 37cefef..952f3ee 100644 --- a/src/JT808.DotNetty.WebApi/Handlers/JT808MsgIdDefaultWebApiHandler.cs +++ b/src/JT808.DotNetty.WebApi/Handlers/JT808MsgIdDefaultWebApiHandler.cs @@ -1,27 +1,236 @@ -using JT808.DotNetty.Core.Handlers; +using JT808.DotNetty.Abstractions.Dtos; +using JT808.DotNetty.Core.Handlers; +using JT808.DotNetty.Core.Interfaces; +using JT808.DotNetty.Core.Metadata; +using JT808.DotNetty.Core.Services; +using Newtonsoft.Json; namespace JT808.DotNetty.WebApi.Handlers { /// /// 默认消息处理业务实现 /// - internal class JT808MsgIdDefaultWebApiHandler : JT808MsgIdHttpHandlerBase + public class JT808MsgIdDefaultWebApiHandler : JT808MsgIdHttpHandlerBase { private const string sessionRoutePrefix = "Session"; - private const string sourcePackagePrefix = "SourcePackage"; - private const string transmitPrefix = "Transmit"; - //1.TCP一套注入 - //2.UDP一套注入 - //3.统一的一套注入 + private readonly JT808TcpAtomicCounterService jT808TcpAtomicCounterService; + + private readonly JT808UdpAtomicCounterService jT808UdpAtomicCounterService; + + private readonly JT808TransmitAddressFilterService jT808TransmitAddressFilterService; + + private readonly IJT808TcpSessionService jT808TcpSessionService; + + private readonly IJT808UnificationTcpSendService jT808UnificationTcpSendService; + + private readonly IJT808UnificationUdpSendService jT808UnificationUdpSendService; + /// + /// TCP一套注入 + /// + /// public JT808MsgIdDefaultWebApiHandler( + IJT808UnificationTcpSendService jT808UnificationTcpSendService, + IJT808TcpSessionService jT808TcpSessionService, + JT808TransmitAddressFilterService jT808TransmitAddressFilterService, + JT808TcpAtomicCounterService jT808TcpAtomicCounterService + ) + { + this.jT808UnificationTcpSendService = jT808UnificationTcpSendService; + this.jT808TcpSessionService = jT808TcpSessionService; + this.jT808TransmitAddressFilterService = jT808TransmitAddressFilterService; + this.jT808TcpAtomicCounterService = jT808TcpAtomicCounterService; + InitTcpRoute(); + } + /// + /// UDP一套注入 + /// + /// + public JT808MsgIdDefaultWebApiHandler( + IJT808UnificationUdpSendService jT808UnificationUdpSendService, + JT808UdpAtomicCounterService jT808UdpAtomicCounterService ) { + this.jT808UnificationUdpSendService = jT808UnificationUdpSendService; + this.jT808UdpAtomicCounterService = jT808UdpAtomicCounterService; + InitUdpRoute(); + } + + /// + /// 统一的一套注入 + /// + /// + /// + public JT808MsgIdDefaultWebApiHandler( + IJT808UnificationTcpSendService jT808UnificationTcpSendService, + IJT808UnificationUdpSendService jT808UnificationUdpSendService, + IJT808TcpSessionService jT808TcpSessionService, + JT808TransmitAddressFilterService jT808TransmitAddressFilterService, + JT808TcpAtomicCounterService jT808TcpAtomicCounterService, + JT808UdpAtomicCounterService jT808UdpAtomicCounterService + ) + { + this.jT808UnificationTcpSendService = jT808UnificationTcpSendService; + this.jT808UnificationUdpSendService = jT808UnificationUdpSendService; + this.jT808TcpSessionService = jT808TcpSessionService; + this.jT808TransmitAddressFilterService = jT808TransmitAddressFilterService; + this.jT808TcpAtomicCounterService = jT808TcpAtomicCounterService; + this.jT808UdpAtomicCounterService = jT808UdpAtomicCounterService; + InitTcpRoute(); + InitUdpRoute(); + } + + /// + /// 会话服务集合 + /// + /// + /// + public JT808HttpResponse GetSessionAll(JT808HttpRequest request) + { + var result = jT808TcpSessionService.GetAll(); + return CreateJT808HttpResponse(result); + } + + /// + /// 会话服务-通过设备终端号移除对应会话 + /// + /// + /// + public JT808HttpResponse RemoveByTerminalPhoneNo(JT808HttpRequest request) + { + if (string.IsNullOrEmpty(request.Json)) + { + return EmptyHttpResponse(); + } + var result = jT808TcpSessionService.RemoveByTerminalPhoneNo(request.Json); + return CreateJT808HttpResponse(result); + } + + /// + /// 添加转发过滤地址 + /// + /// + /// + public JT808HttpResponse AddTransmitAddress(JT808HttpRequest request) + { + if (string.IsNullOrEmpty(request.Json)) + { + return EmptyHttpResponse(); + } + JT808IPAddressDto jT808IPAddressDto = JsonConvert.DeserializeObject(request.Json); + return CreateJT808HttpResponse(jT808TransmitAddressFilterService.Add(jT808IPAddressDto)); + } + + /// + /// 删除转发过滤地址(不能删除在网关服务器配置文件配的地址) + /// + /// + /// + public JT808HttpResponse RemoveTransmitAddress(JT808HttpRequest request) + { + if (string.IsNullOrEmpty(request.Json)) + { + return EmptyHttpResponse(); + } + JT808IPAddressDto jT808IPAddressDto = JsonConvert.DeserializeObject(request.Json); + return CreateJT808HttpResponse(jT808TransmitAddressFilterService.Remove(jT808IPAddressDto)); + } + + /// + /// 获取转发过滤地址信息集合 + /// + /// + /// + public JT808HttpResponse GetTransmitAll(JT808HttpRequest request) + { + return CreateJT808HttpResponse(jT808TransmitAddressFilterService.GetAll()); + } + + /// + /// 获取Tcp包计数器 + /// + /// + /// + public JT808HttpResponse GetTcpAtomicCounter(JT808HttpRequest request) + { + JT808AtomicCounterDto jT808AtomicCounterDto = new JT808AtomicCounterDto(); + jT808AtomicCounterDto.MsgFailCount = jT808TcpAtomicCounterService.MsgFailCount; + jT808AtomicCounterDto.MsgSuccessCount = jT808TcpAtomicCounterService.MsgSuccessCount; + return CreateJT808HttpResponse(new JT808ResultDto + { + Code = JT808ResultCode.Ok, + Data = jT808AtomicCounterDto + }); + } + /// + /// 获取Udp包计数器 + /// + /// + /// + public JT808HttpResponse GetUdpAtomicCounter(JT808HttpRequest request) + { + JT808AtomicCounterDto jT808AtomicCounterDto = new JT808AtomicCounterDto(); + jT808AtomicCounterDto.MsgFailCount = jT808UdpAtomicCounterService.MsgFailCount; + jT808AtomicCounterDto.MsgSuccessCount = jT808UdpAtomicCounterService.MsgSuccessCount; + return CreateJT808HttpResponse(new JT808ResultDto + { + Code = JT808ResultCode.Ok, + Data = jT808AtomicCounterDto + }); + } + + /// + /// 基于Tcp的统一下发信息 + /// + /// + /// + public JT808HttpResponse UnificationTcpSend(JT808HttpRequest request) + { + if (string.IsNullOrEmpty(request.Json)) + { + return EmptyHttpResponse(); + } + JT808UnificationSendRequestDto jT808UnificationSendRequestDto = JsonConvert.DeserializeObject(request.Json); + var result = jT808UnificationTcpSendService.Send(jT808UnificationSendRequestDto.TerminalPhoneNo, jT808UnificationSendRequestDto.Data); + return CreateJT808HttpResponse(result); + } + + /// + /// 基于Udp的统一下发信息 + /// + /// + /// + public JT808HttpResponse UnificationUdpSend(JT808HttpRequest request) + { + if (string.IsNullOrEmpty(request.Json)) + { + return EmptyHttpResponse(); + } + JT808UnificationSendRequestDto jT808UnificationSendRequestDto = JsonConvert.DeserializeObject(request.Json); + var result = jT808UnificationUdpSendService.Send(jT808UnificationSendRequestDto.TerminalPhoneNo, jT808UnificationSendRequestDto.Data); + return CreateJT808HttpResponse(result); + } + + protected virtual void InitTcpRoute() + { + CreateRoute($"{transmitPrefix}/Add", AddTransmitAddress); + CreateRoute($"{transmitPrefix}/Remove", RemoveTransmitAddress); + CreateRoute($"{transmitPrefix}/GetAll", GetTransmitAll); + CreateRoute($"GetTcpAtomicCounter", GetTcpAtomicCounter); + CreateRoute($"{sessionRoutePrefix}/GetAll", GetSessionAll); + CreateRoute($"{sessionRoutePrefix}/RemoveByTerminalPhoneNo", RemoveByTerminalPhoneNo); + CreateRoute($"UnificationTcpSend", UnificationTcpSend); + } + + protected virtual void InitUdpRoute() + { + CreateRoute($"GetUdpAtomicCounter", GetUdpAtomicCounter); + CreateRoute($"UnificationUdpSend", UnificationUdpSend); } } } diff --git a/src/JT808.DotNetty.WebApi/JT808.DotNetty.WebApi.csproj b/src/JT808.DotNetty.WebApi/JT808.DotNetty.WebApi.csproj index ccfddaa..60a8945 100644 --- a/src/JT808.DotNetty.WebApi/JT808.DotNetty.WebApi.csproj +++ b/src/JT808.DotNetty.WebApi/JT808.DotNetty.WebApi.csproj @@ -2,6 +2,19 @@ netstandard2.0 + 7.1 + Copyright 2018. + SmallChi + JT808.DotNetty.WebApi + JT808.DotNetty.WebApi + 基于DotNetty实现的JT808DotNetty的WebApi服务 + 基于DotNetty实现的JT808DotNetty的WebApi服务 + false + https://github.com/SmallChi/JT808DotNetty + https://github.com/SmallChi/JT808DotNetty + https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE + true + 1.0.0 diff --git a/src/JT808.DotNetty.sln b/src/JT808.DotNetty.sln index 7183ebb..79aa084 100644 --- a/src/JT808.DotNetty.sln +++ b/src/JT808.DotNetty.sln @@ -1,12 +1,8 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.28307.168 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.28407.52 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty", "JT808.DotNetty\JT808.DotNetty.csproj", "{80C7F67E-6B7C-4178-8726-ADD3695622DD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.Test", "JT808.DotNetty.Test\JT808.DotNetty.Test.csproj", "{7315D030-16CA-4AC8-B892-720F3D78C651}" -EndProject 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}" @@ -17,13 +13,13 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.Codecs", "JT EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.Core", "JT808.DotNetty.Core\JT808.DotNetty.Core.csproj", "{67C5DC72-0004-48B3-BB5A-9CB7069B4F02}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JT808.DotNetty.Abstractions", "JT808.DotNetty.Abstractions\JT808.DotNetty.Abstractions.csproj", "{4DCF33C0-67C5-4179-AF1E-4E919F9F856D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.Abstractions", "JT808.DotNetty.Abstractions\JT808.DotNetty.Abstractions.csproj", "{4DCF33C0-67C5-4179-AF1E-4E919F9F856D}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{3BD7FF02-8516-4A77-A385-9FDCDD792E22}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JT808.DotNetty.Tcp", "JT808.DotNetty.Tcp\JT808.DotNetty.Tcp.csproj", "{330CD783-5564-4083-ABFC-573CDC369F50}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.Tcp", "JT808.DotNetty.Tcp\JT808.DotNetty.Tcp.csproj", "{330CD783-5564-4083-ABFC-573CDC369F50}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JT808.DotNetty.WebApi", "JT808.DotNetty.WebApi\JT808.DotNetty.WebApi.csproj", "{B783DE53-CE2A-4225-921F-04E5E57B28F3}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.WebApi", "JT808.DotNetty.WebApi\JT808.DotNetty.WebApi.csproj", "{B783DE53-CE2A-4225-921F-04E5E57B28F3}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -31,14 +27,6 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {80C7F67E-6B7C-4178-8726-ADD3695622DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {80C7F67E-6B7C-4178-8726-ADD3695622DD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {80C7F67E-6B7C-4178-8726-ADD3695622DD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {80C7F67E-6B7C-4178-8726-ADD3695622DD}.Release|Any CPU.Build.0 = Release|Any CPU - {7315D030-16CA-4AC8-B892-720F3D78C651}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7315D030-16CA-4AC8-B892-720F3D78C651}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7315D030-16CA-4AC8-B892-720F3D78C651}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7315D030-16CA-4AC8-B892-720F3D78C651}.Release|Any CPU.Build.0 = Release|Any CPU {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 @@ -72,8 +60,6 @@ Global HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {80C7F67E-6B7C-4178-8726-ADD3695622DD} = {B5A80356-5AF6-449F-9D8B-3C1BBB9D2443} - {7315D030-16CA-4AC8-B892-720F3D78C651} = {3BD7FF02-8516-4A77-A385-9FDCDD792E22} {9FCA2EE9-8253-41AA-A64C-9883413864F9} = {B5A80356-5AF6-449F-9D8B-3C1BBB9D2443} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution