From a961c06fcaa29cd026c470d23983342a465f2094 Mon Sep 17 00:00:00 2001 From: "SmallChi(Koike)" <564952747@qq.com> Date: Sun, 29 Nov 2020 21:54:04 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E6=94=B9=E7=BD=91=E5=85=B3=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E5=A4=84=E7=90=86=E7=A8=8B=E5=BA=8F=E7=9A=84=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E6=96=B9=E5=BC=8F=202.=E6=B7=BB=E5=8A=A0webapi?= =?UTF-8?q?=E5=AE=A2=E6=88=B7=E7=AB=AF=E6=B3=A8=E5=86=8C=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simples/JT808.Gateway.SimpleClient/Program.cs | 5 +- .../Configurations/JT808Configuration.cs | 4 +- .../Extensions/JT808SessionExtensions.cs | 2 + .../JT808.Gateway.Abstractions.xml | 71 ++++----- .../JT808MessageHandler.cs | 136 +++++++----------- .../Impl/JT808CustomMessageHandlerImpl.cs | 13 +- .../JT808.Gateway.NormalHosting/Program.cs | 5 +- .../Impl/JT808CustomMessageHandlerImpl.cs | 15 +- .../Impl/JT808ReplyMessageHandlerImpl.cs | 23 +-- .../JT808.Gateway.QueueHosting/Program.cs | 5 +- .../JT808.Gateway.WebApiClientTool.xml | 17 +++ .../JT808HttpClientExtensions.cs | 41 +++++- src/JT808.Gateway/JT808TcpServer.cs | 3 +- src/JT808.Gateway/JT808UdpServer.cs | 3 +- src/Version.props | 2 +- 15 files changed, 166 insertions(+), 179 deletions(-) diff --git a/simples/JT808.Gateway.SimpleClient/Program.cs b/simples/JT808.Gateway.SimpleClient/Program.cs index 53ee125..49d5c8d 100644 --- a/simples/JT808.Gateway.SimpleClient/Program.cs +++ b/simples/JT808.Gateway.SimpleClient/Program.cs @@ -10,6 +10,7 @@ using Microsoft.Extensions.Hosting; using JT808.Gateway.Client; using JT808.Gateway.SimpleClient.Services; using JT808.Gateway.SimpleClient.Jobs; +using JT808.Gateway.WebApiClientTool; namespace JT808.Gateway.SimpleClient { @@ -28,7 +29,9 @@ namespace JT808.Gateway.SimpleClient services.AddSingleton<ILoggerFactory, LoggerFactory>(); services.AddSingleton(typeof(ILogger<>), typeof(Logger<>)); services.AddJT808Configure() - .AddClient(); + .AddClient() + ; + services.AddJT808WebApiClientTool(new Uri("http://127.0.0.1:828/"),"12346"); services.AddHostedService<UpService>(); services.AddHostedService<Up2019Service>(); services.AddHostedService<CallHttpClientJob>(); diff --git a/src/JT808.Gateway.Abstractions/Configurations/JT808Configuration.cs b/src/JT808.Gateway.Abstractions/Configurations/JT808Configuration.cs index 6650c9a..844347a 100644 --- a/src/JT808.Gateway.Abstractions/Configurations/JT808Configuration.cs +++ b/src/JT808.Gateway.Abstractions/Configurations/JT808Configuration.cs @@ -33,8 +33,8 @@ namespace JT808.Gateway.Abstractions.Configurations /// </summary> public int UdpReceiveTimeoutCheckTimeSeconds { get; set; } = 60; /// <summary> - /// 网关不做消息业务处理,往队列发送 + /// 网关忽略消息应答 /// </summary> - public List<uint> FilterMsgIdHandlerForQueue { get; set; } = new List<uint>(); + public HashSet<uint> IgnoreMsgIdReply { get; set; } = new HashSet<uint>(); } } diff --git a/src/JT808.Gateway.Abstractions/Extensions/JT808SessionExtensions.cs b/src/JT808.Gateway.Abstractions/Extensions/JT808SessionExtensions.cs index 5b7bfd4..108d50a 100644 --- a/src/JT808.Gateway.Abstractions/Extensions/JT808SessionExtensions.cs +++ b/src/JT808.Gateway.Abstractions/Extensions/JT808SessionExtensions.cs @@ -11,6 +11,7 @@ namespace JT808.Gateway.Abstractions { public static async void SendAsync(this IJT808Session session,byte[] data) { + if (data == null) return; if (session.TransportProtocolType == JT808TransportProtocolType.tcp) { await session.Client.SendAsync(data, SocketFlags.None); @@ -23,6 +24,7 @@ namespace JT808.Gateway.Abstractions public static void Send(this IJT808Session session, byte[] data) { + if (data == null) return; if (session.TransportProtocolType == JT808TransportProtocolType.tcp) { session.Client.Send(data, SocketFlags.None); diff --git a/src/JT808.Gateway.Abstractions/JT808.Gateway.Abstractions.xml b/src/JT808.Gateway.Abstractions/JT808.Gateway.Abstractions.xml index ce77435..bf8c155 100644 --- a/src/JT808.Gateway.Abstractions/JT808.Gateway.Abstractions.xml +++ b/src/JT808.Gateway.Abstractions/JT808.Gateway.Abstractions.xml @@ -30,9 +30,9 @@ Udp 60s检查一次 </summary> </member> - <member name="P:JT808.Gateway.Abstractions.Configurations.JT808Configuration.FilterMsgIdHandlerForQueue"> + <member name="P:JT808.Gateway.Abstractions.Configurations.JT808Configuration.IgnoreMsgIdReply"> <summary> - 网关不做消息业务处理,往队列发送 + 网关忽略消息应答 </summary> </member> <member name="P:JT808.Gateway.Abstractions.Dtos.JT808TcpSessionInfoDto.LastActiveTime"> @@ -169,15 +169,14 @@ 通用消息处理程序 </summary> </member> - <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Processor(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)"> + <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Processor(JT808.Protocol.JT808HeaderPackage)"> <summary> 消息处理 </summary> <param name="request">请求数据</param> - <param name="session">当前会话</param> <returns>应答消息数据</returns> </member> - <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0001(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)"> + <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0001(JT808.Protocol.JT808HeaderPackage)"> <summary> 终端通用应答 平台无需回复 @@ -186,172 +185,152 @@ <param name="request"></param> <returns></returns> </member> - <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.CommonReply(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)"> + <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.CommonReply(JT808.Protocol.JT808HeaderPackage)"> <summary> 平台通用应答 </summary> <param name="request"></param> - <param name="session"></param> </member> - <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0002(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)"> + <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0002(JT808.Protocol.JT808HeaderPackage)"> <summary> 终端心跳 </summary> <param name="request"></param> <returns></returns> </member> - <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0004(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)"> + <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0004(JT808.Protocol.JT808HeaderPackage)"> <summary> 查询服务器时间 2019版本 </summary> <param name="request"></param> - <param name="session"></param> <returns></returns> </member> - <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x8003(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)"> + <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x8003(JT808.Protocol.JT808HeaderPackage)"> <summary> 服务器补传分包请求 </summary> <param name="request"></param> - <param name="session"></param> <returns></returns> </member> - <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0005(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)"> + <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0005(JT808.Protocol.JT808HeaderPackage)"> <summary> 终端补传分包请求 </summary> <param name="request"></param> - <param name="session"></param> <returns></returns> </member> - <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0100(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)"> + <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0100(JT808.Protocol.JT808HeaderPackage)"> <summary> 终端注册 </summary> <param name="request"></param> - <param name="session"></param> <returns></returns> </member> - <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0003(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)"> + <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0003(JT808.Protocol.JT808HeaderPackage)"> <summary> 终端注销 </summary> <param name="request"></param> - <param name="session"></param> <returns></returns> </member> - <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0102(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)"> + <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0102(JT808.Protocol.JT808HeaderPackage)"> <summary> 终端鉴权 </summary> <param name="request"></param> - <param name="session"></param> <returns></returns> </member> - <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0104(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)"> + <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0104(JT808.Protocol.JT808HeaderPackage)"> <summary> 查询终端参数应答 </summary> <param name="request"></param> - <param name="session"></param> <returns></returns> </member> - <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0107(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)"> + <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0107(JT808.Protocol.JT808HeaderPackage)"> <summary> 查询终端属性应答 </summary> <param name="request"></param> - <param name="session"></param> <returns></returns> </member> - <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0108(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)"> + <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0108(JT808.Protocol.JT808HeaderPackage)"> <summary> 终端升级结果应答 </summary> <param name="request"></param> - <param name="session"></param> <returns></returns> </member> - <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0200(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)"> + <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0200(JT808.Protocol.JT808HeaderPackage)"> <summary> 位置信息汇报 </summary> <param name="request"></param> - <param name="session"></param> <returns></returns> </member> - <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0201(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)"> + <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0201(JT808.Protocol.JT808HeaderPackage)"> <summary> 位置信息查询应答 </summary> <param name="request"></param> - <param name="session"></param> <returns></returns> </member> - <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x8204(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)"> + <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x8204(JT808.Protocol.JT808HeaderPackage)"> <summary> 链路检测 2019版本 </summary> <param name="request"></param> - <param name="session"></param> <returns></returns> </member> - <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0500(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)"> + <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0500(JT808.Protocol.JT808HeaderPackage)"> <summary> 车辆控制应答 </summary> <param name="request"></param> - <param name="session"></param> <returns></returns> </member> - <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0704(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)"> + <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0704(JT808.Protocol.JT808HeaderPackage)"> <summary> 定位数据批量上传 </summary> <param name="request"></param> - <param name="session"></param> <returns></returns> </member> - <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0705(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)"> + <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0705(JT808.Protocol.JT808HeaderPackage)"> <summary> CAN总线数据上传 </summary> <param name="request"></param> - <param name="session"></param> <returns></returns> </member> - <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0800(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)"> + <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0800(JT808.Protocol.JT808HeaderPackage)"> <summary> 多媒体事件信息上传 </summary> <param name="request"></param> - <param name="session"></param> <returns></returns> </member> - <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0801(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)"> + <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0801(JT808.Protocol.JT808HeaderPackage)"> <summary> 多媒体数据上传 </summary> <param name="request"></param> - <param name="session"></param> <returns></returns> </member> - <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x8801(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)"> + <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x8801(JT808.Protocol.JT808HeaderPackage)"> <summary> 摄像头立即拍摄命令 </summary> <param name="request"></param> - <param name="session"></param> <returns></returns> </member> - <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0900(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)"> + <member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0900(JT808.Protocol.JT808HeaderPackage)"> <summary> 数据上行透传 </summary> <param name="request"></param> - <param name="session"></param> <returns></returns> </member> <member name="M:JT808.Gateway.Abstractions.JT808MsgIdHttpHandlerBase.#ctor"> diff --git a/src/JT808.Gateway.Abstractions/JT808MessageHandler.cs b/src/JT808.Gateway.Abstractions/JT808MessageHandler.cs index 7360576..10851e9 100644 --- a/src/JT808.Gateway.Abstractions/JT808MessageHandler.cs +++ b/src/JT808.Gateway.Abstractions/JT808MessageHandler.cs @@ -18,7 +18,7 @@ namespace JT808.Gateway.Abstractions { protected Dictionary<ushort, MsgIdMethodDelegate> HandlerDict { get; } - protected delegate byte[] MsgIdMethodDelegate(JT808HeaderPackage package, IJT808Session session); + protected delegate byte[] MsgIdMethodDelegate(JT808HeaderPackage package); protected JT808Serializer JT808Serializer { get; } protected IJT808MsgProducer MsgProducer; @@ -66,44 +66,31 @@ namespace JT808.Gateway.Abstractions /// 消息处理 /// </summary> /// <param name="request">请求数据</param> - /// <param name="session">当前会话</param> /// <returns>应答消息数据</returns> - public virtual byte[] Processor(JT808HeaderPackage request, IJT808Session session) + public virtual byte[] Processor(JT808HeaderPackage request) { + if (MsgProducer != null) + { + MsgProducer.ProduceAsync(request.Header.TerminalPhoneNo, request.OriginalData.ToArray()); + } if (HandlerDict.TryGetValue(request.Header.MsgId, out var func)) { - if (JT808ConfigurationOptionsMonitor.CurrentValue.FilterMsgIdHandlerForQueue != null) + var data = func(request); + if (MsgReplyLoggingProducer != null) { - // 网关不做消息业务处理,往队列发送 - if (JT808ConfigurationOptionsMonitor.CurrentValue.FilterMsgIdHandlerForQueue.Contains(request.Header.MsgId)) + MsgReplyLoggingProducer.ProduceAsync(request.Header.TerminalPhoneNo, data); + } + if (JT808ConfigurationOptionsMonitor.CurrentValue.IgnoreMsgIdReply != null && JT808ConfigurationOptionsMonitor.CurrentValue.IgnoreMsgIdReply.Count > 0) + { + if (JT808ConfigurationOptionsMonitor.CurrentValue.IgnoreMsgIdReply.Contains(request.Header.MsgId)) { - if (MsgProducer != null) - { - MsgProducer.ProduceAsync(request.Header.TerminalPhoneNo, request.OriginalData.ToArray()); - } return default; } - else - { - var data=func(request, session); - MsgReplyLoggingProducer.ProduceAsync(request.Header.TerminalPhoneNo, data); - return data; - } - } - else - { - var data = func(request, session); - MsgReplyLoggingProducer.ProduceAsync(request.Header.TerminalPhoneNo, data); - return data; } + return data; } else { - //处理不了的消息Id统一发队列 - if (MsgProducer != null) - { - MsgProducer.ProduceAsync(request.Header.TerminalPhoneNo, request.OriginalData.ToArray()); - } return default; } } @@ -115,7 +102,7 @@ namespace JT808.Gateway.Abstractions /// </summary> /// <param name="request"></param> /// <returns></returns> - public virtual byte[] Msg0x0001(JT808HeaderPackage request, IJT808Session session) + public virtual byte[] Msg0x0001(JT808HeaderPackage request) { return default; } @@ -123,8 +110,7 @@ namespace JT808.Gateway.Abstractions /// 平台通用应答 /// </summary> /// <param name="request"></param> - /// <param name="session"></param> - public virtual byte[] CommonReply(JT808HeaderPackage request, IJT808Session session) + public virtual byte[] CommonReply(JT808HeaderPackage request) { if (request.Version == JT808Version.JTT2019) { @@ -134,7 +120,6 @@ namespace JT808.Gateway.Abstractions JT808PlatformResult = JT808PlatformResult.成功, MsgNum = request.Header.MsgNum })); - session.Send(data); return data; } else @@ -145,7 +130,6 @@ namespace JT808.Gateway.Abstractions JT808PlatformResult = JT808PlatformResult.成功, MsgNum = request.Header.MsgNum })); - session.Send(data); return data; } } @@ -154,33 +138,30 @@ namespace JT808.Gateway.Abstractions /// </summary> /// <param name="request"></param> /// <returns></returns> - public virtual byte[] Msg0x0002(JT808HeaderPackage request, IJT808Session session) + public virtual byte[] Msg0x0002(JT808HeaderPackage request) { - return CommonReply(request, session); + return CommonReply(request); } /// <summary> /// 查询服务器时间 /// 2019版本 /// </summary> /// <param name="request"></param> - /// <param name="session"></param> /// <returns></returns> - public virtual byte[] Msg0x0004(JT808HeaderPackage request, IJT808Session session) + public virtual byte[] Msg0x0004(JT808HeaderPackage request) { byte[] data = JT808Serializer.Serialize(JT808MsgId.查询服务器时间应答.Create(request.Header.TerminalPhoneNo, new JT808_0x8004() { Time = DateTime.Now })); - session.Send(data); return data; } /// <summary> /// 服务器补传分包请求 /// </summary> /// <param name="request"></param> - /// <param name="session"></param> /// <returns></returns> - public virtual byte[] Msg0x8003(JT808HeaderPackage request, IJT808Session session) + public virtual byte[] Msg0x8003(JT808HeaderPackage request) { throw new NotImplementedException("0x8003-服务器补传分包请求"); } @@ -188,9 +169,8 @@ namespace JT808.Gateway.Abstractions /// 终端补传分包请求 /// </summary> /// <param name="request"></param> - /// <param name="session"></param> /// <returns></returns> - public virtual byte[] Msg0x0005(JT808HeaderPackage request, IJT808Session session) + public virtual byte[] Msg0x0005(JT808HeaderPackage request) { throw new NotImplementedException("0x0005-终端补传分包请求"); } @@ -198,9 +178,8 @@ namespace JT808.Gateway.Abstractions /// 终端注册 /// </summary> /// <param name="request"></param> - /// <param name="session"></param> /// <returns></returns> - public virtual byte[] Msg0x0100(JT808HeaderPackage request, IJT808Session session) + public virtual byte[] Msg0x0100(JT808HeaderPackage request) { if (request.Version == JT808Version.JTT2019) { @@ -210,7 +189,6 @@ namespace JT808.Gateway.Abstractions JT808TerminalRegisterResult = JT808TerminalRegisterResult.成功, AckMsgNum = request.Header.MsgNum })); - session.Send(data); return data; } else @@ -221,7 +199,6 @@ namespace JT808.Gateway.Abstractions JT808TerminalRegisterResult = JT808TerminalRegisterResult.成功, AckMsgNum = request.Header.MsgNum })); - session.Send(data); return data; } } @@ -229,80 +206,72 @@ namespace JT808.Gateway.Abstractions /// 终端注销 /// </summary> /// <param name="request"></param> - /// <param name="session"></param> /// <returns></returns> - public virtual byte[] Msg0x0003(JT808HeaderPackage request, IJT808Session session) + public virtual byte[] Msg0x0003(JT808HeaderPackage request) { - return CommonReply(request, session); + return CommonReply(request); } /// <summary> /// 终端鉴权 /// </summary> /// <param name="request"></param> - /// <param name="session"></param> /// <returns></returns> - public virtual byte[] Msg0x0102(JT808HeaderPackage request, IJT808Session session) + public virtual byte[] Msg0x0102(JT808HeaderPackage request) { - return CommonReply(request, session); + return CommonReply(request); } /// <summary> /// 查询终端参数应答 /// </summary> /// <param name="request"></param> - /// <param name="session"></param> /// <returns></returns> - public virtual byte[] Msg0x0104(JT808HeaderPackage request, IJT808Session session) + public virtual byte[] Msg0x0104(JT808HeaderPackage request) { - return CommonReply(request, session); + return CommonReply(request); } /// <summary> /// 查询终端属性应答 /// </summary> /// <param name="request"></param> - /// <param name="session"></param> /// <returns></returns> - public virtual byte[] Msg0x0107(JT808HeaderPackage request, IJT808Session session) + public virtual byte[] Msg0x0107(JT808HeaderPackage request) { - return CommonReply(request, session); + return CommonReply(request); } /// <summary> /// 终端升级结果应答 /// </summary> /// <param name="request"></param> - /// <param name="session"></param> /// <returns></returns> - public virtual byte[] Msg0x0108(JT808HeaderPackage request, IJT808Session session) + public virtual byte[] Msg0x0108(JT808HeaderPackage request) { - return CommonReply(request, session); + return CommonReply(request); } /// <summary> /// 位置信息汇报 /// </summary> /// <param name="request"></param> - /// <param name="session"></param> /// <returns></returns> - public virtual byte[] Msg0x0200(JT808HeaderPackage request, IJT808Session session) + public virtual byte[] Msg0x0200(JT808HeaderPackage request) { - return CommonReply(request, session); + return CommonReply(request); } /// <summary> /// 位置信息查询应答 /// </summary> /// <param name="request"></param> - /// <param name="session"></param> /// <returns></returns> - public virtual byte[] Msg0x0201(JT808HeaderPackage request, IJT808Session session) + public virtual byte[] Msg0x0201(JT808HeaderPackage request) { - return CommonReply(request, session); + return CommonReply(request); } /// <summary> /// 链路检测 /// 2019版本 /// </summary> /// <param name="request"></param> - /// <param name="session"></param> /// <returns></returns> - public virtual byte[] Msg0x8204(JT808HeaderPackage request, IJT808Session session) + public virtual byte[] Msg0x8204(JT808HeaderPackage request) { return default; } @@ -310,49 +279,44 @@ namespace JT808.Gateway.Abstractions /// 车辆控制应答 /// </summary> /// <param name="request"></param> - /// <param name="session"></param> /// <returns></returns> - public virtual byte[] Msg0x0500(JT808HeaderPackage request, IJT808Session session) + public virtual byte[] Msg0x0500(JT808HeaderPackage request) { - return CommonReply(request, session); + return CommonReply(request); } /// <summary> /// 定位数据批量上传 /// </summary> /// <param name="request"></param> - /// <param name="session"></param> /// <returns></returns> - public virtual byte[] Msg0x0704(JT808HeaderPackage request, IJT808Session session) + public virtual byte[] Msg0x0704(JT808HeaderPackage request) { - return CommonReply(request, session); + return CommonReply(request); } /// <summary> /// CAN总线数据上传 /// </summary> /// <param name="request"></param> - /// <param name="session"></param> /// <returns></returns> - public virtual byte[] Msg0x0705(JT808HeaderPackage request, IJT808Session session) + public virtual byte[] Msg0x0705(JT808HeaderPackage request) { - return CommonReply(request, session); + return CommonReply(request); } /// <summary> /// 多媒体事件信息上传 /// </summary> /// <param name="request"></param> - /// <param name="session"></param> /// <returns></returns> - public virtual byte[] Msg0x0800(JT808HeaderPackage request, IJT808Session session) + public virtual byte[] Msg0x0800(JT808HeaderPackage request) { - return CommonReply(request, session); + return CommonReply(request); } /// <summary> /// 多媒体数据上传 /// </summary> /// <param name="request"></param> - /// <param name="session"></param> /// <returns></returns> - public virtual byte[] Msg0x0801(JT808HeaderPackage request, IJT808Session session) + public virtual byte[] Msg0x0801(JT808HeaderPackage request) { throw new NotImplementedException("0x8800多媒体数据上传应答"); } @@ -360,9 +324,8 @@ namespace JT808.Gateway.Abstractions /// 摄像头立即拍摄命令 /// </summary> /// <param name="request"></param> - /// <param name="session"></param> /// <returns></returns> - public virtual byte[] Msg0x8801(JT808HeaderPackage request, IJT808Session session) + public virtual byte[] Msg0x8801(JT808HeaderPackage request) { throw new NotImplementedException("0x0805摄像头立即拍摄命令应答"); } @@ -370,11 +333,10 @@ namespace JT808.Gateway.Abstractions /// 数据上行透传 /// </summary> /// <param name="request"></param> - /// <param name="session"></param> /// <returns></returns> - public virtual byte[] Msg0x0900(JT808HeaderPackage request, IJT808Session session) + public virtual byte[] Msg0x0900(JT808HeaderPackage request) { - return CommonReply(request, session); + return CommonReply(request); } } } diff --git a/src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/Impl/JT808CustomMessageHandlerImpl.cs b/src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/Impl/JT808CustomMessageHandlerImpl.cs index 7bd388e..75954ac 100644 --- a/src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/Impl/JT808CustomMessageHandlerImpl.cs +++ b/src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/Impl/JT808CustomMessageHandlerImpl.cs @@ -46,10 +46,10 @@ namespace JT808.Gateway.NormalHosting.Impl /// </summary> /// <param name="request"></param> /// <param name="session"></param> - public override byte[] Processor(JT808HeaderPackage request, IJT808Session session) + public override byte[] Processor(JT808HeaderPackage request) { //处理上行消息 - var down = base.Processor(request, session); + var down = base.Processor(request); try { //AOP 可以自定义添加一些东西:上下行日志、 @@ -73,13 +73,10 @@ namespace JT808.Gateway.NormalHosting.Impl /// 重写自带的消息 /// </summary> /// <param name="request"></param> - /// <param name="session"></param> - public override byte[] Msg0x0200(JT808HeaderPackage request, IJT808Session session) + public override byte[] Msg0x0200(JT808HeaderPackage request) { logger.LogDebug("重写自带Msg0x0200的消息"); - var data = base.Msg0x0200(request, session); - logger.LogDebug("往应答服务发送相同数据进行测试"); - MsgReplyProducer.ProduceAsync(request.Header.TerminalPhoneNo, data).ConfigureAwait(false); + var data = base.Msg0x0200(request); return data; } @@ -88,7 +85,7 @@ namespace JT808.Gateway.NormalHosting.Impl /// </summary> /// <param name="request"></param> /// <returns></returns> - public byte[] Msg0x9999(JT808HeaderPackage request, IJT808Session session) + public byte[] Msg0x9999(JT808HeaderPackage request) { logger.LogDebug("自定义消息"); return default; diff --git a/src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/Program.cs b/src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/Program.cs index 41ade4b..f8921fb 100644 --- a/src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/Program.cs +++ b/src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/Program.cs @@ -51,6 +51,8 @@ namespace JT808.Gateway.NormalHosting //添加客户端工具 .AddClient() .Builder() + //方式1:客户端webapi调用 + .AddWebApiClientTool(hostContext.Configuration) .AddGateway(hostContext.Configuration) .AddMessageHandler<JT808CustomMessageHandlerImpl>() .AddMsgReplyConsumer<JT808MsgReplyConsumer>() @@ -60,7 +62,8 @@ namespace JT808.Gateway.NormalHosting .AddTcp() .AddUdp() .AddHttp(); - services.AddJT808WebApiClientTool(hostContext.Configuration); + //方式2:客户端webapi调用 + //services.AddJT808WebApiClientTool(hostContext.Configuration); //httpclient客户端调用 services.AddHostedService<CallHttpClientJob>(); //客户端测试 依赖AddClient()服务 diff --git a/src/JT808.Gateway.Tests/JT808.Gateway.QueueHosting/Impl/JT808CustomMessageHandlerImpl.cs b/src/JT808.Gateway.Tests/JT808.Gateway.QueueHosting/Impl/JT808CustomMessageHandlerImpl.cs index 9cba695..731e1fb 100644 --- a/src/JT808.Gateway.Tests/JT808.Gateway.QueueHosting/Impl/JT808CustomMessageHandlerImpl.cs +++ b/src/JT808.Gateway.Tests/JT808.Gateway.QueueHosting/Impl/JT808CustomMessageHandlerImpl.cs @@ -26,7 +26,7 @@ namespace JT808.Gateway.QueueHosting.Impl { logger = loggerFactory.CreateLogger<JT808CustomMessageHandlerImpl>(); //过滤掉0x0200消息,通过服务服务进行下发应答,可以通过配置文件的方式进行增加修改(支持热更新) - jT808ConfigurationOptionsMonitor.CurrentValue.FilterMsgIdHandlerForQueue.Add(0x0200); + //jT808ConfigurationOptionsMonitor.CurrentValue.IgnoreMsgIdReply.Add(0x0200); //添加自定义消息 HandlerDict.Add(0x9999, Msg0x9999); } @@ -37,11 +37,11 @@ namespace JT808.Gateway.QueueHosting.Impl /// </summary> /// <param name="request"></param> /// <param name="session"></param> - public override byte[] Processor(JT808HeaderPackage request, IJT808Session session) + public override byte[] Processor(JT808HeaderPackage request) { try { - var down = base.Processor(request, session); + var down = base.Processor(request); return down; } catch (Exception) @@ -54,11 +54,10 @@ namespace JT808.Gateway.QueueHosting.Impl /// 重写自带的消息 /// </summary> /// <param name="request"></param> - /// <param name="session"></param> - public override byte[] Msg0x0200(JT808HeaderPackage request, IJT808Session session) + public override byte[] Msg0x0200(JT808HeaderPackage request) { - logger.LogDebug("由于过滤了0x0200,网关是不会处理0x0200消息的应答"); - var data = base.Msg0x0200(request, session); + //logger.LogDebug("由于过滤了0x0200,网关是不会处理0x0200消息的应答"); + var data = base.Msg0x0200(request); return data; } @@ -67,7 +66,7 @@ namespace JT808.Gateway.QueueHosting.Impl /// </summary> /// <param name="request"></param> /// <returns></returns> - public byte[] Msg0x9999(JT808HeaderPackage request, IJT808Session session) + public byte[] Msg0x9999(JT808HeaderPackage request) { logger.LogDebug("自定义消息"); return default; diff --git a/src/JT808.Gateway.Tests/JT808.Gateway.QueueHosting/Impl/JT808ReplyMessageHandlerImpl.cs b/src/JT808.Gateway.Tests/JT808.Gateway.QueueHosting/Impl/JT808ReplyMessageHandlerImpl.cs index 8e71c1e..ca36ad6 100644 --- a/src/JT808.Gateway.Tests/JT808.Gateway.QueueHosting/Impl/JT808ReplyMessageHandlerImpl.cs +++ b/src/JT808.Gateway.Tests/JT808.Gateway.QueueHosting/Impl/JT808ReplyMessageHandlerImpl.cs @@ -30,28 +30,9 @@ namespace JT808.Gateway.QueueHosting.Impl logger.LogDebug($"实现消息应答处理,{TerminalNo},{Data.ToHexString()}"); } var package = Serializer.Deserialize(Data); - if (package.Header.MsgId == 0x0200) + if (package.Header.MsgId == 0x09999) { - if (package.Version == JT808Version.JTT2019) - { - byte[] data = Serializer.Serialize(JT808MsgId.平台通用应答.Create_平台通用应答_2019(package.Header.TerminalPhoneNo, new JT808_0x8001() - { - AckMsgId = package.Header.MsgId, - JT808PlatformResult = JT808PlatformResult.成功, - MsgNum = package.Header.MsgNum - })); - return data; - } - else - { - byte[] data = Serializer.Serialize(JT808MsgId.平台通用应答.Create(package.Header.TerminalPhoneNo, new JT808_0x8001() - { - AckMsgId = package.Header.MsgId, - JT808PlatformResult = JT808PlatformResult.成功, - MsgNum = package.Header.MsgNum - })); - return data; - } + logger.LogDebug("====实现自定义或内部消息应答处理===="); } return default; } diff --git a/src/JT808.Gateway.Tests/JT808.Gateway.QueueHosting/Program.cs b/src/JT808.Gateway.Tests/JT808.Gateway.QueueHosting/Program.cs index 88756c3..7a35f4f 100644 --- a/src/JT808.Gateway.Tests/JT808.Gateway.QueueHosting/Program.cs +++ b/src/JT808.Gateway.Tests/JT808.Gateway.QueueHosting/Program.cs @@ -46,6 +46,8 @@ namespace JT808.Gateway.QueueHosting .AddClient() .AddClientReport() .Builder() + //方式1:客户端webapi调用 + .AddWebApiClientTool(hostContext.Configuration) //添加客户端服务 .AddClientKafka() .AddMsgConsumer(hostContext.Configuration) @@ -63,7 +65,8 @@ namespace JT808.Gateway.QueueHosting .AddTcp() .AddUdp() .AddHttp(); - services.AddJT808WebApiClientTool(hostContext.Configuration); + //方式2:客户端webapi调用 + //services.AddJT808WebApiClientTool(hostContext.Configuration); //httpclient客户端调用 services.AddHostedService<CallHttpClientJob>(); //客户端测试 diff --git a/src/JT808.Gateway.WebApiClientTool/JT808.Gateway.WebApiClientTool.xml b/src/JT808.Gateway.WebApiClientTool/JT808.Gateway.WebApiClientTool.xml index ed3caba..5897f16 100644 --- a/src/JT808.Gateway.WebApiClientTool/JT808.Gateway.WebApiClientTool.xml +++ b/src/JT808.Gateway.WebApiClientTool/JT808.Gateway.WebApiClientTool.xml @@ -89,5 +89,22 @@ <param name="configuration"></param> <returns></returns> </member> + <member name="M:JT808.Gateway.WebApiClientTool.JT808HttpClientExtensions.AddWebApiClientTool(JT808.Protocol.IJT808Builder,Microsoft.Extensions.Configuration.IConfiguration)"> + <summary> + + </summary> + <param name="jT808Builder"></param> + <param name="configuration"></param> + <returns></returns> + </member> + <member name="M:JT808.Gateway.WebApiClientTool.JT808HttpClientExtensions.AddWebApiClientTool(JT808.Protocol.IJT808Builder,System.Uri,System.String)"> + <summary> + + </summary> + <param name="jT808Builder"></param> + <param name="webapiUri"></param> + <param name="token"></param> + <returns></returns> + </member> </members> </doc> diff --git a/src/JT808.Gateway.WebApiClientTool/JT808HttpClientExtensions.cs b/src/JT808.Gateway.WebApiClientTool/JT808HttpClientExtensions.cs index 09df102..c61d3d6 100644 --- a/src/JT808.Gateway.WebApiClientTool/JT808HttpClientExtensions.cs +++ b/src/JT808.Gateway.WebApiClientTool/JT808HttpClientExtensions.cs @@ -1,4 +1,6 @@ -using Microsoft.Extensions.Configuration; +using JT808.Gateway.Abstractions; +using JT808.Protocol; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; @@ -47,5 +49,42 @@ namespace JT808.Gateway.WebApiClientTool .AddTypedClient<JT808HttpClient>(); return serviceDescriptors; } + + /// <summary> + /// + /// </summary> + /// <param name="jT808Builder"></param> + /// <param name="configuration"></param> + /// <returns></returns> + public static IJT808Builder AddWebApiClientTool(this IJT808Builder jT808Builder, IConfiguration configuration) + { + jT808Builder.Services.AddHttpClient("JT808WebApiClientTool", c => + { + c.DefaultRequestHeaders.Add("token", configuration.GetSection("JT808WebApiClientToolConfig:Token").Get<string>()); + c.BaseAddress = new Uri(configuration.GetSection("JT808WebApiClientToolConfig:Uri").Get<string>()); + c.Timeout = TimeSpan.FromSeconds(3); + }) + .AddTypedClient<JT808HttpClient>(); + return jT808Builder; + } + + /// <summary> + /// + /// </summary> + /// <param name="jT808Builder"></param> + /// <param name="webapiUri"></param> + /// <param name="token"></param> + /// <returns></returns> + public static IJT808Builder AddWebApiClientTool(this IJT808Builder jT808Builder, Uri webapiUri, string token) + { + jT808Builder.Services.AddHttpClient("JT808WebApiClientTool", c => + { + c.DefaultRequestHeaders.Add("token", token); + c.BaseAddress = webapiUri; + c.Timeout = TimeSpan.FromSeconds(3); + }) + .AddTypedClient<JT808HttpClient>(); + return jT808Builder; + } } } diff --git a/src/JT808.Gateway/JT808TcpServer.cs b/src/JT808.Gateway/JT808TcpServer.cs index 6dec164..ab7339d 100644 --- a/src/JT808.Gateway/JT808TcpServer.cs +++ b/src/JT808.Gateway/JT808TcpServer.cs @@ -196,7 +196,8 @@ 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); - MessageHandler.Processor(package, session); + var downData = MessageHandler.Processor(package); + session.SendAsync(downData); } } catch (NotImplementedException ex) diff --git a/src/JT808.Gateway/JT808UdpServer.cs b/src/JT808.Gateway/JT808UdpServer.cs index b7f5d85..72efb1b 100644 --- a/src/JT808.Gateway/JT808UdpServer.cs +++ b/src/JT808.Gateway/JT808UdpServer.cs @@ -98,7 +98,8 @@ namespace JT808.Gateway { Logger.LogInformation($"[Connected]:{receiveMessageFromResult.RemoteEndPoint}"); } - MessageHandler.Processor(package, session); + var downData = MessageHandler.Processor(package); + session.SendAsync(downData); } catch (NotImplementedException ex) { diff --git a/src/Version.props b/src/Version.props index d4a85ea..9aa98e5 100644 --- a/src/Version.props +++ b/src/Version.props @@ -1,6 +1,6 @@ <Project> <PropertyGroup> <JT808DotNettyPackageVersion>2.3.2</JT808DotNettyPackageVersion> - <JT808GatewayPackageVersion>1.1.0-preview1</JT808GatewayPackageVersion> + <JT808GatewayPackageVersion>1.1.0-preview2</JT808GatewayPackageVersion> </PropertyGroup> </Project> \ No newline at end of file