diff --git a/simples/JT808.DotNetty.SimpleClient/Program.cs b/simples/JT808.DotNetty.SimpleClient/Program.cs index 050a4f9..f2b9634 100644 --- a/simples/JT808.DotNetty.SimpleClient/Program.cs +++ b/simples/JT808.DotNetty.SimpleClient/Program.cs @@ -33,7 +33,7 @@ namespace JT808.DotNetty.SimpleClient services.AddJT808Configure() .AddJT808Client(); services.AddHostedService(); - services.AddHostedService(); + //services.AddHostedService(); }); await serverHostBuilder.RunConsoleAsync(); } diff --git a/simples/JT808.DotNetty.SimpleClient/Services/UpService.cs b/simples/JT808.DotNetty.SimpleClient/Services/UpService.cs index 6138a5a..de4cbb3 100644 --- a/simples/JT808.DotNetty.SimpleClient/Services/UpService.cs +++ b/simples/JT808.DotNetty.SimpleClient/Services/UpService.cs @@ -22,8 +22,10 @@ namespace JT808.DotNetty.SimpleClient.Services public Task StartAsync(CancellationToken cancellationToken) { - string sim = "11111111111"; + string sim = "11111111111"; JT808TcpClient client1 = jT808TcpClientFactory.Create(new JT808DeviceConfig(sim, "127.0.0.1", 808)); + string sim2 = "33333333333"; + JT808TcpClient client2 = jT808TcpClientFactory.Create(new JT808DeviceConfig(sim2, "127.0.0.1", 808)); Thread.Sleep(5000); //1.终端注册 client1.Send(JT808MsgId.终端注册.Create(sim, new JT808_0x0100() @@ -36,11 +38,26 @@ namespace JT808.DotNetty.SimpleClient.Services TerminalId = "Koike001", TerminalModel = "Koike001" })); + client2.Send(JT808MsgId.终端注册.Create(sim2, new JT808_0x0100() + { + PlateNo = "粤A12345", + PlateColor = 2, + AreaID = 0, + CityOrCountyId = 0, + MakerId = "Koike001", + TerminalId = "Koike001", + TerminalModel = "Koike001" + })); //2.终端鉴权 client1.Send(JT808MsgId.终端鉴权.Create(sim, new JT808_0x0102() { Code = "1234" })); + //2.终端鉴权 + client2.Send(JT808MsgId.终端鉴权.Create(sim2, new JT808_0x0102() + { + Code = "1234" + })); Task.Run(() => { while (true) { @@ -57,6 +74,17 @@ namespace JT808.DotNetty.SimpleClient.Services Altitude = 50, StatusFlag = 10 })); + client2.Send(JT808MsgId.位置信息汇报.Create(sim2, new JT808_0x0200() + { + Lat = 110000 + i, + Lng = 100000 + i, + GPSTime = DateTime.Now, + Speed = 50, + Direction = 30, + AlarmFlag = 5, + Altitude = 50, + StatusFlag = 10 + })); i++; Thread.Sleep(5000); } diff --git a/simples/JT808.DotNetty.SimpleQueueServer/JT808.DotNetty.SimpleQueueServer.csproj b/simples/JT808.DotNetty.SimpleQueueServer/JT808.DotNetty.SimpleQueueServer.csproj new file mode 100644 index 0000000..9f8b8be --- /dev/null +++ b/simples/JT808.DotNetty.SimpleQueueServer/JT808.DotNetty.SimpleQueueServer.csproj @@ -0,0 +1,22 @@ + + + + Exe + netcoreapp3.1 + + + + + Always + + + + + + + + + + + + diff --git a/simples/JT808.DotNetty.SimpleQueueServer/Program.cs b/simples/JT808.DotNetty.SimpleQueueServer/Program.cs new file mode 100644 index 0000000..1969612 --- /dev/null +++ b/simples/JT808.DotNetty.SimpleQueueServer/Program.cs @@ -0,0 +1,44 @@ +using JT808.DotNetty.Core; +using JT808.DotNetty.Tcp; +using JT808.DotNetty.Kafka; +using JT808.Protocol; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using System; +using System.Threading.Tasks; + +namespace JT808.DotNetty.SimpleQueueServer +{ + class Program + { + static async Task Main(string[] args) + { + var serverHostBuilder = new HostBuilder() + .ConfigureAppConfiguration((hostingContext, config) => + { + config.SetBasePath(AppDomain.CurrentDomain.BaseDirectory); + config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); + }) + .ConfigureLogging((context, logging) => + { + logging.AddConsole(); + logging.SetMinimumLevel(LogLevel.Trace); + }) + .ConfigureServices((hostContext, services) => + { + services.AddSingleton(); + services.AddSingleton(typeof(ILogger<>), typeof(Logger<>)); + services.AddJT808Configure() + .AddJT808NettyCore(hostContext.Configuration) + .AddJT808TcpNettyHost() + .AddJT808ServerKafkaMsgProducer(hostContext.Configuration) + .AddJT808ServerKafkaMsgReplyConsumer(hostContext.Configuration) + .Builder(); + }); + + await serverHostBuilder.RunConsoleAsync(); + } + } +} diff --git a/simples/JT808.DotNetty.SimpleQueueServer/appsettings.json b/simples/JT808.DotNetty.SimpleQueueServer/appsettings.json new file mode 100644 index 0000000..2c1f010 --- /dev/null +++ b/simples/JT808.DotNetty.SimpleQueueServer/appsettings.json @@ -0,0 +1,25 @@ +{ + "Logging": { + "IncludeScopes": false, + "Debug": { + "LogLevel": { + "Default": "Trace" + } + }, + "Console": { + "LogLevel": { + "Default": "Trace" + } + } + }, + "JT808MsgProducerConfig": { + "TopicName": "JT808NettyMsg", + "BootstrapServers": "127.0.0.1:9092" + }, + "JT808MsgReplyConsumerConfig": { + "TopicName": "JT808NettyMsgReply", + "EnableAutoCommit": true, + "GroupId": "JT808.NettyMsgReply", + "BootstrapServers": "127.0.0.1:9092" + } +} diff --git a/simples/JT808.DotNetty.SimpleQueueService/JT808.DotNetty.SimpleQueueService.csproj b/simples/JT808.DotNetty.SimpleQueueService/JT808.DotNetty.SimpleQueueService.csproj new file mode 100644 index 0000000..228c9e6 --- /dev/null +++ b/simples/JT808.DotNetty.SimpleQueueService/JT808.DotNetty.SimpleQueueService.csproj @@ -0,0 +1,24 @@ + + + + Exe + netcoreapp3.1 + + + + + Always + + + + + + + + + + + + + + diff --git a/simples/JT808.DotNetty.SimpleQueueService/Program.cs b/simples/JT808.DotNetty.SimpleQueueService/Program.cs new file mode 100644 index 0000000..2e7e159 --- /dev/null +++ b/simples/JT808.DotNetty.SimpleQueueService/Program.cs @@ -0,0 +1,39 @@ +using JT808.DotNetty.Kafka; +using JT808.DotNetty.ReplyMessage; +using JT808.Protocol; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using System; +using System.Threading.Tasks; + +namespace JT808.DotNetty.SimpleQueueService +{ + class Program + { + static async Task Main(string[] args) + { + var hostBuilder = new HostBuilder() + .ConfigureAppConfiguration((hostContext, config) => { + config.SetBasePath(AppDomain.CurrentDomain.BaseDirectory); + config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); + }) + .ConfigureLogging((hostContext, configLogging) => { + configLogging.AddConsole(); + configLogging.SetMinimumLevel(LogLevel.Trace); + }) + .ConfigureServices((hostContext, services) => { + services.AddSingleton(); + services.AddSingleton(typeof(ILogger<>), typeof(Logger<>)); + services.AddJT808Configure() + .AddJT808ClientKafka() + .AddMsgReplyConsumer(hostContext.Configuration) + .AddMsgReplyConsumer(hostContext.Configuration) + ; + }); + + await hostBuilder.RunConsoleAsync(); + } + } +} diff --git a/simples/JT808.DotNetty.SimpleQueueService/appsettings.json b/simples/JT808.DotNetty.SimpleQueueService/appsettings.json new file mode 100644 index 0000000..62d7485 --- /dev/null +++ b/simples/JT808.DotNetty.SimpleQueueService/appsettings.json @@ -0,0 +1,25 @@ +{ + "Logging": { + "IncludeScopes": false, + "Debug": { + "LogLevel": { + "Default": "Trace" + } + }, + "Console": { + "LogLevel": { + "Default": "Trace" + } + } + }, + "JT808MsgConsumerConfig": { + "TopicName": "JT808NettyMsg", + "EnableAutoCommit": true, + "GroupId": "JT808.NettyMsgHandler", + "BootstrapServers": "127.0.0.1:9092" + }, + "JT808MsgReplyProducerConfig": { + "TopicName": "JT808NettyMsgReply", + "BootstrapServers": "127.0.0.1:9092" + } +} diff --git a/simples/JT808.Gateway.SimpleServer/Impl/JT808NormalReplyMessageHandlerImpl.cs b/simples/JT808.Gateway.SimpleServer/Impl/JT808NormalReplyMessageHandlerImpl.cs index 1f8b8c9..3fb6604 100644 --- a/simples/JT808.Gateway.SimpleServer/Impl/JT808NormalReplyMessageHandlerImpl.cs +++ b/simples/JT808.Gateway.SimpleServer/Impl/JT808NormalReplyMessageHandlerImpl.cs @@ -3,6 +3,7 @@ using JT808.Gateway.MsgLogging; using JT808.Gateway.Traffic; using JT808.Gateway.Transmit; using JT808.Protocol; +using JT808.Protocol.Extensions; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; @@ -68,7 +69,8 @@ namespace JT808.Gateway.SimpleServer.Impl /// public override byte[] Msg0x0200(JT808HeaderPackage request, IJT808Session session) { - logger.LogDebug("重写自带Msg0x0200的消息"); + //logger.LogDebug("重写自带Msg0x0200的消息"); + logger.LogDebug($"重写自带Msg0x0200的消息{request.Header.TerminalPhoneNo}-{request.OriginalData.ToArray().ToHexString()}"); return base.Msg0x0200(request, session); } diff --git a/simples/JT808.Simples.sln b/simples/JT808.Simples.sln index fb23759..113e5e6 100644 --- a/simples/JT808.Simples.sln +++ b/simples/JT808.Simples.sln @@ -19,6 +19,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.SimpleQueueSe EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.SimpleQueueNotification", "JT808.Gateway.SimpleQueueNotification\JT808.Gateway.SimpleQueueNotification.csproj", "{163D2EE2-9A62-4E8A-B203-BF147909E89A}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JT808.DotNetty.SimpleQueueServer", "JT808.DotNetty.SimpleQueueServer\JT808.DotNetty.SimpleQueueServer.csproj", "{1DEAC7EA-D662-420B-A1A7-A6E840568F7B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JT808.DotNetty.SimpleQueueService", "JT808.DotNetty.SimpleQueueService\JT808.DotNetty.SimpleQueueService.csproj", "{90E1F1C9-A953-4341-9792-9E2AF4471B68}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -53,6 +57,14 @@ Global {163D2EE2-9A62-4E8A-B203-BF147909E89A}.Debug|Any CPU.Build.0 = Debug|Any CPU {163D2EE2-9A62-4E8A-B203-BF147909E89A}.Release|Any CPU.ActiveCfg = Release|Any CPU {163D2EE2-9A62-4E8A-B203-BF147909E89A}.Release|Any CPU.Build.0 = Release|Any CPU + {1DEAC7EA-D662-420B-A1A7-A6E840568F7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1DEAC7EA-D662-420B-A1A7-A6E840568F7B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1DEAC7EA-D662-420B-A1A7-A6E840568F7B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1DEAC7EA-D662-420B-A1A7-A6E840568F7B}.Release|Any CPU.Build.0 = Release|Any CPU + {90E1F1C9-A953-4341-9792-9E2AF4471B68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {90E1F1C9-A953-4341-9792-9E2AF4471B68}.Debug|Any CPU.Build.0 = Debug|Any CPU + {90E1F1C9-A953-4341-9792-9E2AF4471B68}.Release|Any CPU.ActiveCfg = Release|Any CPU + {90E1F1C9-A953-4341-9792-9E2AF4471B68}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -65,6 +77,8 @@ Global {8594AC7F-18B4-439D-B58B-1CEFF0833A1A} = {2459FB59-8A33-49A4-ADBC-A0B12C5886A6} {E2D1CFEF-417A-4C44-BC2E-E5A160602485} = {2459FB59-8A33-49A4-ADBC-A0B12C5886A6} {163D2EE2-9A62-4E8A-B203-BF147909E89A} = {2459FB59-8A33-49A4-ADBC-A0B12C5886A6} + {1DEAC7EA-D662-420B-A1A7-A6E840568F7B} = {2459FB59-8A33-49A4-ADBC-A0B12C5886A6} + {90E1F1C9-A953-4341-9792-9E2AF4471B68} = {2459FB59-8A33-49A4-ADBC-A0B12C5886A6} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {FC0FFCEA-E1EF-4C97-A1C5-F89418B6834B} diff --git a/src/JT808.DotNetty.Client/JT808TcpClient.cs b/src/JT808.DotNetty.Client/JT808TcpClient.cs index 366baa6..b51a4b4 100644 --- a/src/JT808.DotNetty.Client/JT808TcpClient.cs +++ b/src/JT808.DotNetty.Client/JT808TcpClient.cs @@ -42,7 +42,7 @@ namespace JT808.DotNetty.Client bootstrap.Group(group); bootstrap.Channel(); bootstrap - .Option(ChannelOption.Allocator, new PooledByteBufferAllocator()) + .Option(ChannelOption.Allocator, new UnpooledByteBufferAllocator()) .Handler(new ActionChannelInitializer(channel => { channel.Pipeline.AddLast("jt808TcpBuffer", new DelimiterBasedFrameDecoder(65535, diff --git a/src/JT808.DotNetty.Services.Tests/JT808.DotNetty.MsgIdHandler.Test/JT808DotNettyMsgIdHandlerDefaultImpl.cs b/src/JT808.DotNetty.Services.Tests/JT808.DotNetty.MsgIdHandler.Test/JT808DotNettyMsgIdHandlerDefaultImpl.cs index cfbf95e..de53c04 100644 --- a/src/JT808.DotNetty.Services.Tests/JT808.DotNetty.MsgIdHandler.Test/JT808DotNettyMsgIdHandlerDefaultImpl.cs +++ b/src/JT808.DotNetty.Services.Tests/JT808.DotNetty.MsgIdHandler.Test/JT808DotNettyMsgIdHandlerDefaultImpl.cs @@ -16,7 +16,7 @@ namespace JT808.DotNetty.MsgIdHandler.Test { public readonly ILogger logger; public JT808DotNettyMsgIdHandlerDefaultImpl(ILoggerFactory loggerFactory, - IServiceProvider serviceProvider) { + IServiceProvider serviceProvider) { logger = loggerFactory.CreateLogger(); Task.Run(()=> { while (true) diff --git a/src/JT808.DotNetty.Tcp/Handlers/JT808TcpConnectionHandler.cs b/src/JT808.DotNetty.Tcp/Handlers/JT808TcpConnectionHandler.cs index 1c8d464..be98063 100644 --- a/src/JT808.DotNetty.Tcp/Handlers/JT808TcpConnectionHandler.cs +++ b/src/JT808.DotNetty.Tcp/Handlers/JT808TcpConnectionHandler.cs @@ -46,6 +46,7 @@ namespace JT808.DotNetty.Tcp.Handlers string channelId = context.Channel.Id.AsShortText(); if (logger.IsEnabled(LogLevel.Debug)) logger.LogDebug($">>>{ channelId } The client disconnects from the server."); + base.ChannelInactive(context); base.CloseAsync(context); } diff --git a/src/JT808.DotNetty.Tcp/JT808TcpServerHost.cs b/src/JT808.DotNetty.Tcp/JT808TcpServerHost.cs index c19f31d..464ce88 100644 --- a/src/JT808.DotNetty.Tcp/JT808TcpServerHost.cs +++ b/src/JT808.DotNetty.Tcp/JT808TcpServerHost.cs @@ -47,6 +47,7 @@ namespace JT808.DotNetty.Tcp bossGroup = new DispatcherEventLoopGroup(); workerGroup = new WorkerEventLoopGroup(bossGroup, configuration.EventLoopCount); serverBufferAllocator = new PooledByteBufferAllocator(); + //serverBufferAllocator = new UnpooledByteBufferAllocator(); ServerBootstrap bootstrap = new ServerBootstrap(); bootstrap.Group(bossGroup, workerGroup); bootstrap.Channel(); diff --git a/src/JT808.DotNetty.Tests/JT808.DotNetty.Hosting/Program.cs b/src/JT808.DotNetty.Tests/JT808.DotNetty.Hosting/Program.cs index fc97731..c80d7d7 100644 --- a/src/JT808.DotNetty.Tests/JT808.DotNetty.Hosting/Program.cs +++ b/src/JT808.DotNetty.Tests/JT808.DotNetty.Hosting/Program.cs @@ -57,21 +57,21 @@ namespace JT808.DotNetty.Hosting .AddJT808WebApiNettyHost() //扩展webapi JT808MsgIdHttpHandlerBase //.ReplaceMsgIdHandler() + .Builder() + //添加kafka插件 + .AddJT808ServerKafkaMsgProducer(hostContext.Configuration) + .AddJT808ServerKafkaMsgReplyConsumer(hostContext.Configuration) + .AddJT808ServerKafkaSessionProducer(hostContext.Configuration) .Builder(); - //添加kafka插件 - //.AddJT808ServerKafkaMsgProducer(hostContext.Configuration) - //.AddJT808ServerKafkaMsgReplyConsumer(hostContext.Configuration) - //.AddJT808ServerKafkaSessionProducer(hostContext.Configuration) - //.Builder(); - //使用微软自带的webapi客户端 - //services.AddHttpClient("jt808webapi", c => - //{ - // c.BaseAddress = new Uri("http://localhost:828/"); - // c.DefaultRequestHeaders.Add("token", "123456); - //}) - //.AddTypedClient(); - //var client = services.BuildServiceProvider().GetRequiredService(); - //var result = client.GetTcpAtomicCounter(); + //使用微软自带的webapi客户端 + //services.AddHttpClient("jt808webapi", c => + //{ + // c.BaseAddress = new Uri("http://localhost:828/"); + // c.DefaultRequestHeaders.Add("token", "123456); + //}) + //.AddTypedClient(); + //var client = services.BuildServiceProvider().GetRequiredService(); + //var result = client.GetTcpAtomicCounter(); }); await serverHostBuilder.RunConsoleAsync();