From 017e5d1c7bd0a79b4b1253a7d1c89f95c6ad0782 Mon Sep 17 00:00:00 2001 From: "SmallChi(Koike)" <564952747@qq.com> Date: Thu, 3 Sep 2020 18:21:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8=E9=80=9A=E7=94=A8=E7=9A=84?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E5=A4=84=E7=90=86=E7=A8=8B=E5=BA=8F=EF=BC=88?= =?UTF-8?q?=E5=BE=85=E5=AE=8C=E5=96=84=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dtos/JT808UnificationSendRequestDto.cs | 2 +- .../Extensions/JT808SessionExtensions.cs | 13 + .../JT808.Gateway.Abstractions.csproj | 7 + .../JT808MessageHandler.cs | 333 ++++++++++++++++++ .../JT808NormalReplyMessageHandler.cs | 1 - .../JT808.Gateway.ServerBenchmark/Program.cs | 2 +- .../JT808ServerKafkaExtensions.cs | 6 +- .../JT808MsgLoggingExtensions.cs | 2 +- .../JT808ReplyMessageExtensions.cs | 48 +-- .../JT808ReplyMessageHostedService.cs | 46 +-- .../JT808SessionNoticeExtensions.cs | 4 +- .../JT808TrafficServiceExtensions.cs | 4 +- .../JT808TransmitExtensions.cs | 2 +- .../JT808.Gateway.NormalHosting.csproj | 1 + .../JT808.Gateway.NormalHosting/Program.cs | 2 +- .../JT808.Gateway.QueueHosting/Program.cs | 5 +- .../JT808.Gateway.Test/JT808HttpClientTest.cs | 41 ++- .../JT808.Gateway.WebApiClientTool.csproj | 4 +- .../JT808.Gateway.WebApiClientTool.xml | 69 +++- .../JT808HttpClient.cs | 79 ++++- .../JT808HttpClientExtensions.cs | 16 + src/JT808.Gateway.sln | 14 +- .../JT808MsgIdDefaultWebApiHandler.cs | 2 +- src/JT808.Gateway/JT808.Gateway.csproj | 4 + src/JT808.Gateway/JT808GatewayExtensions.cs | 85 +++-- src/JT808.Gateway/JT808TcpServer.cs | 54 +-- src/JT808.Gateway/JT808UdpServer.cs | 41 +-- 27 files changed, 675 insertions(+), 212 deletions(-) create mode 100644 src/JT808.Gateway.Abstractions/JT808MessageHandler.cs diff --git a/src/JT808.Gateway.Abstractions/Dtos/JT808UnificationSendRequestDto.cs b/src/JT808.Gateway.Abstractions/Dtos/JT808UnificationSendRequestDto.cs index 065234b..6ccd8b0 100644 --- a/src/JT808.Gateway.Abstractions/Dtos/JT808UnificationSendRequestDto.cs +++ b/src/JT808.Gateway.Abstractions/Dtos/JT808UnificationSendRequestDto.cs @@ -6,6 +6,6 @@ public class JT808UnificationSendRequestDto { public string TerminalPhoneNo { get; set; } - public string Data { get; set; } + public string HexData { get; set; } } } diff --git a/src/JT808.Gateway.Abstractions/Extensions/JT808SessionExtensions.cs b/src/JT808.Gateway.Abstractions/Extensions/JT808SessionExtensions.cs index 65eecf0..5b7bfd4 100644 --- a/src/JT808.Gateway.Abstractions/Extensions/JT808SessionExtensions.cs +++ b/src/JT808.Gateway.Abstractions/Extensions/JT808SessionExtensions.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Net.Sockets; using System.Text; +using System.Threading.Tasks; namespace JT808.Gateway.Abstractions { @@ -19,5 +20,17 @@ namespace JT808.Gateway.Abstractions await session.Client.SendToAsync(data, SocketFlags.None, session.RemoteEndPoint); } } + + public static void Send(this IJT808Session session, byte[] data) + { + if (session.TransportProtocolType == JT808TransportProtocolType.tcp) + { + session.Client.Send(data, SocketFlags.None); + } + else + { + session.Client.SendTo(data, SocketFlags.None, session.RemoteEndPoint); + } + } } } diff --git a/src/JT808.Gateway.Abstractions/JT808.Gateway.Abstractions.csproj b/src/JT808.Gateway.Abstractions/JT808.Gateway.Abstractions.csproj index 269968f..b356590 100644 --- a/src/JT808.Gateway.Abstractions/JT808.Gateway.Abstractions.csproj +++ b/src/JT808.Gateway.Abstractions/JT808.Gateway.Abstractions.csproj @@ -25,6 +25,13 @@ JT808.Gateway.Abstractions.xml + + + + + + + diff --git a/src/JT808.Gateway.Abstractions/JT808MessageHandler.cs b/src/JT808.Gateway.Abstractions/JT808MessageHandler.cs new file mode 100644 index 0000000..1421a0e --- /dev/null +++ b/src/JT808.Gateway.Abstractions/JT808MessageHandler.cs @@ -0,0 +1,333 @@ +using JT808.Protocol; +using JT808.Protocol.Enums; +using JT808.Protocol.Extensions; +using JT808.Protocol.MessageBody; +using System; +using System.Collections.Generic; +using System.Text; + +namespace JT808.Gateway.Abstractions +{ + /// + /// 通用消息处理程序 + /// + public class JT808MessageHandler + { + protected Dictionary HandlerDict { get; } + + protected delegate byte[] MsgIdMethodDelegate(JT808HeaderPackage package, IJT808Session session); + protected JT808Serializer JT808Serializer { get; } + public JT808MessageHandler(IJT808Config jT808Config) + { + this.JT808Serializer = jT808Config.GetSerializer(); + HandlerDict = new Dictionary { + {JT808MsgId.终端通用应答.ToUInt16Value(), Msg0x0001}, + {JT808MsgId.终端鉴权.ToUInt16Value(), Msg0x0102}, + {JT808MsgId.终端心跳.ToUInt16Value(), Msg0x0002}, + {JT808MsgId.终端注销.ToUInt16Value(), Msg0x0003}, + {JT808MsgId.终端注册.ToUInt16Value(), Msg0x0100}, + {JT808MsgId.位置信息汇报.ToUInt16Value(),Msg0x0200 }, + {JT808MsgId.定位数据批量上传.ToUInt16Value(),Msg0x0704 }, + {JT808MsgId.数据上行透传.ToUInt16Value(),Msg0x0900 }, + {JT808MsgId.查询服务器时间请求.ToUInt16Value(),Msg0x0004 }, + {JT808MsgId.查询终端参数应答.ToUInt16Value(),Msg0x0104 }, + {JT808MsgId.查询终端属性应答.ToUInt16Value(),Msg0x0107 }, + {JT808MsgId.终端升级结果通知.ToUInt16Value(),Msg0x0108 }, + {JT808MsgId.位置信息查询应答.ToUInt16Value(),Msg0x0201 }, + {JT808MsgId.链路检测.ToUInt16Value(),Msg0x8204 }, + {JT808MsgId.车辆控制应答.ToUInt16Value(),Msg0x0500 }, + {JT808MsgId.摄像头立即拍摄命令.ToUInt16Value(),Msg0x8801 }, + {JT808MsgId.多媒体数据上传.ToUInt16Value(),Msg0x0801 }, + {JT808MsgId.多媒体事件信息上传.ToUInt16Value(),Msg0x0800 }, + {JT808MsgId.CAN总线数据上传.ToUInt16Value(),Msg0x0705 }, + }; + } + /// + /// 消息处理 + /// + /// 请求数据 + /// 当前会话 + /// 应答消息数据 + public virtual byte[] Processor(JT808HeaderPackage request, IJT808Session session) + { + if (HandlerDict.TryGetValue(request.Header.MsgId, out var func)) + { + return func(request, session); + } + return default; + //else + //{ + // //处理不了的消息统一回复通用应答 + // return CommonReply(request, session); + //} + } + /// + /// 终端通用应答 + /// 平台无需回复 + /// 实现自己的业务 + /// + /// + /// + public virtual byte[] Msg0x0001(JT808HeaderPackage request, IJT808Session session) + { + return default; + } + /// + /// 平台通用应答 + /// + /// + /// + public virtual byte[] CommonReply(JT808HeaderPackage request, IJT808Session session) + { + if (request.Version == JT808Version.JTT2019) + { + byte[] data = JT808Serializer.Serialize(JT808MsgId.平台通用应答.Create_平台通用应答_2019(request.Header.TerminalPhoneNo, new JT808_0x8001() + { + AckMsgId = request.Header.MsgId, + JT808PlatformResult = JT808PlatformResult.成功, + MsgNum = request.Header.MsgNum + })); + session.Send(data); + return data; + } + else + { + byte[] data = JT808Serializer.Serialize(JT808MsgId.平台通用应答.Create(request.Header.TerminalPhoneNo, new JT808_0x8001() + { + AckMsgId = request.Header.MsgId, + JT808PlatformResult = JT808PlatformResult.成功, + MsgNum = request.Header.MsgNum + })); + session.Send(data); + return data; + } + } + /// + /// 终端心跳 + /// + /// + /// + public virtual byte[] Msg0x0002(JT808HeaderPackage request, IJT808Session session) + { + return CommonReply(request, session); + } + /// + /// 查询服务器时间 + /// 2019版本 + /// + /// + /// + /// + public virtual byte[] Msg0x0004(JT808HeaderPackage request, IJT808Session session) + { + byte[] data = JT808Serializer.Serialize(JT808MsgId.查询服务器时间应答.Create(request.Header.TerminalPhoneNo, new JT808_0x8004() + { + Time=DateTime.Now + })); + session.Send(data); + return data; + } + /// + /// 服务器补传分包请求 + /// + /// + /// + /// + public virtual byte[] Msg0x8003(JT808HeaderPackage request, IJT808Session session) + { + throw new NotImplementedException("0x8003-服务器补传分包请求"); + } + /// + /// 终端补传分包请求 + /// + /// + /// + /// + public virtual byte[] Msg0x0005(JT808HeaderPackage request, IJT808Session session) + { + throw new NotImplementedException("0x0005-终端补传分包请求"); + } + /// + /// 终端注册 + /// + /// + /// + /// + public virtual byte[] Msg0x0100(JT808HeaderPackage request, IJT808Session session) + { + if (request.Version == JT808Version.JTT2019) + { + byte[] data = JT808Serializer.Serialize(JT808MsgId.终端注册应答.Create_终端注册应答_2019(request.Header.TerminalPhoneNo, new JT808_0x8100() + { + Code = "J" + request.Header.TerminalPhoneNo, + JT808TerminalRegisterResult = JT808TerminalRegisterResult.成功, + AckMsgNum = request.Header.MsgNum + })); + session.Send(data); + return data; + } + else + { + byte[] data = JT808Serializer.Serialize(JT808MsgId.终端注册应答.Create(request.Header.TerminalPhoneNo, new JT808_0x8100() + { + Code = "J" + request.Header.TerminalPhoneNo, + JT808TerminalRegisterResult = JT808TerminalRegisterResult.成功, + AckMsgNum = request.Header.MsgNum + })); + session.Send(data); + return data; + } + } + /// + /// 终端注销 + /// + /// + /// + /// + public virtual byte[] Msg0x0003(JT808HeaderPackage request, IJT808Session session) + { + return CommonReply(request, session); + } + /// + /// 终端鉴权 + /// + /// + /// + /// + public virtual byte[] Msg0x0102(JT808HeaderPackage request, IJT808Session session) + { + return CommonReply(request, session); + } + /// + /// 查询终端参数应答 + /// + /// + /// + /// + public virtual byte[] Msg0x0104(JT808HeaderPackage request, IJT808Session session) + { + return CommonReply(request, session); + } + /// + /// 查询终端属性应答 + /// + /// + /// + /// + public virtual byte[] Msg0x0107(JT808HeaderPackage request, IJT808Session session) + { + return CommonReply(request, session); + } + /// + /// 终端升级结果应答 + /// + /// + /// + /// + public virtual byte[] Msg0x0108(JT808HeaderPackage request, IJT808Session session) + { + return CommonReply(request, session); + } + /// + /// 位置信息汇报 + /// + /// + /// + /// + public virtual byte[] Msg0x0200(JT808HeaderPackage request, IJT808Session session) + { + return CommonReply(request, session); + } + /// + /// 位置信息查询应答 + /// + /// + /// + /// + public virtual byte[] Msg0x0201(JT808HeaderPackage request, IJT808Session session) + { + return CommonReply(request, session); + } + /// + /// 链路检测 + /// 2019版本 + /// + /// + /// + /// + public virtual byte[] Msg0x8204(JT808HeaderPackage request, IJT808Session session) + { + return default; + } + /// + /// 车辆控制应答 + /// + /// + /// + /// + public virtual byte[] Msg0x0500(JT808HeaderPackage request, IJT808Session session) + { + return CommonReply(request, session); + } + /// + /// 定位数据批量上传 + /// + /// + /// + /// + public virtual byte[] Msg0x0704(JT808HeaderPackage request, IJT808Session session) + { + return CommonReply(request, session); + } + /// + /// CAN总线数据上传 + /// + /// + /// + /// + public virtual byte[] Msg0x0705(JT808HeaderPackage request, IJT808Session session) + { + return CommonReply(request, session); + } + /// + /// 多媒体事件信息上传 + /// + /// + /// + /// + public virtual byte[] Msg0x0800(JT808HeaderPackage request, IJT808Session session) + { + return CommonReply(request, session); + } + /// + /// 多媒体数据上传 + /// + /// + /// + /// + public virtual byte[] Msg0x0801(JT808HeaderPackage request, IJT808Session session) + { + throw new NotImplementedException("0x8800多媒体数据上传应答"); + } + /// + /// 摄像头立即拍摄命令 + /// + /// + /// + /// + public virtual byte[] Msg0x8801(JT808HeaderPackage request, IJT808Session session) + { + throw new NotImplementedException("0x0805摄像头立即拍摄命令应答"); + } + /// + /// 数据上行透传 + /// + /// + /// + /// + public virtual byte[] Msg0x0900(JT808HeaderPackage request, IJT808Session session) + { + return CommonReply(request, session); + } + } +} diff --git a/src/JT808.Gateway.Abstractions/JT808NormalReplyMessageHandler.cs b/src/JT808.Gateway.Abstractions/JT808NormalReplyMessageHandler.cs index de6d280..fbdfa71 100644 --- a/src/JT808.Gateway.Abstractions/JT808NormalReplyMessageHandler.cs +++ b/src/JT808.Gateway.Abstractions/JT808NormalReplyMessageHandler.cs @@ -59,7 +59,6 @@ namespace JT808.Gateway.Abstractions return CommonReply(request, session); } } - /// /// 终端通用应答 /// 平台无需回复 diff --git a/src/JT808.Gateway.Benchmark/JT808.Gateway.ServerBenchmark/Program.cs b/src/JT808.Gateway.Benchmark/JT808.Gateway.ServerBenchmark/Program.cs index fb0a1d2..ea66a2f 100644 --- a/src/JT808.Gateway.Benchmark/JT808.Gateway.ServerBenchmark/Program.cs +++ b/src/JT808.Gateway.Benchmark/JT808.Gateway.ServerBenchmark/Program.cs @@ -32,7 +32,7 @@ namespace JT808.Gateway.ServerBenchmark services.AddSingleton(); services.AddSingleton(typeof(ILogger<>), typeof(Logger<>)); services.AddJT808Configure() - .AddNormalGateway(hostContext.Configuration) + .AddGateway(hostContext.Configuration) .AddTcp() .AddUdp(); }); diff --git a/src/JT808.Gateway.Kafka/JT808ServerKafkaExtensions.cs b/src/JT808.Gateway.Kafka/JT808ServerKafkaExtensions.cs index d58ba2a..3d9d9b0 100644 --- a/src/JT808.Gateway.Kafka/JT808ServerKafkaExtensions.cs +++ b/src/JT808.Gateway.Kafka/JT808ServerKafkaExtensions.cs @@ -14,7 +14,7 @@ namespace JT808.Gateway.Kafka /// /// GetSection("JT808MsgProducerConfig") /// - public static IJT808QueueGatewayBuilder AddServerKafkaMsgProducer(this IJT808QueueGatewayBuilder jT808GatewayBuilder, IConfiguration configuration) + public static IJT808GatewayBuilder AddServerKafkaMsgProducer(this IJT808GatewayBuilder jT808GatewayBuilder, IConfiguration configuration) { jT808GatewayBuilder.JT808Builder.Services.Configure(configuration.GetSection("JT808MsgProducerConfig")); jT808GatewayBuilder.JT808Builder.Services.Replace(new ServiceDescriptor(typeof(IJT808MsgProducer), typeof(JT808MsgProducer), ServiceLifetime.Singleton)); @@ -26,7 +26,7 @@ namespace JT808.Gateway.Kafka /// /// GetSection("JT808MsgReplyConsumerConfig") /// - public static IJT808QueueGatewayBuilder AddServerKafkaMsgReplyConsumer(this IJT808QueueGatewayBuilder jT808GatewayBuilder, IConfiguration configuration) + public static IJT808GatewayBuilder AddServerKafkaMsgReplyConsumer(this IJT808GatewayBuilder jT808GatewayBuilder, IConfiguration configuration) { jT808GatewayBuilder.JT808Builder.Services.Configure(configuration.GetSection("JT808MsgReplyConsumerConfig")); jT808GatewayBuilder.JT808Builder.Services.Replace(new ServiceDescriptor(typeof(IJT808MsgReplyConsumer), typeof(JT808MsgReplyConsumer), ServiceLifetime.Singleton)); @@ -38,7 +38,7 @@ namespace JT808.Gateway.Kafka /// /// GetSection("JT808SessionProducerConfig") /// - public static IJT808QueueGatewayBuilder AddServerKafkaSessionProducer(this IJT808QueueGatewayBuilder jT808GatewayBuilder, IConfiguration configuration) + public static IJT808GatewayBuilder AddServerKafkaSessionProducer(this IJT808GatewayBuilder jT808GatewayBuilder, IConfiguration configuration) { jT808GatewayBuilder.JT808Builder.Services.Configure(configuration.GetSection("JT808SessionProducerConfig")); jT808GatewayBuilder.JT808Builder.Services.Replace(new ServiceDescriptor(typeof(IJT808SessionProducer), typeof(JT808SessionProducer), ServiceLifetime.Singleton)); diff --git a/src/JT808.Gateway.Services/JT808.Gateway.MsgLogging/JT808MsgLoggingExtensions.cs b/src/JT808.Gateway.Services/JT808.Gateway.MsgLogging/JT808MsgLoggingExtensions.cs index 19e38fd..6b16d52 100644 --- a/src/JT808.Gateway.Services/JT808.Gateway.MsgLogging/JT808MsgLoggingExtensions.cs +++ b/src/JT808.Gateway.Services/JT808.Gateway.MsgLogging/JT808MsgLoggingExtensions.cs @@ -17,7 +17,7 @@ namespace JT808.Gateway.MsgLogging return jT808ClientBuilder; } - public static IJT808NormalGatewayBuilder AddMsgLogging(this IJT808NormalGatewayBuilder jT808NormalGatewayBuilder) + public static IJT808GatewayBuilder AddMsgLogging(this IJT808GatewayBuilder jT808NormalGatewayBuilder) where TJT808MsgLogging : IJT808MsgLogging { jT808NormalGatewayBuilder.JT808Builder.Services.AddSingleton(typeof(IJT808MsgLogging), typeof(TJT808MsgLogging)); diff --git a/src/JT808.Gateway.Services/JT808.Gateway.ReplyMessage/JT808ReplyMessageExtensions.cs b/src/JT808.Gateway.Services/JT808.Gateway.ReplyMessage/JT808ReplyMessageExtensions.cs index 28084fb..77b6f16 100644 --- a/src/JT808.Gateway.Services/JT808.Gateway.ReplyMessage/JT808ReplyMessageExtensions.cs +++ b/src/JT808.Gateway.Services/JT808.Gateway.ReplyMessage/JT808ReplyMessageExtensions.cs @@ -9,29 +9,29 @@ namespace JT808.Gateway.ReplyMessage { public static class JT808ReplyMessageExtensions { - /// - /// 消息应答服务(不同的消费者实例) - /// - /// - /// - public static IJT808ClientBuilder AddReplyMessage(this IJT808ClientBuilder jT808ClientBuilder) - { - jT808ClientBuilder.JT808Builder.Services.AddSingleton(); - jT808ClientBuilder.JT808Builder.Services.AddHostedService(); - return jT808ClientBuilder; - } - /// - /// 消息应答服务(不同的消费者实例) - /// - /// 自定义消息回复服务 - /// - /// - public static IJT808ClientBuilder AddReplyMessage(this IJT808ClientBuilder jT808ClientBuilder) - where TReplyMessageHandler : JT808QueueReplyMessageHandler - { - jT808ClientBuilder.JT808Builder.Services.AddSingleton(); - jT808ClientBuilder.JT808Builder.Services.AddHostedService(); - return jT808ClientBuilder; - } + ///// + ///// 消息应答服务(不同的消费者实例) + ///// + ///// + ///// + //public static IJT808ClientBuilder AddReplyMessage(this IJT808ClientBuilder jT808ClientBuilder) + //{ + // jT808ClientBuilder.JT808Builder.Services.AddSingleton(); + // jT808ClientBuilder.JT808Builder.Services.AddHostedService(); + // return jT808ClientBuilder; + //} + ///// + ///// 消息应答服务(不同的消费者实例) + ///// + ///// 自定义消息回复服务 + ///// + ///// + //public static IJT808ClientBuilder AddReplyMessage(this IJT808ClientBuilder jT808ClientBuilder) + // where TReplyMessageHandler : JT808QueueReplyMessageHandler + //{ + // jT808ClientBuilder.JT808Builder.Services.AddSingleton(); + // jT808ClientBuilder.JT808Builder.Services.AddHostedService(); + // return jT808ClientBuilder; + //} } } diff --git a/src/JT808.Gateway.Services/JT808.Gateway.ReplyMessage/JT808ReplyMessageHostedService.cs b/src/JT808.Gateway.Services/JT808.Gateway.ReplyMessage/JT808ReplyMessageHostedService.cs index dfcdef3..cf5be45 100644 --- a/src/JT808.Gateway.Services/JT808.Gateway.ReplyMessage/JT808ReplyMessageHostedService.cs +++ b/src/JT808.Gateway.Services/JT808.Gateway.ReplyMessage/JT808ReplyMessageHostedService.cs @@ -5,30 +5,30 @@ using JT808.Gateway.Abstractions; namespace JT808.Gateway.ReplyMessage { - public class JT808ReplyMessageHostedService : IHostedService - { - private readonly IJT808MsgConsumer jT808MsgConsumer; - private readonly JT808QueueReplyMessageHandler jT808ReplyMessageHandler; + //public class JT808ReplyMessageHostedService : IHostedService + //{ + // //private readonly IJT808MsgConsumer jT808MsgConsumer; + // //private readonly JT808QueueReplyMessageHandler jT808ReplyMessageHandler; - public JT808ReplyMessageHostedService( - JT808QueueReplyMessageHandler jT808ReplyMessageHandler, - IJT808MsgConsumer jT808MsgConsumer) - { - this.jT808MsgConsumer = jT808MsgConsumer; - this.jT808ReplyMessageHandler = jT808ReplyMessageHandler; - } + // //public JT808ReplyMessageHostedService( + // // JT808QueueReplyMessageHandler jT808ReplyMessageHandler, + // // IJT808MsgConsumer jT808MsgConsumer) + // //{ + // // this.jT808MsgConsumer = jT808MsgConsumer; + // // this.jT808ReplyMessageHandler = jT808ReplyMessageHandler; + // //} - public Task StartAsync(CancellationToken cancellationToken) - { - jT808MsgConsumer.Subscribe(); - jT808MsgConsumer.OnMessage(jT808ReplyMessageHandler.Processor); - return Task.CompletedTask; - } + // //public Task StartAsync(CancellationToken cancellationToken) + // //{ + // // jT808MsgConsumer.Subscribe(); + // // jT808MsgConsumer.OnMessage(jT808ReplyMessageHandler.Processor); + // // return Task.CompletedTask; + // //} - public Task StopAsync(CancellationToken cancellationToken) - { - jT808MsgConsumer.Unsubscribe(); - return Task.CompletedTask; - } - } + // //public Task StopAsync(CancellationToken cancellationToken) + // //{ + // // jT808MsgConsumer.Unsubscribe(); + // // return Task.CompletedTask; + // //} + //} } diff --git a/src/JT808.Gateway.Services/JT808.Gateway.SessionNotice/JT808SessionNoticeExtensions.cs b/src/JT808.Gateway.Services/JT808.Gateway.SessionNotice/JT808SessionNoticeExtensions.cs index 945286b..9d8293b 100644 --- a/src/JT808.Gateway.Services/JT808.Gateway.SessionNotice/JT808SessionNoticeExtensions.cs +++ b/src/JT808.Gateway.Services/JT808.Gateway.SessionNotice/JT808SessionNoticeExtensions.cs @@ -40,7 +40,7 @@ namespace JT808.Gateway.SessionNotice /// /// /// - public static IJT808NormalGatewayBuilder AddSessionNotice(this IJT808NormalGatewayBuilder jT808NormalGatewayBuilder) + public static IJT808GatewayBuilder AddSessionNotice(this IJT808GatewayBuilder jT808NormalGatewayBuilder) { jT808NormalGatewayBuilder.JT808Builder.Services.AddSingleton(); jT808NormalGatewayBuilder.JT808Builder.Services.AddHostedService(); @@ -53,7 +53,7 @@ namespace JT808.Gateway.SessionNotice /// 自定义会话通知服务 /// /// - public static IJT808NormalGatewayBuilder AddSessionNotice(this IJT808NormalGatewayBuilder jT808NormalGatewayBuilder) + public static IJT808GatewayBuilder AddSessionNotice(this IJT808GatewayBuilder jT808NormalGatewayBuilder) where TSessionNoticeService : JT808SessionNoticeService { jT808NormalGatewayBuilder.JT808Builder.Services.AddSingleton(); diff --git a/src/JT808.Gateway.Services/JT808.Gateway.Traffic/JT808TrafficServiceExtensions.cs b/src/JT808.Gateway.Services/JT808.Gateway.Traffic/JT808TrafficServiceExtensions.cs index 7ea99b5..16e89ad 100644 --- a/src/JT808.Gateway.Services/JT808.Gateway.Traffic/JT808TrafficServiceExtensions.cs +++ b/src/JT808.Gateway.Services/JT808.Gateway.Traffic/JT808TrafficServiceExtensions.cs @@ -38,7 +38,7 @@ namespace JT808.Gateway.Traffic /// /// /// - public static IJT808NormalGatewayBuilder AddTraffic(this IJT808NormalGatewayBuilder jT808NormalGatewayBuilder) + public static IJT808GatewayBuilder AddTraffic(this IJT808GatewayBuilder jT808NormalGatewayBuilder) where TIJT808Traffic : IJT808Traffic { jT808NormalGatewayBuilder.JT808Builder.Services.AddSingleton(typeof(IJT808Traffic), typeof(TIJT808Traffic)); @@ -51,7 +51,7 @@ namespace JT808.Gateway.Traffic /// /// /// - public static IJT808NormalGatewayBuilder AddTraffic(this IJT808NormalGatewayBuilder jT808NormalGatewayBuilder) + public static IJT808GatewayBuilder AddTraffic(this IJT808GatewayBuilder jT808NormalGatewayBuilder) { jT808NormalGatewayBuilder.JT808Builder.Services.AddSingleton(typeof(IJT808Traffic), typeof(JT808TrafficDefault)); return jT808NormalGatewayBuilder; diff --git a/src/JT808.Gateway.Services/JT808.Gateway.Transmit/JT808TransmitExtensions.cs b/src/JT808.Gateway.Services/JT808.Gateway.Transmit/JT808TransmitExtensions.cs index f06c214..f4d7cce 100644 --- a/src/JT808.Gateway.Services/JT808.Gateway.Transmit/JT808TransmitExtensions.cs +++ b/src/JT808.Gateway.Services/JT808.Gateway.Transmit/JT808TransmitExtensions.cs @@ -31,7 +31,7 @@ namespace JT808.Gateway.Transmit /// /// /// - public static IJT808NormalGatewayBuilder AddTransmit(this IJT808NormalGatewayBuilder jT808NormalGatewayBuilder, IConfiguration configuration) + public static IJT808GatewayBuilder AddTransmit(this IJT808GatewayBuilder jT808NormalGatewayBuilder, IConfiguration configuration) { jT808NormalGatewayBuilder.JT808Builder.Services.Configure(configuration.GetSection("RemoteServerOptions")); jT808NormalGatewayBuilder.JT808Builder.Services.AddSingleton(); diff --git a/src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/JT808.Gateway.NormalHosting.csproj b/src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/JT808.Gateway.NormalHosting.csproj index d338923..623e7c3 100644 --- a/src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/JT808.Gateway.NormalHosting.csproj +++ b/src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/JT808.Gateway.NormalHosting.csproj @@ -6,6 +6,7 @@ + diff --git a/src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/Program.cs b/src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/Program.cs index 8d1b064..3d017d4 100644 --- a/src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/Program.cs +++ b/src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/Program.cs @@ -52,7 +52,7 @@ namespace JT808.Gateway.NormalHosting //// options.TcpPort = 808; //// options.UdpPort = 808; ////}) - .AddNormalGateway(hostContext.Configuration) + .AddGateway(hostContext.Configuration) //.ReplaceNormalReplyMessageHandler() //.AddMsgLogging() //.AddTraffic() diff --git a/src/JT808.Gateway.Tests/JT808.Gateway.QueueHosting/Program.cs b/src/JT808.Gateway.Tests/JT808.Gateway.QueueHosting/Program.cs index a9e3e58..da7c251 100644 --- a/src/JT808.Gateway.Tests/JT808.Gateway.QueueHosting/Program.cs +++ b/src/JT808.Gateway.Tests/JT808.Gateway.QueueHosting/Program.cs @@ -46,7 +46,7 @@ namespace JT808.Gateway.QueueHosting // options.TcpPort = 808; // options.UdpPort = 808; //}) - .AddQueueGateway(hostContext.Configuration) + .AddGateway(hostContext.Configuration) .AddServerKafkaMsgProducer(hostContext.Configuration) .AddServerKafkaSessionProducer(hostContext.Configuration) .AddServerKafkaMsgReplyConsumer(hostContext.Configuration) @@ -61,14 +61,13 @@ namespace JT808.Gateway.QueueHosting //添加消息应答服务 .AddMsgReplyProducer(hostContext.Configuration) //添加消息应答处理 - .AddReplyMessage() + //.AddReplyMessage() ; //grpc客户端调用 //services.AddHostedService(); //客户端测试 services.AddHostedService(); }); - await serverHostBuilder.RunConsoleAsync(); } } diff --git a/src/JT808.Gateway.Tests/JT808.Gateway.Test/JT808HttpClientTest.cs b/src/JT808.Gateway.Tests/JT808.Gateway.Test/JT808HttpClientTest.cs index 7bd298c..5ebb2c9 100644 --- a/src/JT808.Gateway.Tests/JT808.Gateway.Test/JT808HttpClientTest.cs +++ b/src/JT808.Gateway.Tests/JT808.Gateway.Test/JT808HttpClientTest.cs @@ -30,8 +30,7 @@ namespace JT808.Gateway.Test Assert.Equal("123456", token); Assert.Equal("http://localhost/", uri); serviceDescriptors.AddJT808WebApiClientTool(builder.Build()); - } - + } [Fact(DisplayName = "使用postman测试")] public void Test2() { @@ -43,8 +42,42 @@ namespace JT808.Gateway.Test //http://127.0.0.1:828/jt808api/Tcp/Session/RemoveByTerminalPhoneNo //123456789 ///http://127.0.0.1:828/jt808api/UnificationSend - //{"TerminalPhoneNo":"123456789","Data":"7e 01 02 7e"} - //{"TerminalPhoneNo":"123456789","Data":"7e01027e"} + //{"TerminalPhoneNo":"123456789","HexData":"7e 01 02 7e"} + //{"TerminalPhoneNo":"123456789","HexData":"7e01027e"} + //UDP + //http://127.0.0.1:828/jt808api/Udp/Session/GetAll + //http://127.0.0.1:828/jt808api/Udp/Session/RemoveUdpByTerminalPhoneNo + //123456789 + //http://127.0.0.1:828/jt808api/Udp/Session/QueryUdpSessionByTerminalPhoneNo } + + [Fact] + public void Test3() + { + IServiceCollection serviceDescriptors = new ServiceCollection(); + serviceDescriptors.AddSingleton(); + + IServiceProvider aa = serviceDescriptors.BuildServiceProvider(); + IServiceCollection sc= aa.GetRequiredService(); + sc.AddSingleton(); + + IServiceProvider aa1 = serviceDescriptors.BuildServiceProvider(); + B b = aa.GetRequiredService(); + } + } + + public class A + { + + } + + public class B + { + + } + + public class C + { + } } diff --git a/src/JT808.Gateway.WebApiClientTool/JT808.Gateway.WebApiClientTool.csproj b/src/JT808.Gateway.WebApiClientTool/JT808.Gateway.WebApiClientTool.csproj index 9f9ae3b..f38f02d 100644 --- a/src/JT808.Gateway.WebApiClientTool/JT808.Gateway.WebApiClientTool.csproj +++ b/src/JT808.Gateway.WebApiClientTool/JT808.Gateway.WebApiClientTool.csproj @@ -16,8 +16,8 @@ true JT808.Gateway.WebApiClientTool JT808.Gateway.WebApiClientTool - 基于Pipeline的WebApiClient客户端调用工具 - 基于Pipeline的WebApiClient客户端调用工具 + JT808WebApiClient客户端调用工具 + JT808WebApiClient客户端调用工具 JT808.Gateway.WebApiClientTool.xml diff --git a/src/JT808.Gateway.WebApiClientTool/JT808.Gateway.WebApiClientTool.xml b/src/JT808.Gateway.WebApiClientTool/JT808.Gateway.WebApiClientTool.xml index 5fca67f..ed3caba 100644 --- a/src/JT808.Gateway.WebApiClientTool/JT808.Gateway.WebApiClientTool.xml +++ b/src/JT808.Gateway.WebApiClientTool/JT808.Gateway.WebApiClientTool.xml @@ -4,24 +4,47 @@ JT808.Gateway.WebApiClientTool + + + + + + + + + + + + + + + + + + + 统一下发信息 + + + + 会话服务集合 - + - 会话服务-通过设备终端号移除对应会话 + 会话服务-通过设备终端号查询对应会话信息 - + - 统一下发信息 + 会话服务-通过设备终端号移除对应会话 - + @@ -30,5 +53,41 @@ + + + 会话服务-通过设备终端号查询对应会话信息 + + + + + + + 会话服务-通过设备终端号移除对应会话 + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/JT808.Gateway.WebApiClientTool/JT808HttpClient.cs b/src/JT808.Gateway.WebApiClientTool/JT808HttpClient.cs index ee2c135..2b6e609 100644 --- a/src/JT808.Gateway.WebApiClientTool/JT808HttpClient.cs +++ b/src/JT808.Gateway.WebApiClientTool/JT808HttpClient.cs @@ -10,14 +10,41 @@ using System.Threading.Tasks; namespace JT808.Gateway.WebApiClientTool { + /// + /// + /// public class JT808HttpClient { - //todo:其余接口待接入 + /// + /// + /// public HttpClient HttpClient { get; } + + /// + /// + /// + /// public JT808HttpClient(HttpClient httpClient) { HttpClient = httpClient; } + + /// + /// 统一下发信息 + /// + /// + /// + public async ValueTask> UnificationSend(JT808UnificationSendRequestDto jT808UnificationSendRequestDto) + { + var request = new HttpRequestMessage(HttpMethod.Post, JT808GatewayConstants.JT808WebApiRouteTable.UnificationSend); + request.Content = new StringContent(JsonSerializer.Serialize(jT808UnificationSendRequestDto)); + var response = await HttpClient.SendAsync(request); + response.EnsureSuccessStatusCode(); + var data = await response.Content.ReadAsStreamAsync(); + var value = await JsonSerializer.DeserializeAsync>(data); + return value; + } + /// /// 会话服务集合 /// @@ -33,30 +60,30 @@ namespace JT808.Gateway.WebApiClientTool } /// - /// 会话服务-通过设备终端号移除对应会话 + /// 会话服务-通过设备终端号查询对应会话信息 /// /// /// - public async ValueTask> RemoveByTerminalPhoneNo(string terminalPhoneNo) + public async ValueTask> QueryTcpSessionByTerminalPhoneNo(string terminalPhoneNo) { - var request = new HttpRequestMessage(HttpMethod.Post, JT808GatewayConstants.JT808WebApiRouteTable.SessionRemoveByTerminalPhoneNo); + var request = new HttpRequestMessage(HttpMethod.Post, JT808GatewayConstants.JT808WebApiRouteTable.QueryTcpSessionByTerminalPhoneNo); request.Content = new StringContent(terminalPhoneNo); var response = await HttpClient.SendAsync(request); response.EnsureSuccessStatusCode(); var data = await response.Content.ReadAsStreamAsync(); - var value = await JsonSerializer.DeserializeAsync>(data); + var value = await JsonSerializer.DeserializeAsync>(data); return value; } /// - /// 统一下发信息 + /// 会话服务-通过设备终端号移除对应会话 /// - /// + /// /// - public async ValueTask> UnificationSend(JT808UnificationSendRequestDto jT808UnificationSendRequestDto) + public async ValueTask> RemoveTcpByTerminalPhoneNo(string terminalPhoneNo) { - var request = new HttpRequestMessage(HttpMethod.Post, JT808GatewayConstants.JT808WebApiRouteTable.UnificationSend); - request.Content = new StringContent(JsonSerializer.Serialize(jT808UnificationSendRequestDto)); + var request = new HttpRequestMessage(HttpMethod.Post, JT808GatewayConstants.JT808WebApiRouteTable.SessionRemoveByTerminalPhoneNo); + request.Content = new StringContent(terminalPhoneNo); var response = await HttpClient.SendAsync(request); response.EnsureSuccessStatusCode(); var data = await response.Content.ReadAsStreamAsync(); @@ -77,5 +104,37 @@ namespace JT808.Gateway.WebApiClientTool var value = await JsonSerializer.DeserializeAsync>>(data); return value; } + + /// + /// 会话服务-通过设备终端号查询对应会话信息 + /// + /// + /// + public async ValueTask> QueryUdpSessionByTerminalPhoneNo(string terminalPhoneNo) + { + var request = new HttpRequestMessage(HttpMethod.Post, JT808GatewayConstants.JT808WebApiRouteTable.QueryUdpSessionByTerminalPhoneNo); + request.Content = new StringContent(terminalPhoneNo); + var response = await HttpClient.SendAsync(request); + response.EnsureSuccessStatusCode(); + var data = await response.Content.ReadAsStreamAsync(); + var value = await JsonSerializer.DeserializeAsync>(data); + return value; + } + + /// + /// 会话服务-通过设备终端号移除对应会话 + /// + /// + /// + public async ValueTask> RemoveUdpByTerminalPhoneNo(string terminalPhoneNo) + { + var request = new HttpRequestMessage(HttpMethod.Post, JT808GatewayConstants.JT808WebApiRouteTable.RemoveUdpByTerminalPhoneNo); + request.Content = new StringContent(terminalPhoneNo); + var response = await HttpClient.SendAsync(request); + response.EnsureSuccessStatusCode(); + var data = await response.Content.ReadAsStreamAsync(); + var value = await JsonSerializer.DeserializeAsync>(data); + return value; + } } } diff --git a/src/JT808.Gateway.WebApiClientTool/JT808HttpClientExtensions.cs b/src/JT808.Gateway.WebApiClientTool/JT808HttpClientExtensions.cs index efee4ed..09df102 100644 --- a/src/JT808.Gateway.WebApiClientTool/JT808HttpClientExtensions.cs +++ b/src/JT808.Gateway.WebApiClientTool/JT808HttpClientExtensions.cs @@ -6,8 +6,18 @@ using System.Text; namespace JT808.Gateway.WebApiClientTool { + /// + /// + /// public static class JT808HttpClientExtensions { + /// + /// + /// + /// + /// + /// + /// public static IServiceCollection AddJT808WebApiClientTool(this IServiceCollection serviceDescriptors, Uri webapiUri,string token) { serviceDescriptors.AddHttpClient("JT808WebApiClientTool", c => @@ -20,6 +30,12 @@ namespace JT808.Gateway.WebApiClientTool return serviceDescriptors; } + /// + /// + /// + /// + /// + /// public static IServiceCollection AddJT808WebApiClientTool(this IServiceCollection serviceDescriptors, IConfiguration configuration) { serviceDescriptors.AddHttpClient("JT808WebApiClientTool", c => diff --git a/src/JT808.Gateway.sln b/src/JT808.Gateway.sln index bf58e6c..4a366d7 100644 --- a/src/JT808.Gateway.sln +++ b/src/JT808.Gateway.sln @@ -17,8 +17,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.MsgLogging", EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.SessionNotice", "JT808.Gateway.Services\JT808.Gateway.SessionNotice\JT808.Gateway.SessionNotice.csproj", "{1CB84599-5F56-4461-A451-DF16E3854AB9}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.ReplyMessage", "JT808.Gateway.Services\JT808.Gateway.ReplyMessage\JT808.Gateway.ReplyMessage.csproj", "{604BB5CF-9ED1-4D78-9328-59436E2B4EB4}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.Transmit", "JT808.Gateway.Services\JT808.Gateway.Transmit\JT808.Gateway.Transmit.csproj", "{598E445A-AF2E-42F0-98F4-18EC22E473FC}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.Client", "JT808.Gateway.Client\JT808.Gateway.Client.csproj", "{AC3070AC-A938-4213-A562-C079BB4A3F9E}" @@ -41,6 +39,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.Traffic", "JT EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.WebApiClientTool", "JT808.Gateway.WebApiClientTool\JT808.Gateway.WebApiClientTool.csproj", "{479DFD02-4777-4DC2-9E2E-8EA33BFB36C9}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.ReplyMessage", "JT808.Gateway.Services\JT808.Gateway.ReplyMessage\JT808.Gateway.ReplyMessage.csproj", "{886D0A3F-C974-442B-9820-F1C4C04EAAB6}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -71,10 +71,6 @@ Global {1CB84599-5F56-4461-A451-DF16E3854AB9}.Debug|Any CPU.Build.0 = Debug|Any CPU {1CB84599-5F56-4461-A451-DF16E3854AB9}.Release|Any CPU.ActiveCfg = Release|Any CPU {1CB84599-5F56-4461-A451-DF16E3854AB9}.Release|Any CPU.Build.0 = Release|Any CPU - {604BB5CF-9ED1-4D78-9328-59436E2B4EB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {604BB5CF-9ED1-4D78-9328-59436E2B4EB4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {604BB5CF-9ED1-4D78-9328-59436E2B4EB4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {604BB5CF-9ED1-4D78-9328-59436E2B4EB4}.Release|Any CPU.Build.0 = Release|Any CPU {598E445A-AF2E-42F0-98F4-18EC22E473FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {598E445A-AF2E-42F0-98F4-18EC22E473FC}.Debug|Any CPU.Build.0 = Debug|Any CPU {598E445A-AF2E-42F0-98F4-18EC22E473FC}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -111,6 +107,10 @@ Global {479DFD02-4777-4DC2-9E2E-8EA33BFB36C9}.Debug|Any CPU.Build.0 = Debug|Any CPU {479DFD02-4777-4DC2-9E2E-8EA33BFB36C9}.Release|Any CPU.ActiveCfg = Release|Any CPU {479DFD02-4777-4DC2-9E2E-8EA33BFB36C9}.Release|Any CPU.Build.0 = Release|Any CPU + {886D0A3F-C974-442B-9820-F1C4C04EAAB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {886D0A3F-C974-442B-9820-F1C4C04EAAB6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {886D0A3F-C974-442B-9820-F1C4C04EAAB6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {886D0A3F-C974-442B-9820-F1C4C04EAAB6}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -119,7 +119,6 @@ Global {D62E3054-6924-4F1A-9BEF-E52B191F16B6} = {3EF8490D-C993-49D8-8A3D-493B7F259D70} {A242A839-4F00-4434-A7E8-7E3BEBA5B75C} = {3EF8490D-C993-49D8-8A3D-493B7F259D70} {1CB84599-5F56-4461-A451-DF16E3854AB9} = {3EF8490D-C993-49D8-8A3D-493B7F259D70} - {604BB5CF-9ED1-4D78-9328-59436E2B4EB4} = {3EF8490D-C993-49D8-8A3D-493B7F259D70} {598E445A-AF2E-42F0-98F4-18EC22E473FC} = {3EF8490D-C993-49D8-8A3D-493B7F259D70} {E3DC260E-0B55-4993-B051-402E44D4E883} = {7CBAACEE-19BF-499A-8C41-36A1324D45E9} {22368AAD-A1F3-446B-B68F-98A0933BF1F6} = {7CBAACEE-19BF-499A-8C41-36A1324D45E9} @@ -127,6 +126,7 @@ Global {E34C6B7D-A48B-4871-895C-07AC12F959D3} = {6FAEC008-93CB-4730-8C58-D31FFD342C4F} {AF0C529A-D3CA-4FE4-93B4-735D0934EBEF} = {6FAEC008-93CB-4730-8C58-D31FFD342C4F} {E5A0BFB6-4345-4592-A2B1-E3CB1FA423AE} = {3EF8490D-C993-49D8-8A3D-493B7F259D70} + {886D0A3F-C974-442B-9820-F1C4C04EAAB6} = {3EF8490D-C993-49D8-8A3D-493B7F259D70} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {AA9303A7-6FB3-4572-88AA-3302E85330D1} diff --git a/src/JT808.Gateway/Handlers/JT808MsgIdDefaultWebApiHandler.cs b/src/JT808.Gateway/Handlers/JT808MsgIdDefaultWebApiHandler.cs index 3652cdf..779824e 100644 --- a/src/JT808.Gateway/Handlers/JT808MsgIdDefaultWebApiHandler.cs +++ b/src/JT808.Gateway/Handlers/JT808MsgIdDefaultWebApiHandler.cs @@ -225,7 +225,7 @@ namespace JT808.Gateway.Handlers try { JT808UnificationSendRequestDto jT808UnificationSendRequestDto = JsonSerializer.Deserialize(json); - resultDto.Data = JT808SessionManager.TrySendByTerminalPhoneNoAsync(jT808UnificationSendRequestDto.TerminalPhoneNo, jT808UnificationSendRequestDto.Data.ToHexBytes()) + resultDto.Data = JT808SessionManager.TrySendByTerminalPhoneNoAsync(jT808UnificationSendRequestDto.TerminalPhoneNo, jT808UnificationSendRequestDto.HexData.ToHexBytes()) .GetAwaiter() .GetResult(); resultDto.Code = JT808ResultCode.Ok; diff --git a/src/JT808.Gateway/JT808.Gateway.csproj b/src/JT808.Gateway/JT808.Gateway.csproj index 419fda3..09ada4d 100644 --- a/src/JT808.Gateway/JT808.Gateway.csproj +++ b/src/JT808.Gateway/JT808.Gateway.csproj @@ -19,6 +19,10 @@ JT808.Gateway $(JT808GatewayPackageVersion) + + + + diff --git a/src/JT808.Gateway/JT808GatewayExtensions.cs b/src/JT808.Gateway/JT808GatewayExtensions.cs index 2be0b6c..baee533 100644 --- a/src/JT808.Gateway/JT808GatewayExtensions.cs +++ b/src/JT808.Gateway/JT808GatewayExtensions.cs @@ -1,7 +1,6 @@ using JT808.Gateway.Abstractions; using JT808.Gateway.Authorization; using JT808.Gateway.Configurations; -using JT808.Gateway.Enums; using JT808.Gateway.Handlers; using JT808.Gateway.Internal; using JT808.Gateway.Services; @@ -19,47 +18,63 @@ namespace JT808.Gateway { public static partial class JT808GatewayExtensions { - public static IJT808QueueGatewayBuilder AddQueueGateway(this IJT808Builder jT808Builder, Action config) - { - IJT808QueueGatewayBuilder server = new JT808QueueGatewayBuilderDefault(jT808Builder); - server.JT808Builder.Services.Configure(config); - server.AddJT808Core(); - server.JT808Builder.Services.AddHostedService(); - return server; - } + //public static IJT808QueueGatewayBuilder AddQueueGateway(this IJT808Builder jT808Builder, Action config) + //{ + // IJT808QueueGatewayBuilder server = new JT808QueueGatewayBuilderDefault(jT808Builder); + // server.JT808Builder.Services.Configure(config); + // server.AddJT808Core(); + // server.JT808Builder.Services.AddHostedService(); + // return server; + //} - public static IJT808NormalGatewayBuilder AddNormalGateway(this IJT808Builder jT808Builder, Action config) - { - IJT808NormalGatewayBuilder server = new JT808NormalGatewayBuilderDefault(jT808Builder); - server.JT808Builder.Services.AddSingleton(); - server.JT808Builder.Services.Configure(config); - server.AddJT808Core(); - return server; - } + //public static IJT808NormalGatewayBuilder AddNormalGateway(this IJT808Builder jT808Builder, Action config) + //{ + // IJT808NormalGatewayBuilder server = new JT808NormalGatewayBuilderDefault(jT808Builder); + // server.JT808Builder.Services.AddSingleton(); + // server.JT808Builder.Services.Configure(config); + // server.AddJT808Core(); + // return server; + //} - public static IJT808QueueGatewayBuilder AddQueueGateway(this IJT808Builder jT808Builder, IConfiguration configuration) - { - IJT808QueueGatewayBuilder server = new JT808QueueGatewayBuilderDefault(jT808Builder); - server.JT808Builder.Services.Configure(configuration.GetSection("JT808Configuration")); - server.AddJT808Core(); - server.JT808Builder.Services.AddHostedService(); - return server; - } + //public static IJT808QueueGatewayBuilder AddQueueGateway(this IJT808Builder jT808Builder, IConfiguration configuration) + //{ + // IJT808QueueGatewayBuilder server = new JT808QueueGatewayBuilderDefault(jT808Builder); + // server.JT808Builder.Services.Configure(configuration.GetSection("JT808Configuration")); + // server.AddJT808Core(); + // server.JT808Builder.Services.AddHostedService(); + // return server; + //} + + //public static IJT808NormalGatewayBuilder AddNormalGateway(this IJT808Builder jT808Builder, IConfiguration configuration) + //{ + // IJT808NormalGatewayBuilder server = new JT808NormalGatewayBuilderDefault(jT808Builder); + // server.JT808Builder.Services.AddSingleton(); + // server.JT808Builder.Services.Configure(configuration.GetSection("JT808Configuration")); + // server.AddJT808Core(); + // return server; + //} - public static IJT808NormalGatewayBuilder AddNormalGateway(this IJT808Builder jT808Builder, IConfiguration configuration) + //public static IJT808NormalGatewayBuilder ReplaceNormalReplyMessageHandler(this IJT808NormalGatewayBuilder config) + // where TJT808NormalReplyMessageHandler : JT808NormalReplyMessageHandler + //{ + // config.JT808Builder.Services.Replace(new ServiceDescriptor(typeof(JT808NormalReplyMessageHandler),typeof(TJT808NormalReplyMessageHandler), ServiceLifetime.Singleton)); + // return config; + //} + + public static IJT808GatewayBuilder AddGateway(this IJT808Builder jT808Builder, Action config) { - IJT808NormalGatewayBuilder server = new JT808NormalGatewayBuilderDefault(jT808Builder); - server.JT808Builder.Services.AddSingleton(); - server.JT808Builder.Services.Configure(configuration.GetSection("JT808Configuration")); - server.AddJT808Core(); - return server; + JT808GatewayBuilderDefault jT808GatewayBuilderDefault = new JT808GatewayBuilderDefault(jT808Builder); + jT808GatewayBuilderDefault.JT808Builder.Services.Configure(config); + jT808GatewayBuilderDefault.AddJT808Core(); + return jT808GatewayBuilderDefault; } - public static IJT808NormalGatewayBuilder ReplaceNormalReplyMessageHandler(this IJT808NormalGatewayBuilder config) - where TJT808NormalReplyMessageHandler : JT808NormalReplyMessageHandler + public static IJT808GatewayBuilder AddGateway(this IJT808Builder jT808Builder, IConfiguration configuration) { - config.JT808Builder.Services.Replace(new ServiceDescriptor(typeof(JT808NormalReplyMessageHandler),typeof(TJT808NormalReplyMessageHandler), ServiceLifetime.Singleton)); - return config; + JT808GatewayBuilderDefault jT808GatewayBuilderDefault = new JT808GatewayBuilderDefault(jT808Builder); + jT808GatewayBuilderDefault.JT808Builder.Services.Configure(configuration.GetSection("JT808Configuration")); + jT808GatewayBuilderDefault.AddJT808Core(); + return jT808GatewayBuilderDefault; } public static IJT808GatewayBuilder AddTcp(this IJT808GatewayBuilder config) diff --git a/src/JT808.Gateway/JT808TcpServer.cs b/src/JT808.Gateway/JT808TcpServer.cs index 3d6e137..eb06588 100644 --- a/src/JT808.Gateway/JT808TcpServer.cs +++ b/src/JT808.Gateway/JT808TcpServer.cs @@ -1,17 +1,12 @@ using System; using System.Buffers; -using System.Collections.Generic; using System.IO.Pipelines; using System.Net; using System.Net.Sockets; -using System.Text; using System.Threading; using System.Threading.Tasks; using JT808.Gateway.Abstractions; -using JT808.Gateway.Abstractions.Enums; using JT808.Gateway.Configurations; -using JT808.Gateway.Enums; -using JT808.Gateway.Services; using JT808.Gateway.Session; using JT808.Protocol; using JT808.Protocol.Exceptions; @@ -30,62 +25,32 @@ namespace JT808.Gateway private readonly JT808SessionManager SessionManager; - private readonly IJT808MsgProducer MsgProducer; - private readonly JT808Serializer Serializer; private readonly JT808Configuration Configuration; - private readonly JT808NormalReplyMessageHandler JT808NormalReplyMessageHandler; - - private JT808UseType JT808UseType; + private readonly JT808MessageHandler MessageHandler; /// /// 使用队列方式 /// + /// /// /// /// /// - /// - /// - public JT808TcpServer( - IOptions jT808ConfigurationAccessor, - IJT808Config jT808Config, - ILoggerFactory loggerFactory, - JT808SessionManager jT808SessionManager, - IJT808MsgProducer jT808MsgProducer) - { - SessionManager = jT808SessionManager; - Logger = loggerFactory.CreateLogger("JT808TcpServer"); - Serializer = jT808Config.GetSerializer(); - MsgProducer = jT808MsgProducer; - Configuration = jT808ConfigurationAccessor.Value; - JT808UseType = JT808UseType.Queue; - InitServer(); - } - /// - /// 使用正常方式 - /// - /// - /// - /// - /// - /// - /// public JT808TcpServer( + JT808MessageHandler messageHandler, IOptions jT808ConfigurationAccessor, IJT808Config jT808Config, ILoggerFactory loggerFactory, - JT808SessionManager jT808SessionManager, - JT808NormalReplyMessageHandler replyMessageHandler) + JT808SessionManager jT808SessionManager) { + MessageHandler = messageHandler; SessionManager = jT808SessionManager; Logger = loggerFactory.CreateLogger("JT808TcpServer"); Serializer = jT808Config.GetSerializer(); - JT808NormalReplyMessageHandler = replyMessageHandler; Configuration = jT808ConfigurationAccessor.Value; - JT808UseType = JT808UseType.Normal; InitServer(); } @@ -231,14 +196,7 @@ namespace JT808.Gateway var package = Serializer.HeaderDeserialize(contentSpan, minBufferSize: 10240); if (Logger.IsEnabled(LogLevel.Trace)) Logger.LogTrace($"[Accept Hex {session.Client.RemoteEndPoint}]:{package.OriginalData.ToArray().ToHexString()}"); SessionManager.TryLink(package.Header.TerminalPhoneNo, session); - if(JT808UseType== JT808UseType.Normal) - { - JT808NormalReplyMessageHandler.Processor(package, session); - } - else if(JT808UseType== JT808UseType.Queue) - { - MsgProducer.ProduceAsync(package.Header.TerminalPhoneNo, package.OriginalData.ToArray()); - } + MessageHandler.Processor(package, session); } } catch (NotImplementedException ex) diff --git a/src/JT808.Gateway/JT808UdpServer.cs b/src/JT808.Gateway/JT808UdpServer.cs index 8c40aab..a66e1d1 100644 --- a/src/JT808.Gateway/JT808UdpServer.cs +++ b/src/JT808.Gateway/JT808UdpServer.cs @@ -8,10 +8,7 @@ using System.Text; using System.Threading; using System.Threading.Tasks; using JT808.Gateway.Abstractions; -using JT808.Gateway.Abstractions.Enums; using JT808.Gateway.Configurations; -using JT808.Gateway.Enums; -using JT808.Gateway.Services; using JT808.Gateway.Session; using JT808.Protocol; using JT808.Protocol.Exceptions; @@ -30,49 +27,26 @@ namespace JT808.Gateway private readonly JT808SessionManager SessionManager; - private readonly IJT808MsgProducer MsgProducer; - private readonly JT808Serializer Serializer; private readonly JT808Configuration Configuration; private readonly IPEndPoint LocalIPEndPoint; - private readonly JT808NormalReplyMessageHandler JT808NormalReplyMessageHandler; - - private JT808UseType JT808UseType; + private readonly JT808MessageHandler MessageHandler; public JT808UdpServer( IOptions jT808ConfigurationAccessor, IJT808Config jT808Config, ILoggerFactory loggerFactory, JT808SessionManager jT808SessionManager, - IJT808MsgProducer jT808MsgProducer) - { - SessionManager = jT808SessionManager; - Logger = loggerFactory.CreateLogger("JT808UdpServer"); - Serializer = jT808Config.GetSerializer(); - MsgProducer = jT808MsgProducer; - Configuration = jT808ConfigurationAccessor.Value; - JT808UseType = JT808UseType.Queue; - LocalIPEndPoint = new System.Net.IPEndPoint(IPAddress.Any, Configuration.UdpPort); - server = new Socket(LocalIPEndPoint.AddressFamily, SocketType.Dgram, ProtocolType.Udp); - server.Bind(LocalIPEndPoint); - } - - public JT808UdpServer( - IOptions jT808ConfigurationAccessor, - IJT808Config jT808Config, - ILoggerFactory loggerFactory, - JT808SessionManager jT808SessionManager, - JT808NormalReplyMessageHandler replyMessageHandler) + JT808MessageHandler messageHandler) { SessionManager = jT808SessionManager; Logger = loggerFactory.CreateLogger("JT808UdpServer"); Serializer = jT808Config.GetSerializer(); - JT808NormalReplyMessageHandler = replyMessageHandler; Configuration = jT808ConfigurationAccessor.Value; - JT808UseType = JT808UseType.Normal; + MessageHandler = messageHandler; LocalIPEndPoint = new System.Net.IPEndPoint(IPAddress.Any, Configuration.UdpPort); server = new Socket(LocalIPEndPoint.AddressFamily, SocketType.Dgram, ProtocolType.Udp); server.Bind(LocalIPEndPoint); @@ -120,14 +94,7 @@ namespace JT808.Gateway { Logger.LogInformation($"[Connected]:{receiveMessageFromResult.RemoteEndPoint}"); } - if (JT808UseType == JT808UseType.Normal) - { - JT808NormalReplyMessageHandler.Processor(package, session); - } - else if (JT808UseType == JT808UseType.Queue) - { - MsgProducer.ProduceAsync(package.Header.TerminalPhoneNo, package.OriginalData.ToArray()); - } + MessageHandler.Processor(package, session); } catch (NotImplementedException ex) {