diff --git a/README.md b/README.md index d54bf37..87c262e 100644 --- a/README.md +++ b/README.md @@ -31,11 +31,7 @@ ### 2.集成WebApi服务器 -#### [2.1.统一下发设备消息服务 IJT808UnificationSendService](#send) - -#### [2.2.管理会话服务 IJT808SessionService](#session) - -#### [2.3.消息包计数服务 JT808AtomicCounterService 接口尚未实现](#counter) +[WebApi接口服务](https://github.com/SmallChi/JT808DotNetty/blob/master/api/README.md) ### 3.集成业务消息处理程序 @@ -45,7 +41,7 @@ ### 举个栗子1 -#### 1.实现业务消息处理程序JT808MsgIdHandlerBase +#### 3.1.实现业务消息处理程序JT808MsgIdHandlerBase ```business Imp public class JT808MsgIdCustomHandler : JT808MsgIdHandlerBase @@ -66,18 +62,21 @@ public class JT808MsgIdCustomHandler : JT808MsgIdHandlerBase } ``` -#### 2.自定义业务消息处理程序替换默认实现 -``` +#### 3.2.自定义业务消息处理程序替换默认实现 + +``` handler services.Replace(new ServiceDescriptor(typeof(JT808MsgIdHandlerBase), typeof(JT808MsgIdCustomHandler), ServiceLifetime.Singleton)); ``` -#### 3.使用JT808 Host + +#### 3.3.使用JT808 Host ``` host UseJT808Host() ``` -#### 4.完整示例 +#### 3.4.完整示例 + ``` demo // 默认网关端口:808 // 默认webapi端口:828 @@ -103,159 +102,4 @@ static async Task Main(string[] args) .UseJT808Host(); await serverHostBuilder.RunConsoleAsync(); } -``` - -## 提供WebApi接口服务(默认端口828) - -基地址:http://localhost:828/jt808api/ - -数据格式:只支持Json格式 - -#### 统一对象返回 JT808ResultDto\ - -|属性|数据类型|参数说明| -|:------:|:------:|:------| -| Message| string| 消息描述| -| Code| int| 状态码| -| Data| T(泛型)| 数据| - -返回Code[状态码]说明: - -|状态码|说明| -|:------:|:------:| -| 200 | 返回成功 | -| 201 | 内容为空 | -| 404 | 没有该服务 | -| 500 | 服务内部错误 | - -#### 统一下发设备消息接口 - -请求地址:UnificationSend - -请求方式:POST - -请求参数: - -|属性|数据类型|参数说明| -|:------:|:------:|:------| -| TerminalPhoneNo| string| 设备终端号| -| Data| byte[]| JT808 byte[]数组| - -返回数据: - -|属性|数据类型|参数说明| -|:------:|:------:|:------| -| Data| bool| 是否成功| - -返回结果: -``` result1 -{ - "Message":"", - "Code":200, - "Data":true -} -``` -#### 会话服务接口 - -##### 统一会话信息对象返回 JT808SessionInfoDto - -|属性|数据类型|参数说明| -|:------:|:------:|:------| -| ChannelId| string| 通道Id| -| LastActiveTime| DateTime| 最后上线时间| -| StartTime| DateTime| 上线时间| -| TerminalPhoneNo|string| 终端手机号| -| LoaclAddressIP| string| 本地ip地址| -| WebApiPort| string| WebApi端口号| -| RemoteAddressIP| string| 远程ip地址| - -##### 1.获取会话集合 - -请求地址:Session/GetAll - -请求方式:GET - -返回数据: - -|属性|数据类型|参数说明| -|:------:|:------:|:------| -| Data| List\ | 实际会话信息集合 | - -返回结果: -``` session1 -{ - "Message":"", - "Code":200, - "Data":[ - { - "ChannelId":"eadad23", - "LastActiveTime":"2018-11-27 20:00:00", - "StartTime":"2018-11-25 20:00:00", - "TerminalPhoneNo":"123456789012", - "LoaclAddressIP":"127.0.0.1:808", - "WebApiPort":828, - "RemoteAddressIP":"127.0.0.1:11808" - },{ - "ChannelId":"eadad23", - "LastActiveTime":"2018-11-27 20:00:00", - "StartTime":"2018-11-25 20:00:00", - "TerminalPhoneNo":"123456789013", - "LoaclAddressIP":"127.0.0.1:808", - "WebApiPort":828, - "RemoteAddressIP":"127.0.0.1:11808" - } - ] -} -``` -##### 2.通过通道Id移除对应会话 - -请求地址:Session/RemoveByChannelId - -请求方式:POST - -请求参数: - -|属性|数据类型|参数说明| -|:------:|:------:|:------| -| channelId| string| 通道Id| - -返回数据: - -|属性|数据类型|参数说明| -|:------:|:------:|:------| -| Data| bool | 是否成功 | - -返回结果: -``` session2 -{ - "Message":"", - "Code":200, - "Data":true -} -``` -##### 3.通过设备终端号移除对应会话 - -请求地址:Session/RemoveByTerminalPhoneNo - -请求方式:POST - -请求参数: - -|属性|数据类型|参数说明| -|:------:|:------:|:------| -| terminalPhoneNo| string| 设备终端号| - -返回数据: - -|属性|数据类型|参数说明| -|:------:|:------:|:------| -| Data| bool | 是否成功 - -返回结果: -``` session3 -{ - "Message":"", - "Code":200, - "Data":true -} -``` +``` \ No newline at end of file diff --git a/api/README.md b/api/README.md new file mode 100644 index 0000000..3bc3590 --- /dev/null +++ b/api/README.md @@ -0,0 +1,384 @@ +# JT808 WebApi服务 + +基地址:http://localhost:828/jt808api/ + +数据格式:只支持Json格式 + +默认端口:828 + +## [统一下发设备消息服务](#send) + +## [管理会话服务](#session) + +## [原包分发器通道服务](#sourcepackage) + +## [转发地址过滤服务](#transmit) + +## [消息包计数服务](#counter) + +### 统一对象返回 JT808ResultDto\ + +|属性|数据类型|参数说明| +|:------:|:------:|:------| +| Message| string| 消息描述| +| Code| int| 状态码| +| Data| T(泛型)| 数据| + +返回Code[状态码]说明: + +|状态码|说明| +|:------:|:------:| +| 200 | 返回成功 | +| 201 | 内容为空 | +| 404 | 没有该服务 | +| 500 | 服务内部错误 | + +### 统一下发设备消息接口 + +请求地址:UnificationSend + +请求方式:POST + +请求参数: + +|属性|数据类型|参数说明| +|------|:------:|:------| +| TerminalPhoneNo| string| 设备终端号| +| Data| byte[]| JT808 byte[]数组| + +返回数据: + +|属性|数据类型|参数说明| +|:------:|:------:|:------| +| Data| bool| 是否成功| + +返回结果: + +``` result1 +{ + "Message":"", + "Code":200, + "Data":true +} +``` + +### 会话服务接口 + +#### 统一会话信息对象返回 JT808SessionInfoDto + +|属性|数据类型|参数说明| +|------|------|------| +| ChannelId| string| 通道Id| +| LastActiveTime| DateTime| 最后上线时间| +| StartTime| DateTime| 上线时间| +| TerminalPhoneNo|string| 终端手机号| +| LoaclAddressIP| string| 本地ip地址| +| WebApiPort| string| WebApi端口号| +| RemoteAddressIP| string| 远程ip地址| + +#### 1.获取会话集合 + +请求地址:Session/GetAll + +请求方式:GET + +返回数据: + +|属性|数据类型|参数说明| +|:------:|:------:|:------| +| Data| List\ | 实际会话信息集合 | + +返回结果: + +``` session1 +{ + "Message":"", + "Code":200, + "Data":[ + { + "ChannelId":"eadad23", + "LastActiveTime":"2018-11-27 20:00:00", + "StartTime":"2018-11-25 20:00:00", + "TerminalPhoneNo":"123456789012", + "LoaclAddressIP":"127.0.0.1:808", + "WebApiPort":828, + "RemoteAddressIP":"127.0.0.1:11808" + },{ + "ChannelId":"eadad23", + "LastActiveTime":"2018-11-27 20:00:00", + "StartTime":"2018-11-25 20:00:00", + "TerminalPhoneNo":"123456789013", + "LoaclAddressIP":"127.0.0.1:808", + "WebApiPort":828, + "RemoteAddressIP":"127.0.0.1:11808" + } + ] +} +``` + +#### 2.通过通道Id移除对应会话 + +请求地址:Session/RemoveByChannelId + +请求方式:POST + +请求参数: + +|属性|数据类型|参数说明| +|:------:|:------:|:------| +| channelId| string| 通道Id| + +返回数据: + +|属性|数据类型|参数说明| +|:------:|:------:|:------| +| Data| bool | 是否成功 | + +返回结果: + +``` session2 +{ + "Message":"", + "Code":200, + "Data":true +} +``` + +#### 3.通过设备终端号移除对应会话 + +请求地址:Session/RemoveByTerminalPhoneNo + +请求方式:POST + +请求参数: + +|属性|数据类型|参数说明| +|:------:|:------:|:------| +| terminalPhoneNo| string| 设备终端号| + +返回数据: + +|属性|数据类型|参数说明| +|:------:|:------:|:------| +| Data| bool | 是否成功 + +返回结果: + +``` session3 +{ + "Message":"", + "Code":200, + "Data":true +} +``` + +### 原包分发器通道服务 + +#### 1.添加原包转发地址 + +请求地址:SourcePackage/Add + +请求方式:POST + +请求参数: + +|属性|数据类型|参数说明| +|:------:|:------:|:------| +| Host| string| ip地址| +| Port| int| 端口号| + +返回数据: + +|属性|数据类型|参数说明| +|:------:|:------:|:------| +| Data| bool | 是否成功 + +返回结果: + +``` sp1 +{ + "Message":"", + "Code":200, + "Data":true +} +``` + +#### 2.删除原包转发地址(不能删除在网关服务器配置文件配的地址) + +请求地址:SourcePackage/Remove + +请求方式:POST + +请求参数: + +|属性|数据类型|参数说明| +|:------:|:------:|:------| +| Host| string| ip地址| +| Port| int| 端口号| + +返回数据: + +|属性|数据类型|参数说明| +|:------:|:------:|:------| +| Data| bool | 是否成功| + +返回结果: + +``` sp2 +{ + "Message":"", + "Code":200, + "Data":true +} +``` + +#### 3.获取原包信息集合 + +请求地址:SourcePackage/GetAll + +请求方式:GET + +返回数据: + +|属性|数据类型|参数说明| +|------|:------:|:------| +| RemoteAddress| string | 远程ip地址| +| LocalAddress| string | 本地ip地址| +| Registered| bool | 通道是否注册| +| Active| bool | 通道是否激活| +| Open| bool | 通道是否打开| + +返回结果: + +``` sp3 +{ + "Message":"", + "Code":200, + "Data":[ + { + "RemoteAddress":"127.0.0.1:6665", + "LocalAddress":"127.0.0.1:6664", + "Registered":true, + "Active":true, + "Open":true + },{ + "RemoteAddress":"127.0.0.1:6667", + "LocalAddress":"127.0.0.1:6666", + "Registered":true, + "Active":true, + "Open":true + } + ] +} +``` + +### 转发地址过滤服务 + +#### 1.添加转发过滤地址 + +请求地址:Transmit/Add + +请求方式:POST + +请求参数: + +|属性|数据类型|参数说明| +|:------:|:------:|:------| +| Host| string| ip地址| +| Port| int| 端口号| + +返回数据: + +|属性|数据类型|参数说明| +|:------:|:------:|:------| +| Data| bool | 是否成功 + +返回结果: + +``` tr1 +{ + "Message":"", + "Code":200, + "Data":true +} +``` + +#### 2.删除转发过滤地址(不能删除在网关服务器配置文件配的地址) + +请求地址:Transmit/Remove + +请求方式:POST + +请求参数: + +|属性|数据类型|参数说明| +|:------:|:------:|:------| +| Host| string| ip地址| +| Port| int| 端口号| + +返回数据: + +|属性|数据类型|参数说明| +|:------:|:------:|:------| +| Data| bool | 是否成功| + +返回结果: + +``` tr2 +{ + "Message":"", + "Code":200, + "Data":true +} +``` + +#### 3.获取转发过滤地址信息集合 + +请求地址:Transmit/GetAll + +请求方式:GET + +返回数据: + +|属性|数据类型|参数说明| +|------|:------:|:------| +| Data| List\ | 远程ip地址| + +返回结果: + +``` tr3 +{ + "Message":"", + "Code":200, + "Data":[ + "127.0.0.1:6665", + "127.0.0.1:6667" + ] +} +``` + +### 计数服务接口 + +请求地址:GetAtomicCounter + +请求方式:GET + +返回数据: + +|属性|数据类型|参数说明| +|------|:------:|:------| +| MsgSuccessCount| long| 消息包成功数| +| MsgFailCount| long| 消息包失败数| + +返回结果: + +``` counter +{ + "Message":"", + "Code":200, + "Data":{ + "MsgSuccessCount":10000, + "MsgFailCount":0 + } +} +``` \ No newline at end of file diff --git a/src/JT808.DotNetty.Test/Internal/JT808RemoteAddressTransmitConfigurationServiceTest.cs b/src/JT808.DotNetty.Test/Internal/JT808TransmitAddressFilterServiceTest.cs similarity index 66% rename from src/JT808.DotNetty.Test/Internal/JT808RemoteAddressTransmitConfigurationServiceTest.cs rename to src/JT808.DotNetty.Test/Internal/JT808TransmitAddressFilterServiceTest.cs index e6665b2..190bf58 100644 --- a/src/JT808.DotNetty.Test/Internal/JT808RemoteAddressTransmitConfigurationServiceTest.cs +++ b/src/JT808.DotNetty.Test/Internal/JT808TransmitAddressFilterServiceTest.cs @@ -12,11 +12,11 @@ using Xunit; namespace JT808.DotNetty.Test.Internal { - public class JT808RemoteAddressTransmitConfigurationServiceTest + public class JT808TransmitAddressFilterServiceTest { - private JT808RemoteAddressTransmitConfigurationService jT808RemoteAddressTransmitConfigurationService; + private JT808TransmitAddressFilterService jT808TransmitAddressFilterService; - public JT808RemoteAddressTransmitConfigurationServiceTest() + public JT808TransmitAddressFilterServiceTest() { var serverHostBuilder = new HostBuilder() .ConfigureAppConfiguration((hostingContext, config) => @@ -29,26 +29,26 @@ namespace JT808.DotNetty.Test.Internal services.AddSingleton(); services.AddSingleton(typeof(ILogger<>), typeof(Logger<>)); services.Configure(hostContext.Configuration.GetSection("JT808Configuration")); - services.AddSingleton(); + services.AddSingleton(); }); var serviceProvider = serverHostBuilder.Build().Services; - jT808RemoteAddressTransmitConfigurationService = serviceProvider.GetService(); - jT808RemoteAddressTransmitConfigurationService.Add(new Dtos.JT808IPAddressDto + jT808TransmitAddressFilterService = serviceProvider.GetService(); + jT808TransmitAddressFilterService.Add(new Dtos.JT808IPAddressDto { Host = "127.0.0.1", Port = 12345 }); - jT808RemoteAddressTransmitConfigurationService.Add(new Dtos.JT808IPAddressDto + jT808TransmitAddressFilterService.Add(new Dtos.JT808IPAddressDto { Host = "127.0.0.1", Port = 12346 }); - jT808RemoteAddressTransmitConfigurationService.Add(new Dtos.JT808IPAddressDto + jT808TransmitAddressFilterService.Add(new Dtos.JT808IPAddressDto { Host = "127.0.0.1", Port = 12347 }); - jT808RemoteAddressTransmitConfigurationService.Add(new Dtos.JT808IPAddressDto + jT808TransmitAddressFilterService.Add(new Dtos.JT808IPAddressDto { Host = "127.0.0.1", Port = 12348 @@ -58,7 +58,7 @@ namespace JT808.DotNetty.Test.Internal [Fact] public void Test1() { - Assert.True(jT808RemoteAddressTransmitConfigurationService.ContainsKey(new Dtos.JT808IPAddressDto + Assert.True(jT808TransmitAddressFilterService.ContainsKey(new Dtos.JT808IPAddressDto { Host = "127.0.0.1", Port = 12348 @@ -68,7 +68,7 @@ namespace JT808.DotNetty.Test.Internal [Fact] public void Test2() { - var result = jT808RemoteAddressTransmitConfigurationService.GetAll(); + var result = jT808TransmitAddressFilterService.GetAll(); } [Fact] @@ -79,10 +79,10 @@ namespace JT808.DotNetty.Test.Internal Host = "127.0.0.1", Port = 12349 }; - var result1= jT808RemoteAddressTransmitConfigurationService.Add(ip1); + var result1= jT808TransmitAddressFilterService.Add(ip1); Assert.Equal(JT808ResultCode.Ok, result1.Code); Assert.True(result1.Data); - var result2 = jT808RemoteAddressTransmitConfigurationService.Remove(ip1); + var result2 = jT808TransmitAddressFilterService.Remove(ip1); Assert.Equal(JT808ResultCode.Ok, result2.Code); Assert.True(result2.Data); } @@ -95,7 +95,7 @@ namespace JT808.DotNetty.Test.Internal Host = "127.0.0.1", Port = 6561 }; - var result2 = jT808RemoteAddressTransmitConfigurationService.Remove(configIp); + var result2 = jT808TransmitAddressFilterService.Remove(configIp); Assert.Equal(JT808ResultCode.Ok, result2.Code); Assert.False(result2.Data); Assert.Equal("不能删除服务器配置的地址", result2.Message); diff --git a/src/JT808.DotNetty/Handlers/JT808ServerHandler.cs b/src/JT808.DotNetty/Handlers/JT808ServerHandler.cs index 18ae0a0..e3ae53f 100644 --- a/src/JT808.DotNetty/Handlers/JT808ServerHandler.cs +++ b/src/JT808.DotNetty/Handlers/JT808ServerHandler.cs @@ -18,14 +18,14 @@ namespace JT808.DotNetty.Handlers private readonly JT808SessionManager jT808SessionManager; - private readonly JT808RemoteAddressTransmitConfigurationService jT808RemoteAddressTransmitConfigurationService; + private readonly JT808TransmitAddressFilterService jT808TransmitAddressFilterService; public JT808ServerHandler( - JT808RemoteAddressTransmitConfigurationService jT808RemoteAddressTransmitConfigurationService, + JT808TransmitAddressFilterService jT808TransmitAddressFilterService, JT808MsgIdHandlerBase handler, JT808SessionManager jT808SessionManager) { - this.jT808RemoteAddressTransmitConfigurationService = jT808RemoteAddressTransmitConfigurationService; + this.jT808TransmitAddressFilterService = jT808TransmitAddressFilterService; this.handler = handler; this.jT808SessionManager = jT808SessionManager; } @@ -42,7 +42,7 @@ namespace JT808.DotNetty.Handlers JT808Response jT808Package = handlerFunc(new JT808Request(msg)); if (jT808Package != null) { - if (!jT808RemoteAddressTransmitConfigurationService.ContainsKey(ctx.Channel.RemoteAddress)) + if (!jT808TransmitAddressFilterService.ContainsKey(ctx.Channel.RemoteAddress)) { ctx.WriteAndFlushAsync(Unpooled.WrappedBuffer(JT808Serializer.Serialize(jT808Package.Package, jT808Package.MinBufferSize))); } diff --git a/src/JT808.DotNetty/Internal/JT808RemoteAddressTransmitConfigurationService.cs b/src/JT808.DotNetty/Internal/JT808TransmitAddressFilterService.cs similarity index 95% rename from src/JT808.DotNetty/Internal/JT808RemoteAddressTransmitConfigurationService.cs rename to src/JT808.DotNetty/Internal/JT808TransmitAddressFilterService.cs index a855162..8390ed2 100644 --- a/src/JT808.DotNetty/Internal/JT808RemoteAddressTransmitConfigurationService.cs +++ b/src/JT808.DotNetty/Internal/JT808TransmitAddressFilterService.cs @@ -11,14 +11,14 @@ using System.Text; namespace JT808.DotNetty.Internal { /// - /// JT808远程地址转发配置服务 + /// JT808转发地址过滤服务 /// 按照808的消息,有些请求必须要应答,但是转发可以不需要有应答可以节省部分资源包括: // 1.消息的序列化 // 2.消息的下发 // 都有一定的性能损耗,那么不需要判断写超时 IdleState.WriterIdle // 就跟神兽貔貅一样。。。 /// - public class JT808RemoteAddressTransmitConfigurationService : IDisposable + public class JT808TransmitAddressFilterService : IDisposable { private readonly IOptionsMonitor jT808ConfigurationOptionsMonitor; @@ -26,7 +26,7 @@ namespace JT808.DotNetty.Internal private IDisposable jT808ConfigurationOptionsMonitorDisposable; - public JT808RemoteAddressTransmitConfigurationService( + public JT808TransmitAddressFilterService( IOptionsMonitor jT808ConfigurationOptionsMonitor) { this.jT808ConfigurationOptionsMonitor = jT808ConfigurationOptionsMonitor; diff --git a/src/JT808.DotNetty/Internal/JT808WebAPIService.cs b/src/JT808.DotNetty/Internal/JT808WebAPIService.cs index 762e105..102fe07 100644 --- a/src/JT808.DotNetty/Internal/JT808WebAPIService.cs +++ b/src/JT808.DotNetty/Internal/JT808WebAPIService.cs @@ -21,6 +21,8 @@ namespace JT808.DotNetty.Internal private const string sourcePackagePrefix = "SourcePackage"; + private const string transmitPrefix = "Transmit"; + private readonly IJT808SessionService jT808SessionService; private readonly IJT808UnificationSendService jT808UnificationSendService; @@ -29,17 +31,21 @@ namespace JT808.DotNetty.Internal private readonly JT808SourcePackageChannelService jT808SourcePackageChannelService; + private readonly JT808TransmitAddressFilterService jT808TransmitAddressFilterService; + /// /// 初始化消息处理业务 /// public JT808WebAPIService( JT808AtomicCounterService jT808AtomicCounterService, JT808SourcePackageChannelService jT808SourcePackageChannelService, + JT808TransmitAddressFilterService jT808TransmitAddressFilterService, IJT808SessionService jT808SessionService, IJT808UnificationSendService jT808UnificationSendService) { this.jT808AtomicCounterService = jT808AtomicCounterService; this.jT808SourcePackageChannelService = jT808SourcePackageChannelService; + this.jT808TransmitAddressFilterService = jT808TransmitAddressFilterService; this.jT808SessionService = jT808SessionService; this.jT808UnificationSendService = jT808UnificationSendService; HandlerDict = new Dictionary> @@ -51,7 +57,10 @@ namespace JT808.DotNetty.Internal {$"{RouteTablePrefix}/GetAtomicCounter", GetAtomicCounter}, {$"{RouteTablePrefix}/{sourcePackagePrefix}/Add", AddSourcePackageAddress}, {$"{RouteTablePrefix}/{sourcePackagePrefix}/Remove", RemoveSourcePackageAddress}, - {$"{RouteTablePrefix}/{sourcePackagePrefix}/GetAll", GetSourcePackageAll} + {$"{RouteTablePrefix}/{sourcePackagePrefix}/GetAll", GetSourcePackageAll}, + {$"{RouteTablePrefix}/{transmitPrefix}/Add", AddTransmitAddress}, + {$"{RouteTablePrefix}/{transmitPrefix}/Remove", RemoveTransmitAddress}, + {$"{RouteTablePrefix}/{transmitPrefix}/GetAll", GetTransmitAll}, }; } @@ -169,6 +178,46 @@ namespace JT808.DotNetty.Internal return CreateJT808HttpResponse(jT808SourcePackageChannelService.GetAll()); } + /// + /// 添加转发过滤地址 + /// + /// + /// + public JT808HttpResponse AddTransmitAddress(JT808HttpRequest request) + { + if (string.IsNullOrEmpty(request.Json)) + { + return EmptyHttpResponse(); + } + JT808IPAddressDto jT808IPAddressDto = JsonConvert.DeserializeObject(request.Json); + return CreateJT808HttpResponse(jT808TransmitAddressFilterService.Add(jT808IPAddressDto)); + } + + /// + /// 删除转发过滤地址(不能删除在网关服务器配置文件配的地址) + /// + /// + /// + public JT808HttpResponse RemoveTransmitAddress(JT808HttpRequest request) + { + if (string.IsNullOrEmpty(request.Json)) + { + return EmptyHttpResponse(); + } + JT808IPAddressDto jT808IPAddressDto = JsonConvert.DeserializeObject(request.Json); + return CreateJT808HttpResponse(jT808TransmitAddressFilterService.Remove(jT808IPAddressDto)); + } + + /// + /// 获取转发过滤地址信息集合 + /// + /// + /// + public JT808HttpResponse GetTransmitAll(JT808HttpRequest request) + { + return CreateJT808HttpResponse(jT808TransmitAddressFilterService.GetAll()); + } + private JT808HttpResponse CreateJT808HttpResponse(dynamic dynamicObject) { byte[] data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(dynamicObject)); diff --git a/src/JT808.DotNetty/JT808DotnettyExtensions.cs b/src/JT808.DotNetty/JT808DotnettyExtensions.cs index 0a8868c..6bec490 100644 --- a/src/JT808.DotNetty/JT808DotnettyExtensions.cs +++ b/src/JT808.DotNetty/JT808DotnettyExtensions.cs @@ -37,7 +37,7 @@ namespace JT808.DotNetty services.Configure(hostContext.Configuration.GetSection("JT808Configuration")); services.TryAddSingleton(); services.TryAddSingleton(); - services.TryAddSingleton(); + services.TryAddSingleton(); services.TryAddSingleton(); services.TryAddSingleton(); services.TryAddSingleton();