From 18e02071f8cf92003e8e43e112b829d8b0a1d4b2 Mon Sep 17 00:00:00 2001 From: SmallChi <564952747@qq.com> Date: Tue, 26 Mar 2019 21:34:02 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=A2=9E=E5=8A=A0=E4=BD=BF=E7=94=A8=E6=A0=97?= =?UTF-8?q?=E5=AD=90=202.=E5=A2=9E=E5=8A=A0=E5=AE=A2=E6=88=B7=E7=AB=AF?= =?UTF-8?q?=E8=B0=83=E7=94=A8=E5=B7=A5=E5=85=B7=203.=E5=8D=87=E7=BA=A7?= =?UTF-8?q?=E5=AD=90=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 10 ++ doc/img/demo2.png | Bin 0 -> 110408 bytes .../JT808.DotNetty.SimpleClient.csproj | 19 +++ .../JT808.DotNetty.SimpleClient/Program.cs | 38 ++++++ .../Services/UpService.cs | 68 ++++++++++ .../Handlers/JT808MsgIdTcpSimpleHandler.cs | 58 ++++++++ .../JT808.DotNetty.SimpleServer.csproj | 25 ++++ .../JT808.DotNetty.SimpleServer/Program.cs | 44 ++++++ simples/JT808.DotNetty.Simples.sln | 125 ++++++++++++++++++ src/JT808.DotNetty.Client/JT808TcpClient.cs | 6 +- .../JT808TcpClientFactory.cs | 1 + .../JT808AtomicCounterServiceFactory.cs | 2 +- .../Services/JT808TrafficServiceFactory.cs | 2 +- src/JT808.DotNetty.sln | 16 +++ src/JT808.Protocol | 2 +- 15 files changed, 409 insertions(+), 7 deletions(-) create mode 100644 doc/img/demo2.png create mode 100644 simples/JT808.DotNetty.SimpleClient/JT808.DotNetty.SimpleClient.csproj create mode 100644 simples/JT808.DotNetty.SimpleClient/Program.cs create mode 100644 simples/JT808.DotNetty.SimpleClient/Services/UpService.cs create mode 100644 simples/JT808.DotNetty.SimpleServer/Handlers/JT808MsgIdTcpSimpleHandler.cs create mode 100644 simples/JT808.DotNetty.SimpleServer/JT808.DotNetty.SimpleServer.csproj create mode 100644 simples/JT808.DotNetty.SimpleServer/Program.cs create mode 100644 simples/JT808.DotNetty.Simples.sln diff --git a/README.md b/README.md index b6735ca..b46c952 100644 --- a/README.md +++ b/README.md @@ -108,3 +108,13 @@ static async Task Main(string[] args) 如图所示: ![demo1](https://github.com/SmallChi/JT808DotNetty/blob/master/doc/img/demo1.png) + +## 举个栗子2 + +1.拉取JT808子模块 +2.打开项目进行编译生成还原 +3.进入JT808.DotNetty.SimpleServer项目下的Debug目录运行服务端 +4.进入JT808.DotNetty.SimpleClient项目下的Debug目录运行客户端 + +如图所示: +![demo2](https://github.com/SmallChi/JT808DotNetty/blob/master/doc/img/demo2.png) \ No newline at end of file diff --git a/doc/img/demo2.png b/doc/img/demo2.png new file mode 100644 index 0000000000000000000000000000000000000000..04883b4d57cc5170ed42a37e52d62567e7a13cb0 GIT binary patch literal 110408 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

bB2Agyo#G;`OSap)Q8muXx%C` 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 (YCRQdwVt0j2b^r0`n8hovCsuaN zb~hdWc&PI|Ix3$~$~6fIi3u4giCgF5Qq4tcZZm(pH)Qupt5ZM?q5c~b^yl(ox`zxE z{>XxpHvNjdcU9w}suE?R1vm;f2|EU74pXf8276bM{{9qG`hw0GFcT(111T~at^og( MZ)+%)$(siMA2Is^HUIzs literal 0 HcmV?d00001 diff --git a/simples/JT808.DotNetty.SimpleClient/JT808.DotNetty.SimpleClient.csproj b/simples/JT808.DotNetty.SimpleClient/JT808.DotNetty.SimpleClient.csproj new file mode 100644 index 0000000..cef4e89 --- /dev/null +++ b/simples/JT808.DotNetty.SimpleClient/JT808.DotNetty.SimpleClient.csproj @@ -0,0 +1,19 @@ + + + + Exe + netcoreapp2.2 + 7.3 + + + + + + + + + + + + + diff --git a/simples/JT808.DotNetty.SimpleClient/Program.cs b/simples/JT808.DotNetty.SimpleClient/Program.cs new file mode 100644 index 0000000..2f549bb --- /dev/null +++ b/simples/JT808.DotNetty.SimpleClient/Program.cs @@ -0,0 +1,38 @@ +using JT808.DotNetty.Client; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using System; +using JT808.Protocol.MessageBody; +using System.Text; +using System.Threading.Tasks; +using System.Threading; +using Microsoft.Extensions.Hosting; +using JT808.DotNetty.SimpleClient.Services; + +namespace JT808.DotNetty.SimpleClient +{ + class Program + { + static async Task Main(string[] args) + { + var serverHostBuilder = new HostBuilder() + .ConfigureLogging((context, logging) => + { + logging.AddConsole(); + logging.SetMinimumLevel(LogLevel.Trace); + }) + .ConfigureServices((hostContext, services) => + { + services.AddSingleton(); + services.AddSingleton(typeof(ILogger<>), typeof(Logger<>)); + services.AddLogging(options => { + options.AddConsole(); + options.SetMinimumLevel(LogLevel.Trace); + }); + services.AddJT808Client(); + services.AddHostedService(); + }); + await serverHostBuilder.RunConsoleAsync(); + } + } +} diff --git a/simples/JT808.DotNetty.SimpleClient/Services/UpService.cs b/simples/JT808.DotNetty.SimpleClient/Services/UpService.cs new file mode 100644 index 0000000..f9251cd --- /dev/null +++ b/simples/JT808.DotNetty.SimpleClient/Services/UpService.cs @@ -0,0 +1,68 @@ +using JT808.DotNetty.Client; +using JT808.Protocol.MessageBody; +using Microsoft.Extensions.Hosting; +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace JT808.DotNetty.SimpleClient.Services +{ + public class UpService : IHostedService + { + private readonly IJT808TcpClientFactory jT808TcpClientFactory; + + public UpService(IJT808TcpClientFactory jT808TcpClientFactory) + { + this.jT808TcpClientFactory = jT808TcpClientFactory; + } + + public Task StartAsync(CancellationToken cancellationToken) + { + JT808TcpClient client1 = jT808TcpClientFactory.Create(new DeviceConfig("12345678910", "127.0.0.1", 12808)); + //1.终端注册 + client1.Send(new JT808_0x0100() + { + PlateNo = "粤A12345", + PlateColor = 2, + AreaID = 0, + CityOrCountyId = 0, + MakerId = "Koike001", + TerminalId = "Koike001", + TerminalModel = "Koike001" + }); + //2.终端鉴权 + client1.Send(new JT808_0x0102() + { + Code = "1234" + }); + Task.Run(() => { + while (true) + { + var i = 0; + //3.每30秒发一次 + client1.Send(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(30000); + } + }); + return Task.CompletedTask; + } + + public Task StopAsync(CancellationToken cancellationToken) + { + return Task.CompletedTask; + } + } +} diff --git a/simples/JT808.DotNetty.SimpleServer/Handlers/JT808MsgIdTcpSimpleHandler.cs b/simples/JT808.DotNetty.SimpleServer/Handlers/JT808MsgIdTcpSimpleHandler.cs new file mode 100644 index 0000000..f0b0396 --- /dev/null +++ b/simples/JT808.DotNetty.SimpleServer/Handlers/JT808MsgIdTcpSimpleHandler.cs @@ -0,0 +1,58 @@ +using JT808.DotNetty.Core; +using JT808.DotNetty.Core.Handlers; +using JT808.DotNetty.Core.Metadata; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Text; + +namespace JT808.DotNetty.SimpleServer.Handlers +{ + public class JT808MsgIdTcpSimpleHandler : JT808MsgIdTcpHandlerBase + { + public JT808MsgIdTcpSimpleHandler( + ILoggerFactory loggerFactory, + JT808TcpSessionManager sessionManager) : base(sessionManager) + { + logger = loggerFactory.CreateLogger(); + } + + private readonly ILogger logger; + + public override JT808Response Msg0x0200(JT808Request request) + { + logger.LogDebug("Tcp_Msg0x0200"); + return base.Msg0x0200(request); + } + + public override JT808Response Msg0x0001(JT808Request request) + { + logger.LogDebug("Tcp_Msg0x0001"); + return base.Msg0x0001(request); + } + + public override JT808Response Msg0x0002(JT808Request request) + { + logger.LogDebug("Tcp_Msg0x0002"); + return base.Msg0x0002(request); + } + + public override JT808Response Msg0x0003(JT808Request request) + { + logger.LogDebug("Tcp_Msg0x0003"); + return base.Msg0x0003(request); + } + + public override JT808Response Msg0x0100(JT808Request request) + { + logger.LogDebug("Tcp_Msg0x0100"); + return base.Msg0x0100(request); + } + + public override JT808Response Msg0x0102(JT808Request request) + { + logger.LogDebug("Tcp_Msg0x0102"); + return base.Msg0x0102(request); + } + } +} diff --git a/simples/JT808.DotNetty.SimpleServer/JT808.DotNetty.SimpleServer.csproj b/simples/JT808.DotNetty.SimpleServer/JT808.DotNetty.SimpleServer.csproj new file mode 100644 index 0000000..d34d6bc --- /dev/null +++ b/simples/JT808.DotNetty.SimpleServer/JT808.DotNetty.SimpleServer.csproj @@ -0,0 +1,25 @@ + + + + Exe + netcoreapp2.2 + 7.3 + + + + + + + + + + + + + + + Always + + + + diff --git a/simples/JT808.DotNetty.SimpleServer/Program.cs b/simples/JT808.DotNetty.SimpleServer/Program.cs new file mode 100644 index 0000000..48793eb --- /dev/null +++ b/simples/JT808.DotNetty.SimpleServer/Program.cs @@ -0,0 +1,44 @@ + +using JT808.DotNetty.Core; +using JT808.DotNetty.Core.Handlers; +using JT808.DotNetty.SimpleServer.Handlers; +using JT808.DotNetty.Tcp; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using System; +using System.Threading.Tasks; + +namespace JT808.DotNetty.SimpleServer +{ + 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.AddJT808Core(hostContext.Configuration) + .AddJT808TcpHost(); + // 自定义Tcp消息处理业务 + services.Replace(new ServiceDescriptor(typeof(JT808MsgIdTcpHandlerBase), typeof(JT808MsgIdTcpSimpleHandler), ServiceLifetime.Singleton)); + }); + + await serverHostBuilder.RunConsoleAsync(); + } + } +} diff --git a/simples/JT808.DotNetty.Simples.sln b/simples/JT808.DotNetty.Simples.sln new file mode 100644 index 0000000..7619fac --- /dev/null +++ b/simples/JT808.DotNetty.Simples.sln @@ -0,0 +1,125 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28307.168 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{B5A80356-5AF6-449F-9D8B-3C1BBB9D2443}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Protocol", "..\src\JT808.Protocol\src\JT808.Protocol\JT808.Protocol.csproj", "{9FCA2EE9-8253-41AA-A64C-9883413864F9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.Udp", "..\src\JT808.DotNetty.Udp\JT808.DotNetty.Udp.csproj", "{C960084C-2CF4-4748-AD35-D2384285D6A3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.Core", "..\src\JT808.DotNetty.Core\JT808.DotNetty.Core.csproj", "{67C5DC72-0004-48B3-BB5A-9CB7069B4F02}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.Abstractions", "..\src\JT808.DotNetty.Abstractions\JT808.DotNetty.Abstractions.csproj", "{4DCF33C0-67C5-4179-AF1E-4E919F9F856D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{3BD7FF02-8516-4A77-A385-9FDCDD792E22}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.Tcp", "..\src\JT808.DotNetty.Tcp\JT808.DotNetty.Tcp.csproj", "{330CD783-5564-4083-ABFC-573CDC369F50}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.WebApi", "..\src\JT808.DotNetty.WebApi\JT808.DotNetty.WebApi.csproj", "{B783DE53-CE2A-4225-921F-04E5E57B28F3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.Core.Test", "..\src\JT808.DotNetty.Tests\JT808.DotNetty.Core.Test\JT808.DotNetty.Core.Test.csproj", "{1C4CCE9B-761B-4581-B5DA-5B6D83572D56}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.Tcp.Test", "..\src\JT808.DotNetty.Tests\JT808.DotNetty.Tcp.Test\JT808.DotNetty.Tcp.Test.csproj", "{AEF1E1E2-C861-4268-86F6-6F376FAF79A7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.Udp.Test", "..\src\JT808.DotNetty.Tests\JT808.DotNetty.Udp.Test\JT808.DotNetty.Udp.Test.csproj", "{E503BFD8-D90A-4610-97C7-5B9A0497303B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.WebApi.Test", "..\src\JT808.DotNetty.Tests\JT808.DotNetty.WebApi.Test\JT808.DotNetty.WebApi.Test.csproj", "{EDE77A29-0840-450C-8B08-2D3388845AE5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.Hosting", "..\src\JT808.DotNetty.Tests\JT808.DotNetty.Hosting\JT808.DotNetty.Hosting.csproj", "{A0F2F006-5AEB-454E-83C5-ABFB58DE17A9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.WebApiClientTool", "..\src\JT808.DotNetty.WebApiClientTool\JT808.DotNetty.WebApiClientTool.csproj", "{9D86C951-94F2-4CBD-B177-8AF31DDB05D8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.Client", "..\src\JT808.DotNetty.Client\JT808.DotNetty.Client.csproj", "{87C08239-C57F-4FC5-9579-05D0723AA4A0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "simples", "simples", "{2459FB59-8A33-49A4-ADBC-A0B12C5886A6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.SimpleClient", "JT808.DotNetty.SimpleClient\JT808.DotNetty.SimpleClient.csproj", "{E6F61CE8-BFB4-4946-A0D3-AECCE77824E5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.SimpleServer", "JT808.DotNetty.SimpleServer\JT808.DotNetty.SimpleServer.csproj", "{CCE6AEFB-1AB0-4BD9-8EA2-8B4CDD097E88}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9FCA2EE9-8253-41AA-A64C-9883413864F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9FCA2EE9-8253-41AA-A64C-9883413864F9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9FCA2EE9-8253-41AA-A64C-9883413864F9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9FCA2EE9-8253-41AA-A64C-9883413864F9}.Release|Any CPU.Build.0 = Release|Any CPU + {C960084C-2CF4-4748-AD35-D2384285D6A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C960084C-2CF4-4748-AD35-D2384285D6A3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C960084C-2CF4-4748-AD35-D2384285D6A3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C960084C-2CF4-4748-AD35-D2384285D6A3}.Release|Any CPU.Build.0 = Release|Any CPU + {67C5DC72-0004-48B3-BB5A-9CB7069B4F02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {67C5DC72-0004-48B3-BB5A-9CB7069B4F02}.Debug|Any CPU.Build.0 = Debug|Any CPU + {67C5DC72-0004-48B3-BB5A-9CB7069B4F02}.Release|Any CPU.ActiveCfg = Release|Any CPU + {67C5DC72-0004-48B3-BB5A-9CB7069B4F02}.Release|Any CPU.Build.0 = Release|Any CPU + {4DCF33C0-67C5-4179-AF1E-4E919F9F856D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4DCF33C0-67C5-4179-AF1E-4E919F9F856D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4DCF33C0-67C5-4179-AF1E-4E919F9F856D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4DCF33C0-67C5-4179-AF1E-4E919F9F856D}.Release|Any CPU.Build.0 = Release|Any CPU + {330CD783-5564-4083-ABFC-573CDC369F50}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {330CD783-5564-4083-ABFC-573CDC369F50}.Debug|Any CPU.Build.0 = Debug|Any CPU + {330CD783-5564-4083-ABFC-573CDC369F50}.Release|Any CPU.ActiveCfg = Release|Any CPU + {330CD783-5564-4083-ABFC-573CDC369F50}.Release|Any CPU.Build.0 = Release|Any CPU + {B783DE53-CE2A-4225-921F-04E5E57B28F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B783DE53-CE2A-4225-921F-04E5E57B28F3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B783DE53-CE2A-4225-921F-04E5E57B28F3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B783DE53-CE2A-4225-921F-04E5E57B28F3}.Release|Any CPU.Build.0 = Release|Any CPU + {1C4CCE9B-761B-4581-B5DA-5B6D83572D56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1C4CCE9B-761B-4581-B5DA-5B6D83572D56}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1C4CCE9B-761B-4581-B5DA-5B6D83572D56}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1C4CCE9B-761B-4581-B5DA-5B6D83572D56}.Release|Any CPU.Build.0 = Release|Any CPU + {AEF1E1E2-C861-4268-86F6-6F376FAF79A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AEF1E1E2-C861-4268-86F6-6F376FAF79A7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AEF1E1E2-C861-4268-86F6-6F376FAF79A7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AEF1E1E2-C861-4268-86F6-6F376FAF79A7}.Release|Any CPU.Build.0 = Release|Any CPU + {E503BFD8-D90A-4610-97C7-5B9A0497303B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E503BFD8-D90A-4610-97C7-5B9A0497303B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E503BFD8-D90A-4610-97C7-5B9A0497303B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E503BFD8-D90A-4610-97C7-5B9A0497303B}.Release|Any CPU.Build.0 = Release|Any CPU + {EDE77A29-0840-450C-8B08-2D3388845AE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EDE77A29-0840-450C-8B08-2D3388845AE5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EDE77A29-0840-450C-8B08-2D3388845AE5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EDE77A29-0840-450C-8B08-2D3388845AE5}.Release|Any CPU.Build.0 = Release|Any CPU + {A0F2F006-5AEB-454E-83C5-ABFB58DE17A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A0F2F006-5AEB-454E-83C5-ABFB58DE17A9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A0F2F006-5AEB-454E-83C5-ABFB58DE17A9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A0F2F006-5AEB-454E-83C5-ABFB58DE17A9}.Release|Any CPU.Build.0 = Release|Any CPU + {9D86C951-94F2-4CBD-B177-8AF31DDB05D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9D86C951-94F2-4CBD-B177-8AF31DDB05D8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9D86C951-94F2-4CBD-B177-8AF31DDB05D8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9D86C951-94F2-4CBD-B177-8AF31DDB05D8}.Release|Any CPU.Build.0 = Release|Any CPU + {87C08239-C57F-4FC5-9579-05D0723AA4A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {87C08239-C57F-4FC5-9579-05D0723AA4A0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {87C08239-C57F-4FC5-9579-05D0723AA4A0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {87C08239-C57F-4FC5-9579-05D0723AA4A0}.Release|Any CPU.Build.0 = Release|Any CPU + {E6F61CE8-BFB4-4946-A0D3-AECCE77824E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E6F61CE8-BFB4-4946-A0D3-AECCE77824E5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E6F61CE8-BFB4-4946-A0D3-AECCE77824E5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E6F61CE8-BFB4-4946-A0D3-AECCE77824E5}.Release|Any CPU.Build.0 = Release|Any CPU + {CCE6AEFB-1AB0-4BD9-8EA2-8B4CDD097E88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CCE6AEFB-1AB0-4BD9-8EA2-8B4CDD097E88}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CCE6AEFB-1AB0-4BD9-8EA2-8B4CDD097E88}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CCE6AEFB-1AB0-4BD9-8EA2-8B4CDD097E88}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {9FCA2EE9-8253-41AA-A64C-9883413864F9} = {B5A80356-5AF6-449F-9D8B-3C1BBB9D2443} + {1C4CCE9B-761B-4581-B5DA-5B6D83572D56} = {3BD7FF02-8516-4A77-A385-9FDCDD792E22} + {AEF1E1E2-C861-4268-86F6-6F376FAF79A7} = {3BD7FF02-8516-4A77-A385-9FDCDD792E22} + {E503BFD8-D90A-4610-97C7-5B9A0497303B} = {3BD7FF02-8516-4A77-A385-9FDCDD792E22} + {EDE77A29-0840-450C-8B08-2D3388845AE5} = {3BD7FF02-8516-4A77-A385-9FDCDD792E22} + {A0F2F006-5AEB-454E-83C5-ABFB58DE17A9} = {3BD7FF02-8516-4A77-A385-9FDCDD792E22} + {E6F61CE8-BFB4-4946-A0D3-AECCE77824E5} = {2459FB59-8A33-49A4-ADBC-A0B12C5886A6} + {CCE6AEFB-1AB0-4BD9-8EA2-8B4CDD097E88} = {2459FB59-8A33-49A4-ADBC-A0B12C5886A6} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {FC0FFCEA-E1EF-4C97-A1C5-F89418B6834B} + EndGlobalSection +EndGlobal diff --git a/src/JT808.DotNetty.Client/JT808TcpClient.cs b/src/JT808.DotNetty.Client/JT808TcpClient.cs index f3a370b..510e1d0 100644 --- a/src/JT808.DotNetty.Client/JT808TcpClient.cs +++ b/src/JT808.DotNetty.Client/JT808TcpClient.cs @@ -56,10 +56,8 @@ namespace JT808.DotNetty.Client channel.Pipeline.AddLast("jt808TcpClientConnection", new JT808TcpClientConnectionHandler(this)); channel.Pipeline.AddLast("jt808TcpService", new JT808TcpClientHandler(this)); })); - Task.Run(async () => - { - clientChannel = await bootstrap.ConnectAsync(deviceConfig.TcpHost, deviceConfig.TcpPort); - }); + + clientChannel = bootstrap.ConnectAsync(IPAddress.Parse(DeviceConfig.TcpHost), DeviceConfig.TcpPort).Result; } public async void Send(JT808ClientRequest request) diff --git a/src/JT808.DotNetty.Client/JT808TcpClientFactory.cs b/src/JT808.DotNetty.Client/JT808TcpClientFactory.cs index e9de208..a3c9e82 100644 --- a/src/JT808.DotNetty.Client/JT808TcpClientFactory.cs +++ b/src/JT808.DotNetty.Client/JT808TcpClientFactory.cs @@ -2,6 +2,7 @@ using System.Collections.Concurrent; using System.Collections.Generic; using System.Text; +using System.Threading; namespace JT808.DotNetty.Client { diff --git a/src/JT808.DotNetty.Core/Services/JT808AtomicCounterServiceFactory.cs b/src/JT808.DotNetty.Core/Services/JT808AtomicCounterServiceFactory.cs index b3c30c4..7878ac4 100644 --- a/src/JT808.DotNetty.Core/Services/JT808AtomicCounterServiceFactory.cs +++ b/src/JT808.DotNetty.Core/Services/JT808AtomicCounterServiceFactory.cs @@ -8,7 +8,7 @@ namespace JT808.DotNetty.Core.Services { private readonly ConcurrentDictionary cache; - private JT808AtomicCounterServiceFactory() + public JT808AtomicCounterServiceFactory() { cache = new ConcurrentDictionary(); } diff --git a/src/JT808.DotNetty.Core/Services/JT808TrafficServiceFactory.cs b/src/JT808.DotNetty.Core/Services/JT808TrafficServiceFactory.cs index 15b49e4..7d9238f 100644 --- a/src/JT808.DotNetty.Core/Services/JT808TrafficServiceFactory.cs +++ b/src/JT808.DotNetty.Core/Services/JT808TrafficServiceFactory.cs @@ -11,7 +11,7 @@ namespace JT808.DotNetty.Core.Services { private readonly ConcurrentDictionary cache; - private JT808TrafficServiceFactory() + public JT808TrafficServiceFactory() { cache = new ConcurrentDictionary(); } diff --git a/src/JT808.DotNetty.sln b/src/JT808.DotNetty.sln index db6e6cb..078c561 100644 --- a/src/JT808.DotNetty.sln +++ b/src/JT808.DotNetty.sln @@ -33,6 +33,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.WebApiClient EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.Client", "JT808.DotNetty.Client\JT808.DotNetty.Client.csproj", "{87C08239-C57F-4FC5-9579-05D0723AA4A0}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "simples", "simples", "{2459FB59-8A33-49A4-ADBC-A0B12C5886A6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JT808.DotNetty.SimpleClient", "..\simples\JT808.DotNetty.SimpleClient\JT808.DotNetty.SimpleClient.csproj", "{E6F61CE8-BFB4-4946-A0D3-AECCE77824E5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JT808.DotNetty.SimpleServer", "..\simples\JT808.DotNetty.SimpleServer\JT808.DotNetty.SimpleServer.csproj", "{CCE6AEFB-1AB0-4BD9-8EA2-8B4CDD097E88}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -91,6 +97,14 @@ Global {87C08239-C57F-4FC5-9579-05D0723AA4A0}.Debug|Any CPU.Build.0 = Debug|Any CPU {87C08239-C57F-4FC5-9579-05D0723AA4A0}.Release|Any CPU.ActiveCfg = Release|Any CPU {87C08239-C57F-4FC5-9579-05D0723AA4A0}.Release|Any CPU.Build.0 = Release|Any CPU + {E6F61CE8-BFB4-4946-A0D3-AECCE77824E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E6F61CE8-BFB4-4946-A0D3-AECCE77824E5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E6F61CE8-BFB4-4946-A0D3-AECCE77824E5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E6F61CE8-BFB4-4946-A0D3-AECCE77824E5}.Release|Any CPU.Build.0 = Release|Any CPU + {CCE6AEFB-1AB0-4BD9-8EA2-8B4CDD097E88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CCE6AEFB-1AB0-4BD9-8EA2-8B4CDD097E88}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CCE6AEFB-1AB0-4BD9-8EA2-8B4CDD097E88}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CCE6AEFB-1AB0-4BD9-8EA2-8B4CDD097E88}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -102,6 +116,8 @@ Global {E503BFD8-D90A-4610-97C7-5B9A0497303B} = {3BD7FF02-8516-4A77-A385-9FDCDD792E22} {EDE77A29-0840-450C-8B08-2D3388845AE5} = {3BD7FF02-8516-4A77-A385-9FDCDD792E22} {A0F2F006-5AEB-454E-83C5-ABFB58DE17A9} = {3BD7FF02-8516-4A77-A385-9FDCDD792E22} + {E6F61CE8-BFB4-4946-A0D3-AECCE77824E5} = {2459FB59-8A33-49A4-ADBC-A0B12C5886A6} + {CCE6AEFB-1AB0-4BD9-8EA2-8B4CDD097E88} = {2459FB59-8A33-49A4-ADBC-A0B12C5886A6} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {FC0FFCEA-E1EF-4C97-A1C5-F89418B6834B} diff --git a/src/JT808.Protocol b/src/JT808.Protocol index a233a19..f0a1c92 160000 --- a/src/JT808.Protocol +++ b/src/JT808.Protocol @@ -1 +1 @@ -Subproject commit a233a19a246af895234a4de684cb9a0ed3864ab1 +Subproject commit f0a1c9255c52540af52fdc679f67380b442fce36