From c197ec1fe6b882d750fe98f35dea5d3ef755a51f Mon Sep 17 00:00:00 2001
From: "SmallChi(Koike)" <564952747@qq.com>
Date: Wed, 27 May 2020 21:52:05 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E8=91=BA=E4=B8=8B=E9=93=BE=E8=B7=AF?=
 =?UTF-8?q?=E7=B1=BB=E5=9E=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Clients/JT809MainClient.cs                | 11 ++-
 .../JT809MainClientConnectionHandler.cs       |  2 +-
 ...JT809SubordinateClientConnectionHandler.cs |  2 +-
 .../JT809SuperiorMsgIdReceiveHandlerBase.cs   |  2 +-
 .../JT809SubordinateLinkNotifyImplService.cs  |  4 +
 .../JT809CoreDotnettyExtensions.cs            | 81 ++++++++++---------
 .../JT809InferiorService.cs                   | 16 +++-
 .../Inferior/JT809.Inferior.Client/Program.cs | 11 ++-
 .../Inferior/JT809.Inferior.Server/Program.cs | 16 ++--
 .../JT809.Superior.Server.csproj              |  2 +-
 .../Superior/JT809.Superior.Server/Program.cs | 12 ++-
 .../JT809.Superior.Server/appsettings.json    |  3 +-
 .../JT809.DotNetty.Host.Test/Program.cs       |  3 +-
 13 files changed, 104 insertions(+), 61 deletions(-)

diff --git a/src/JT809.DotNetty.Core/Clients/JT809MainClient.cs b/src/JT809.DotNetty.Core/Clients/JT809MainClient.cs
index 86afca7..eeaa1d6 100644
--- a/src/JT809.DotNetty.Core/Clients/JT809MainClient.cs
+++ b/src/JT809.DotNetty.Core/Clients/JT809MainClient.cs
@@ -9,6 +9,7 @@ using JT809.DotNetty.Core.Handlers;
 using JT809.DotNetty.Core.Interfaces;
 using JT809.DotNetty.Core.Metadata;
 using JT809.Protocol;
+using JT809.Protocol.Configs;
 using JT809.Protocol.Extensions;
 using JT809.Protocol.MessageBody;
 using Microsoft.Extensions.DependencyInjection;
@@ -42,11 +43,15 @@ namespace JT809.DotNetty.Core.Clients
 
         private readonly IJT809ManualResetEvent manualResetEvent;
 
+        private readonly JT809HeaderOptions JT809HeaderOptions;
+
         public JT809MainClient(
+            JT809HeaderOptions jT809HeaderOptions,
             IJT809ManualResetEvent jT809ManualResetEvent,
             IServiceProvider provider,
             ILoggerFactory loggerFactory)
         {
+            JT809HeaderOptions = jT809HeaderOptions;
             this.serviceProvider = provider;
             this.logger = loggerFactory.CreateLogger<JT809MainClient>();
             this.manualResetEvent = jT809ManualResetEvent;
@@ -102,7 +107,11 @@ namespace JT809.DotNetty.Core.Clients
                         //jT809_0X1001.UserId = userId;
                         //jT809_0X1001.Password = password;
                         var package = JT809.Protocol.Enums.JT809BusinessType.主链路登录请求消息.Create(_jT809_0x1001);
-                        await channel.WriteAndFlushAsync(new JT809Response(package, 100));
+                        package.Header.MsgGNSSCENTERID = JT809HeaderOptions.MsgGNSSCENTERID;
+                        package.Header.Version = JT809HeaderOptions.Version;
+                        package.Header.EncryptKey = JT809HeaderOptions.EncryptKey;
+                        package.Header.EncryptFlag = JT809HeaderOptions.EncryptFlag;
+                        await channel.WriteAndFlushAsync(new JT809Response(package, 1024));
                         logger.LogInformation("等待登录应答结果...");
                         manualResetEvent.Pause();
                     }
diff --git a/src/JT809.DotNetty.Core/Handlers/JT809MainClientConnectionHandler.cs b/src/JT809.DotNetty.Core/Handlers/JT809MainClientConnectionHandler.cs
index a262853..56c3e06 100644
--- a/src/JT809.DotNetty.Core/Handlers/JT809MainClientConnectionHandler.cs
+++ b/src/JT809.DotNetty.Core/Handlers/JT809MainClientConnectionHandler.cs
@@ -78,7 +78,7 @@ namespace JT809.DotNetty.Core.Handlers
                     logger.LogInformation($"{idleStateEvent.State.ToString()}>>>Heartbeat-{channelId}");
                     //发送主链路保持请求数据包
                     var package = JT809BusinessType.主链路连接保持请求消息.Create();
-                    JT809Response jT809Response = new JT809Response(package, 100);
+                    JT809Response jT809Response = new JT809Response(package, 1024);
                     context.WriteAndFlushAsync(jT809Response);
                 }
             }
diff --git a/src/JT809.DotNetty.Core/Handlers/JT809SubordinateClientConnectionHandler.cs b/src/JT809.DotNetty.Core/Handlers/JT809SubordinateClientConnectionHandler.cs
index 7d4c559..ac2fddd 100644
--- a/src/JT809.DotNetty.Core/Handlers/JT809SubordinateClientConnectionHandler.cs
+++ b/src/JT809.DotNetty.Core/Handlers/JT809SubordinateClientConnectionHandler.cs
@@ -110,7 +110,7 @@ namespace JT809.DotNetty.Core.Handlers
                     string channelId = context.Channel.Id.AsShortText();
                     //发送从链路保持请求数据包
                     var package = JT809BusinessType.从链路连接保持请求消息.Create();
-                    JT809Response jT809Response = new JT809Response(package, 100);
+                    JT809Response jT809Response = new JT809Response(package, 1024);
                     if (logger.IsEnabled(LogLevel.Information))
                         logger.LogInformation($"{idleStateEvent.State.ToString()}>>>Heartbeat-{channelId}-{JT809Serializer.Serialize(package, 100).ToHexString()}");
                     context.WriteAndFlushAsync(jT809Response);
diff --git a/src/JT809.DotNetty.Core/Handlers/JT809SuperiorMsgIdReceiveHandlerBase.cs b/src/JT809.DotNetty.Core/Handlers/JT809SuperiorMsgIdReceiveHandlerBase.cs
index 090ef35..ce8708e 100644
--- a/src/JT809.DotNetty.Core/Handlers/JT809SuperiorMsgIdReceiveHandlerBase.cs
+++ b/src/JT809.DotNetty.Core/Handlers/JT809SuperiorMsgIdReceiveHandlerBase.cs
@@ -40,7 +40,7 @@ namespace JT809.DotNetty.Core.Handlers
                 {JT809BusinessType.主链路断开通知消息.ToUInt16Value(),Msg0x1007 },
                 {JT809BusinessType.主链路车辆动态信息交换业务.ToUInt16Value(), Msg0x1200},
                 {JT809BusinessType.下级平台主动关闭主从链路通知消息.ToUInt16Value(), Msg0x1008},
-                {JT809BusinessType.从链路连接保持应答消息.ToUInt16Value(), Msg0x9002},
+                {JT809BusinessType.从链路连接应答信息.ToUInt16Value(), Msg0x9002},
                 {JT809BusinessType.从链路注销应答消息.ToUInt16Value(), Msg0x9004},
                 {JT809BusinessType.从链路连接保持应答消息.ToUInt16Value(), Msg0x9006},
             };
diff --git a/src/JT809.DotNetty.Core/Internal/JT809SubordinateLinkNotifyImplService.cs b/src/JT809.DotNetty.Core/Internal/JT809SubordinateLinkNotifyImplService.cs
index 1f16051..c78f172 100644
--- a/src/JT809.DotNetty.Core/Internal/JT809SubordinateLinkNotifyImplService.cs
+++ b/src/JT809.DotNetty.Core/Internal/JT809SubordinateLinkNotifyImplService.cs
@@ -55,6 +55,10 @@ namespace JT809.DotNetty.Core.Internal
                     {
                         ReasonCode = reasonCode
                     });
+                    package.Header.MsgGNSSCENTERID = msgGNSSCENTERID;
+                    package.Header.Version = JT809HeaderOptions.Version;
+                    package.Header.EncryptKey = JT809HeaderOptions.EncryptKey;
+                    package.Header.EncryptFlag = JT809HeaderOptions.EncryptFlag;
                     JT809Response jT809Response = new JT809Response(package, 100);
                     if (logger.IsEnabled(LogLevel.Information))
                         logger.LogInformation($"从链路断开通知消息>>>{JT809Serializer.Serialize(package, 100).ToHexString()}");
diff --git a/src/JT809.DotNetty.Core/JT809CoreDotnettyExtensions.cs b/src/JT809.DotNetty.Core/JT809CoreDotnettyExtensions.cs
index 455f8a0..946107e 100644
--- a/src/JT809.DotNetty.Core/JT809CoreDotnettyExtensions.cs
+++ b/src/JT809.DotNetty.Core/JT809CoreDotnettyExtensions.cs
@@ -20,6 +20,7 @@ using Microsoft.Extensions.Options;
 using JT808.DotNetty.WebApi;
 using JT809.DotNetty.Core.Session;
 using JT809.DotNetty.Core.Events;
+using JT809.Protocol;
 
 [assembly: InternalsVisibleTo("JT809.DotNetty.Core.Test")]
 
@@ -44,7 +45,7 @@ namespace JT809.DotNetty.Core
             });
         }
 
-        public static IServiceCollection AddJT809Core(this IServiceCollection serviceDescriptors,IConfiguration configuration, Newtonsoft.Json.JsonSerializerSettings settings = null)
+        public static IJT809Builder AddJT809Core(this IJT809Builder builder,IConfiguration configuration, Newtonsoft.Json.JsonSerializerSettings settings = null)
         {
             if (settings != null)
             {
@@ -56,14 +57,14 @@ namespace JT809.DotNetty.Core
                     return settings;
                 });
             }
-            serviceDescriptors.Configure<JT809Configuration>(configuration.GetSection("JT809Configuration"));
-            serviceDescriptors.TryAddSingleton<JT809SimpleSystemCollectService>();
+            builder.Services.Configure<JT809Configuration>(configuration.GetSection("JT809Configuration"));
+            builder.Services.TryAddSingleton<JT809SimpleSystemCollectService>();
             //JT809计数器服务工厂
-            serviceDescriptors.TryAddSingleton<JT809AtomicCounterServiceFactory>();
+            builder.Services.TryAddSingleton<JT809AtomicCounterServiceFactory>();
             //JT809编解码器
-            serviceDescriptors.TryAddScoped<JT809Decoder>();
-            serviceDescriptors.TryAddScoped<JT809Encoder>();
-            return serviceDescriptors;
+            builder.Services.TryAddScoped<JT809Decoder>();
+            builder.Services.TryAddScoped<JT809Encoder>();
+            return builder;
         }
 
         /// <summary>
@@ -73,23 +74,23 @@ namespace JT809.DotNetty.Core
         /// </summary>
         /// <param name="serviceDescriptors"></param>
         /// <returns></returns>
-        public static IServiceCollection AddJT809InferiorPlatform(this IServiceCollection  serviceDescriptors, Action<JT809InferiorPlatformOptions> options)
+        public static IJT809Builder AddJT809InferiorPlatform(this IJT809Builder builder, Action<JT809InferiorPlatformOptions> options)
         {
-            serviceDescriptors.Configure(options);
+            builder.Services.Configure(options);
             //主从链路客户端和服务端连接处理器
-            serviceDescriptors.TryAddScoped<JT809MainClientConnectionHandler>();
-            serviceDescriptors.TryAddScoped<JT809SubordinateServerConnectionHandler>();
+            builder.Services.TryAddScoped<JT809MainClientConnectionHandler>();
+            builder.Services.TryAddScoped<JT809SubordinateServerConnectionHandler>();
             //主链路服务端会话管理
             //serviceDescriptors.TryAddSingleton<JT809MainSessionManager>();
             //主从链路接收消息默认业务处理器
-            serviceDescriptors.TryAddSingleton<JT809InferiorMsgIdReceiveHandlerBase, JT809InferiorMsgIdReceiveDefaultHandler>();
+            builder.Services.TryAddSingleton<JT809InferiorMsgIdReceiveHandlerBase, JT809InferiorMsgIdReceiveDefaultHandler>();
             //主从链路消息接收处理器
-            serviceDescriptors.TryAddScoped<JT809SubordinateServerHandler>();
+            builder.Services.TryAddScoped<JT809SubordinateServerHandler>();
             //主链路客户端
             //serviceDescriptors.TryAddSingleton<JT809MainClient>();
             //从链路服务端
-            serviceDescriptors.AddHostedService<JT809SubordinateServerHost>();
-            return serviceDescriptors;
+            builder.Services.AddHostedService<JT809SubordinateServerHost>();
+            return builder;
         }
 
         /// <summary>
@@ -99,18 +100,18 @@ namespace JT809.DotNetty.Core
         /// </summary>
         /// <param name="serviceDescriptors"></param>
         /// <returns></returns>
-        public static IServiceCollection AddJT809InferiorPlatformClient(this IServiceCollection serviceDescriptors)
+        public static IJT809Builder AddJT809InferiorPlatformClient(this IJT809Builder builder)
         {
-            serviceDescriptors.TryAddSingleton<IJT809ManualResetEvent, JT809InferoprManualResetEvent>();
+            builder.Services.TryAddSingleton<IJT809ManualResetEvent, JT809InferoprManualResetEvent>();
             //主从链路客户端和服务端连接处理器
-            serviceDescriptors.TryAddScoped<JT809MainClientConnectionHandler>();
+            builder.Services.TryAddScoped<JT809MainClientConnectionHandler>();
             //主从链路接收消息默认业务处理器
-            serviceDescriptors.TryAddSingleton<JT809InferiorMsgIdReceiveHandlerBase, JT809InferiorMsgIdReceiveDefaultHandler>();
+            builder.Services.TryAddSingleton<JT809InferiorMsgIdReceiveHandlerBase, JT809InferiorMsgIdReceiveDefaultHandler>();
             //主从链路消息接收处理器
-            serviceDescriptors.TryAddScoped<JT809MainClientHandler>();
+            builder.Services.TryAddScoped<JT809MainClientHandler>();
             //主链路客户端
-            serviceDescriptors.TryAddSingleton<JT809MainClient>();
-            return serviceDescriptors;
+            builder.Services.TryAddSingleton<JT809MainClient>();
+            return builder;
         }
 
 
@@ -121,38 +122,38 @@ namespace JT809.DotNetty.Core
         /// </summary>
         /// <param name="serviceDescriptors"></param>
         /// <returns></returns>
-        public static IServiceCollection AddJT809SuperiorPlatform(this IServiceCollection serviceDescriptors, IConfiguration superiorPlatformConfiguration=null, Action<JT809SuperiorPlatformOptions> options=null)
+        public static IJT809Builder AddJT809SuperiorPlatform(this IJT809Builder builder, IConfiguration superiorPlatformConfiguration=null, Action<JT809SuperiorPlatformOptions> options=null)
         {
             if (superiorPlatformConfiguration != null)
             {
-                serviceDescriptors.Configure<JT809SuperiorPlatformOptions>(superiorPlatformConfiguration.GetSection("JT809SuperiorPlatformConfiguration"));
+                builder.Services.Configure<JT809SuperiorPlatformOptions>(superiorPlatformConfiguration.GetSection("JT809SuperiorPlatformConfiguration"));
             }
             if (options != null)
             {
-                serviceDescriptors.Configure(options);
+                builder.Services.Configure(options);
             }
-            serviceDescriptors.TryAddSingleton<IJT809VerifyCodeGenerator, JT809VerifyCodeGeneratorDefaultImpl>();
+            builder.Services.TryAddSingleton<IJT809VerifyCodeGenerator, JT809VerifyCodeGeneratorDefaultImpl>();
             //主从链路客户端和服务端连接处理器
-            serviceDescriptors.TryAddScoped<JT809MainServerConnectionHandler>();
-            serviceDescriptors.TryAddScoped<JT809SubordinateClientConnectionHandler>();
+            builder.Services.TryAddScoped<JT809MainServerConnectionHandler>();
+            builder.Services.TryAddScoped<JT809SubordinateClientConnectionHandler>();
             //主链路服务端会话管理
-            serviceDescriptors.TryAddSingleton<JT809SuperiorMainSessionManager>();
+            builder.Services.TryAddSingleton<JT809SuperiorMainSessionManager>();
             //主从链路接收消息默认业务处理器
-            serviceDescriptors.TryAddSingleton<JT809SuperiorMsgIdReceiveHandlerBase, JT809SuperiorMsgIdReceiveDefaultHandler>();
+            builder.Services.TryAddSingleton<JT809SuperiorMsgIdReceiveHandlerBase, JT809SuperiorMsgIdReceiveDefaultHandler>();
             //主从链路消息接收处理器
-            serviceDescriptors.TryAddScoped<JT809MainServerHandler>();
-            serviceDescriptors.TryAddScoped<JT809SubordinateClientHandler>();
-            serviceDescriptors.TryAddSingleton<IJT809SubordinateLoginService, JT809SubordinateLoginImplService>();
-            serviceDescriptors.TryAddSingleton<IJT809SubordinateLinkNotifyService, JT809SubordinateLinkNotifyImplService>();
+            builder.Services.TryAddScoped<JT809MainServerHandler>();
+            builder.Services.TryAddScoped<JT809SubordinateClientHandler>();
+            builder.Services.TryAddSingleton<IJT809SubordinateLoginService, JT809SubordinateLoginImplService>();
+            builder.Services.TryAddSingleton<IJT809SubordinateLinkNotifyService, JT809SubordinateLinkNotifyImplService>();
             //从链路客户端
-            serviceDescriptors.TryAddSingleton<JT809SubordinateClient>();
+            builder.Services.TryAddSingleton<JT809SubordinateClient>();
             //主链路服务端
-            serviceDescriptors.AddHostedService<JT809MainServerHost>();
+            builder.Services.AddHostedService<JT809MainServerHost>();
             //上级平台webapi
-            serviceDescriptors.TryAddSingleton<JT809SuperiorWebAPIHandlerBase, JT809SuperiorWebAPIDefaultHandler>();
-            serviceDescriptors.TryAddScoped<JT809SuperiorWebAPIServerHandler>();
-            serviceDescriptors.AddHostedService<JT809MainWebAPIServerHost>();
-            return serviceDescriptors;
+            builder.Services.TryAddSingleton<JT809SuperiorWebAPIHandlerBase, JT809SuperiorWebAPIDefaultHandler>();
+            builder.Services.TryAddScoped<JT809SuperiorWebAPIServerHandler>();
+            builder.Services.AddHostedService<JT809MainWebAPIServerHost>();
+            return builder;
         }
     }
 }
\ No newline at end of file
diff --git a/src/JT809.DotNetty.Simples/Inferior/JT809.Inferior.Client/JT809InferiorService.cs b/src/JT809.DotNetty.Simples/Inferior/JT809.Inferior.Client/JT809InferiorService.cs
index 86f5423..777bf22 100644
--- a/src/JT809.DotNetty.Simples/Inferior/JT809.Inferior.Client/JT809InferiorService.cs
+++ b/src/JT809.DotNetty.Simples/Inferior/JT809.Inferior.Client/JT809InferiorService.cs
@@ -12,6 +12,7 @@ using JT809.Protocol.SubMessageBody;
 using JT809.Protocol.Metadata;
 using JT809.Protocol.MessageBody;
 using JT809.Protocol.Enums;
+using JT809.Protocol.Configs;
 
 namespace JT809.Inferior.Client
 {
@@ -19,10 +20,13 @@ namespace JT809.Inferior.Client
     {
         private readonly JT809MainClient mainClient;
         private readonly ILogger<JT809InferiorService> logger;
+        private readonly JT809HeaderOptions JT809HeaderOptions;
         public JT809InferiorService(
+            JT809HeaderOptions jT809HeaderOptions,
             ILoggerFactory loggerFactory,
             JT809MainClient mainClient)
         {
+            JT809HeaderOptions = jT809HeaderOptions;
             this.mainClient = mainClient;
             logger = loggerFactory.CreateLogger<JT809InferiorService>();
         }
@@ -68,7 +72,11 @@ namespace JT809.Inferior.Client
                             }
                         };
                         var package = JT809.Protocol.Enums.JT809BusinessType.主链路车辆动态信息交换业务.Create(jT809_0X1200);
-                        mainClient.SendAsync(new JT809Response(package, 256));
+                        package.Header.MsgGNSSCENTERID = JT809HeaderOptions.MsgGNSSCENTERID;
+                        package.Header.Version = JT809HeaderOptions.Version;
+                        package.Header.EncryptKey = JT809HeaderOptions.EncryptKey;
+                        package.Header.EncryptFlag = JT809HeaderOptions.EncryptFlag;
+                        mainClient.SendAsync(new JT809Response(package, 1024));
                         logger.LogDebug($"Thread:{Thread.CurrentThread.ManagedThreadId}-2s");
                         Thread.Sleep(2000);
                     }
@@ -103,7 +111,11 @@ namespace JT809.Inferior.Client
                             }
                         };
                         var package = JT809BusinessType.主链路车辆动态信息交换业务.Create(jT809_0X1200);
-                        mainClient.SendAsync(new JT809Response(package, 256));
+                        package.Header.MsgGNSSCENTERID = JT809HeaderOptions.MsgGNSSCENTERID;
+                        package.Header.Version = JT809HeaderOptions.Version;
+                        package.Header.EncryptKey = JT809HeaderOptions.EncryptKey;
+                        package.Header.EncryptFlag = JT809HeaderOptions.EncryptFlag;
+                        mainClient.SendAsync(new JT809Response(package, 1024));
                         logger.LogDebug($"Thread:{Thread.CurrentThread.ManagedThreadId}-4s");
                         Thread.Sleep(4000);
                     }
diff --git a/src/JT809.DotNetty.Simples/Inferior/JT809.Inferior.Client/Program.cs b/src/JT809.DotNetty.Simples/Inferior/JT809.Inferior.Client/Program.cs
index 92861f1..ba01597 100644
--- a/src/JT809.DotNetty.Simples/Inferior/JT809.Inferior.Client/Program.cs
+++ b/src/JT809.DotNetty.Simples/Inferior/JT809.Inferior.Client/Program.cs
@@ -1,6 +1,7 @@
 using JT809.DotNetty.Core;
 using JT809.DotNetty.Core.Handlers;
 using JT809.Protocol;
+using JT809.Protocol.Configs;
 using Microsoft.Extensions.Configuration;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.DependencyInjection.Extensions;
@@ -30,8 +31,14 @@ namespace JT809.Inferior.Client
                 {
                     services.AddSingleton<ILoggerFactory, LoggerFactory>();
                     services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
-                    services.AddJT809Configure();
-                    services.AddJT809Core(hostContext.Configuration)
+                    services.AddSingleton(new JT809HeaderOptions
+                    {
+                        MsgGNSSCENTERID = 20141013,
+                        Version = new JT809Header_Version(1, 0, 0),
+                        EncryptKey = 9595
+                    });
+                    services.AddJT809Configure()
+                            .AddJT809Core(hostContext.Configuration)
                             .AddJT809InferiorPlatformClient();
                     services.AddHostedService<JT809InferiorService>();
                 });
diff --git a/src/JT809.DotNetty.Simples/Inferior/JT809.Inferior.Server/Program.cs b/src/JT809.DotNetty.Simples/Inferior/JT809.Inferior.Server/Program.cs
index 6b6d53c..738730c 100644
--- a/src/JT809.DotNetty.Simples/Inferior/JT809.Inferior.Server/Program.cs
+++ b/src/JT809.DotNetty.Simples/Inferior/JT809.Inferior.Server/Program.cs
@@ -1,5 +1,7 @@
 using JT809.DotNetty.Core;
 using JT809.DotNetty.Core.Handlers;
+using JT809.Protocol;
+using JT809.Protocol.Configs;
 using Microsoft.Extensions.Configuration;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.DependencyInjection.Extensions;
@@ -7,8 +9,6 @@ using Microsoft.Extensions.Hosting;
 using Microsoft.Extensions.Logging;
 using System;
 using System.Threading.Tasks;
-using JT809.Protocol.Extensions.DependencyInjection;
-using JT809.Protocol.Extensions.DependencyInjection.Options;
 
 namespace JT809.Inferior.Server
 {
@@ -37,14 +37,14 @@ namespace JT809.Inferior.Server
                 {
                     services.AddSingleton<ILoggerFactory, LoggerFactory>();
                     services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
-                    services.AddJT809Configure(new JT809Options
+                    services.AddSingleton(new JT809HeaderOptions
                     {
-                         HeaderOptions=new Protocol.Configs.JT809HeaderOptions
-                         {
-                              MsgGNSSCENTERID=100210
-                         }
+                        MsgGNSSCENTERID = 20141013,
+                        Version = new JT809Header_Version(1, 0, 0),
+                        EncryptKey = 9595
                     });
-                    services.AddJT809Core(hostContext.Configuration)
+                    services.AddJT809Configure()
+                            .AddJT809Core(hostContext.Configuration)
                             .AddJT809InferiorPlatform(options: options => {
                                 options.TcpPort = 809;
                             });
diff --git a/src/JT809.DotNetty.Simples/Superior/JT809.Superior.Server/JT809.Superior.Server.csproj b/src/JT809.DotNetty.Simples/Superior/JT809.Superior.Server/JT809.Superior.Server.csproj
index 07ac93a..8c678f8 100644
--- a/src/JT809.DotNetty.Simples/Superior/JT809.Superior.Server/JT809.Superior.Server.csproj
+++ b/src/JT809.DotNetty.Simples/Superior/JT809.Superior.Server/JT809.Superior.Server.csproj
@@ -2,7 +2,7 @@
 
   <PropertyGroup>
     <OutputType>Exe</OutputType>
-    <TargetFramework>netcoreapp2.2</TargetFramework>
+    <TargetFramework>netcoreapp3.1</TargetFramework>
   </PropertyGroup>
 
   <ItemGroup>
diff --git a/src/JT809.DotNetty.Simples/Superior/JT809.Superior.Server/Program.cs b/src/JT809.DotNetty.Simples/Superior/JT809.Superior.Server/Program.cs
index 32d0dec..d699620 100644
--- a/src/JT809.DotNetty.Simples/Superior/JT809.Superior.Server/Program.cs
+++ b/src/JT809.DotNetty.Simples/Superior/JT809.Superior.Server/Program.cs
@@ -11,6 +11,7 @@ using Microsoft.Extensions.Logging;
 using System;
 using System.Threading.Tasks;
 using JT809.KafkaService;
+using JT809.Protocol;
 
 namespace JT809.Superior.Server
 {
@@ -35,9 +36,16 @@ namespace JT809.Superior.Server
                 {
                     services.AddSingleton<ILoggerFactory, LoggerFactory>();
                     services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
-                    services.AddJT809Core(hostContext.Configuration)
+                    services.AddSingleton(new JT809HeaderOptions
+                    {
+                        MsgGNSSCENTERID = 20141013,
+                        Version = new JT809Header_Version(1, 0, 0),
+                        EncryptKey = 9595
+                    });
+                    services.AddJT809Configure()
+                            .AddJT809Core(hostContext.Configuration)
                             .AddJT809SuperiorPlatform(options:options => {
-                                options.TcpPort = 808;
+                                options.TcpPort = 809;
                             });
                     services.Configure<JT809GpsOptions>(hostContext.Configuration.GetSection("JT809GpsOptions"));
                     services.AddJT809KafkaProducerService(hostContext.Configuration);
diff --git a/src/JT809.DotNetty.Simples/Superior/JT809.Superior.Server/appsettings.json b/src/JT809.DotNetty.Simples/Superior/JT809.Superior.Server/appsettings.json
index b548f32..9d2d070 100644
--- a/src/JT809.DotNetty.Simples/Superior/JT809.Superior.Server/appsettings.json
+++ b/src/JT809.DotNetty.Simples/Superior/JT809.Superior.Server/appsettings.json
@@ -15,7 +15,8 @@
   "JT809Configuration": {
     "SubordinateClientEnable": false
   },
-  "KafkaProducerConfig": {
+  "JT809ProducerConfig": {
+    "TopicName": "jt809",
     "BootstrapServers": "127.0.0.1:9092"
   },
   "JT809GpsOptions": {
diff --git a/src/JT809.DotNetty.Tests/JT809.DotNetty.Host.Test/Program.cs b/src/JT809.DotNetty.Tests/JT809.DotNetty.Host.Test/Program.cs
index 514a0d6..8f96d50 100644
--- a/src/JT809.DotNetty.Tests/JT809.DotNetty.Host.Test/Program.cs
+++ b/src/JT809.DotNetty.Tests/JT809.DotNetty.Host.Test/Program.cs
@@ -43,7 +43,8 @@ namespace JT809.DotNetty.Host.Test
                         Version = new JT809Header_Version(1, 0, 0),
                         EncryptKey = 9595
                     });
-                    services.AddJT809Core(hostContext.Configuration)
+                    services.AddJT809Configure()
+                            .AddJT809Core(hostContext.Configuration)
                             .AddJT809SuperiorPlatform(options:options=> {
                                 options.TcpPort = 839;
                              });