@@ -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) | |||
基地址:<a href="#">http://localhost:828/jt808api/</a> | |||
数据格式:只支持Json格式 | |||
#### 统一对象返回 JT808ResultDto\<T> | |||
|属性|数据类型|参数说明| | |||
|:------:|:------:|:------| | |||
| Message| string| 消息描述| | |||
| Code| int| 状态码| | |||
| Data| T(泛型)| 数据| | |||
返回Code[状态码]说明: | |||
|状态码|说明| | |||
|:------:|:------:| | |||
| 200 | 返回成功 | | |||
| 201 | 内容为空 | | |||
| 404 | 没有该服务 | | |||
| 500 | 服务内部错误 | | |||
#### <span id="send">统一下发设备消息接口</span> | |||
请求地址:UnificationSend | |||
请求方式:POST | |||
请求参数: | |||
|属性|数据类型|参数说明| | |||
|:------:|:------:|:------| | |||
| TerminalPhoneNo| string| 设备终端号| | |||
| Data| byte[]| JT808 byte[]数组| | |||
返回数据: | |||
|属性|数据类型|参数说明| | |||
|:------:|:------:|:------| | |||
| Data| bool| 是否成功| | |||
返回结果: | |||
``` result1 | |||
{ | |||
"Message":"", | |||
"Code":200, | |||
"Data":true | |||
} | |||
``` | |||
#### <span id="session">会话服务接口</span> | |||
##### 统一会话信息对象返回 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\<JT808SessionInfoDto> | 实际会话信息集合 | | |||
返回结果: | |||
``` 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 | |||
} | |||
``` | |||
``` |
@@ -0,0 +1,384 @@ | |||
# JT808 WebApi服务 | |||
基地址:<a href="#">http://localhost:828/jt808api/</a> | |||
数据格式:只支持Json格式 | |||
默认端口:828 | |||
## [统一下发设备消息服务](#send) | |||
## [管理会话服务](#session) | |||
## [原包分发器通道服务](#sourcepackage) | |||
## [转发地址过滤服务](#transmit) | |||
## [消息包计数服务](#counter) | |||
### 统一对象返回 JT808ResultDto\<T> | |||
|属性|数据类型|参数说明| | |||
|:------:|:------:|:------| | |||
| Message| string| 消息描述| | |||
| Code| int| 状态码| | |||
| Data| T(泛型)| 数据| | |||
返回Code[状态码]说明: | |||
|状态码|说明| | |||
|:------:|:------:| | |||
| 200 | 返回成功 | | |||
| 201 | 内容为空 | | |||
| 404 | 没有该服务 | | |||
| 500 | 服务内部错误 | | |||
### <span id="send">统一下发设备消息接口</span> | |||
请求地址:UnificationSend | |||
请求方式:POST | |||
请求参数: | |||
|属性|数据类型|参数说明| | |||
|------|:------:|:------| | |||
| TerminalPhoneNo| string| 设备终端号| | |||
| Data| byte[]| JT808 byte[]数组| | |||
返回数据: | |||
|属性|数据类型|参数说明| | |||
|:------:|:------:|:------| | |||
| Data| bool| 是否成功| | |||
返回结果: | |||
``` result1 | |||
{ | |||
"Message":"", | |||
"Code":200, | |||
"Data":true | |||
} | |||
``` | |||
### <span id="session">会话服务接口</span> | |||
#### 统一会话信息对象返回 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\<JT808SessionInfoDto> | 实际会话信息集合 | | |||
返回结果: | |||
``` 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 | |||
} | |||
``` | |||
### <span id="sourcepackage">原包分发器通道服务</span> | |||
#### 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 | |||
} | |||
] | |||
} | |||
``` | |||
### <span id="transmit">转发地址过滤服务</span> | |||
#### 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\<string> | 远程ip地址| | |||
返回结果: | |||
``` tr3 | |||
{ | |||
"Message":"", | |||
"Code":200, | |||
"Data":[ | |||
"127.0.0.1:6665", | |||
"127.0.0.1:6667" | |||
] | |||
} | |||
``` | |||
### <span id="counter">计数服务接口</span> | |||
请求地址:GetAtomicCounter | |||
请求方式:GET | |||
返回数据: | |||
|属性|数据类型|参数说明| | |||
|------|:------:|:------| | |||
| MsgSuccessCount| long| 消息包成功数| | |||
| MsgFailCount| long| 消息包失败数| | |||
返回结果: | |||
``` counter | |||
{ | |||
"Message":"", | |||
"Code":200, | |||
"Data":{ | |||
"MsgSuccessCount":10000, | |||
"MsgFailCount":0 | |||
} | |||
} | |||
``` |
@@ -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<ILoggerFactory, LoggerFactory>(); | |||
services.AddSingleton(typeof(ILogger<>), typeof(Logger<>)); | |||
services.Configure<JT808Configuration>(hostContext.Configuration.GetSection("JT808Configuration")); | |||
services.AddSingleton<JT808RemoteAddressTransmitConfigurationService>(); | |||
services.AddSingleton<JT808TransmitAddressFilterService>(); | |||
}); | |||
var serviceProvider = serverHostBuilder.Build().Services; | |||
jT808RemoteAddressTransmitConfigurationService = serviceProvider.GetService<JT808RemoteAddressTransmitConfigurationService>(); | |||
jT808RemoteAddressTransmitConfigurationService.Add(new Dtos.JT808IPAddressDto | |||
jT808TransmitAddressFilterService = serviceProvider.GetService<JT808TransmitAddressFilterService>(); | |||
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); |
@@ -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))); | |||
} | |||
@@ -11,14 +11,14 @@ using System.Text; | |||
namespace JT808.DotNetty.Internal | |||
{ | |||
/// <summary> | |||
/// JT808远程地址转发配置服务 | |||
/// JT808转发地址过滤服务 | |||
/// 按照808的消息,有些请求必须要应答,但是转发可以不需要有应答可以节省部分资源包括: | |||
// 1.消息的序列化 | |||
// 2.消息的下发 | |||
// 都有一定的性能损耗,那么不需要判断写超时 IdleState.WriterIdle | |||
// 就跟神兽貔貅一样。。。 | |||
/// </summary> | |||
public class JT808RemoteAddressTransmitConfigurationService : IDisposable | |||
public class JT808TransmitAddressFilterService : IDisposable | |||
{ | |||
private readonly IOptionsMonitor<JT808Configuration> jT808ConfigurationOptionsMonitor; | |||
@@ -26,7 +26,7 @@ namespace JT808.DotNetty.Internal | |||
private IDisposable jT808ConfigurationOptionsMonitorDisposable; | |||
public JT808RemoteAddressTransmitConfigurationService( | |||
public JT808TransmitAddressFilterService( | |||
IOptionsMonitor<JT808Configuration> jT808ConfigurationOptionsMonitor) | |||
{ | |||
this.jT808ConfigurationOptionsMonitor = jT808ConfigurationOptionsMonitor; |
@@ -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; | |||
/// <summary> | |||
/// 初始化消息处理业务 | |||
/// </summary> | |||
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<string, Func<JT808HttpRequest, JT808HttpResponse>> | |||
@@ -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()); | |||
} | |||
/// <summary> | |||
/// 添加转发过滤地址 | |||
/// </summary> | |||
/// <param name="request"></param> | |||
/// <returns></returns> | |||
public JT808HttpResponse AddTransmitAddress(JT808HttpRequest request) | |||
{ | |||
if (string.IsNullOrEmpty(request.Json)) | |||
{ | |||
return EmptyHttpResponse(); | |||
} | |||
JT808IPAddressDto jT808IPAddressDto = JsonConvert.DeserializeObject<JT808IPAddressDto>(request.Json); | |||
return CreateJT808HttpResponse(jT808TransmitAddressFilterService.Add(jT808IPAddressDto)); | |||
} | |||
/// <summary> | |||
/// 删除转发过滤地址(不能删除在网关服务器配置文件配的地址) | |||
/// </summary> | |||
/// <param name="request"></param> | |||
/// <returns></returns> | |||
public JT808HttpResponse RemoveTransmitAddress(JT808HttpRequest request) | |||
{ | |||
if (string.IsNullOrEmpty(request.Json)) | |||
{ | |||
return EmptyHttpResponse(); | |||
} | |||
JT808IPAddressDto jT808IPAddressDto = JsonConvert.DeserializeObject<JT808IPAddressDto>(request.Json); | |||
return CreateJT808HttpResponse(jT808TransmitAddressFilterService.Remove(jT808IPAddressDto)); | |||
} | |||
/// <summary> | |||
/// 获取转发过滤地址信息集合 | |||
/// </summary> | |||
/// <param name="request"></param> | |||
/// <returns></returns> | |||
public JT808HttpResponse GetTransmitAll(JT808HttpRequest request) | |||
{ | |||
return CreateJT808HttpResponse(jT808TransmitAddressFilterService.GetAll()); | |||
} | |||
private JT808HttpResponse CreateJT808HttpResponse(dynamic dynamicObject) | |||
{ | |||
byte[] data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(dynamicObject)); | |||
@@ -37,7 +37,7 @@ namespace JT808.DotNetty | |||
services.Configure<JT808Configuration>(hostContext.Configuration.GetSection("JT808Configuration")); | |||
services.TryAddSingleton<JT808SessionManager>(); | |||
services.TryAddSingleton<JT808AtomicCounterService>(); | |||
services.TryAddSingleton<JT808RemoteAddressTransmitConfigurationService>(); | |||
services.TryAddSingleton<JT808TransmitAddressFilterService>(); | |||
services.TryAddSingleton<JT808MsgIdHandlerBase,JT808MsgIdDefaultHandler>(); | |||
services.TryAddSingleton<JT808SourcePackageChannelService>(); | |||
services.TryAddSingleton<IJT808SourcePackageDispatcher, JT808SourcePackageDispatcherDefaultImpl>(); | |||