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