Sfoglia il codice sorgente

1.完善webapi服务文档

2.原先远程地址转发配置服务修改为转发地址过滤服务
tags/v1.0.0
SmallChi 6 anni fa
parent
commit
c68061ab84
7 ha cambiato i file con 466 aggiunte e 189 eliminazioni
  1. +10
    -166
      README.md
  2. +384
    -0
      api/README.md
  3. +14
    -14
      src/JT808.DotNetty.Test/Internal/JT808TransmitAddressFilterServiceTest.cs
  4. +4
    -4
      src/JT808.DotNetty/Handlers/JT808ServerHandler.cs
  5. +3
    -3
      src/JT808.DotNetty/Internal/JT808TransmitAddressFilterService.cs
  6. +50
    -1
      src/JT808.DotNetty/Internal/JT808WebAPIService.cs
  7. +1
    -1
      src/JT808.DotNetty/JT808DotnettyExtensions.cs

+ 10
- 166
README.md Vedi File

@@ -31,11 +31,7 @@


### 2.集成WebApi服务器 ### 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.集成业务消息处理程序 ### 3.集成业务消息处理程序


@@ -45,7 +41,7 @@


### 举个栗子1 ### 举个栗子1


#### 1.实现业务消息处理程序JT808MsgIdHandlerBase
#### 3.1.实现业务消息处理程序JT808MsgIdHandlerBase


```business Imp ```business Imp
public class JT808MsgIdCustomHandler : JT808MsgIdHandlerBase 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)); services.Replace(new ServiceDescriptor(typeof(JT808MsgIdHandlerBase), typeof(JT808MsgIdCustomHandler), ServiceLifetime.Singleton));
``` ```
#### 3.使用JT808 Host

#### 3.3.使用JT808 Host


``` host ``` host
UseJT808Host() UseJT808Host()
``` ```


#### 4.完整示例
#### 3.4.完整示例

``` demo ``` demo
// 默认网关端口:808 // 默认网关端口:808
// 默认webapi端口:828 // 默认webapi端口:828
@@ -103,159 +102,4 @@ static async Task Main(string[] args)
.UseJT808Host(); .UseJT808Host();
await serverHostBuilder.RunConsoleAsync(); 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
}
```
```

+ 384
- 0
api/README.md Vedi File

@@ -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
}
}
```

src/JT808.DotNetty.Test/Internal/JT808RemoteAddressTransmitConfigurationServiceTest.cs → src/JT808.DotNetty.Test/Internal/JT808TransmitAddressFilterServiceTest.cs Vedi File

@@ -12,11 +12,11 @@ using Xunit;


namespace JT808.DotNetty.Test.Internal 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() var serverHostBuilder = new HostBuilder()
.ConfigureAppConfiguration((hostingContext, config) => .ConfigureAppConfiguration((hostingContext, config) =>
@@ -29,26 +29,26 @@ namespace JT808.DotNetty.Test.Internal
services.AddSingleton<ILoggerFactory, LoggerFactory>(); services.AddSingleton<ILoggerFactory, LoggerFactory>();
services.AddSingleton(typeof(ILogger<>), typeof(Logger<>)); services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
services.Configure<JT808Configuration>(hostContext.Configuration.GetSection("JT808Configuration")); services.Configure<JT808Configuration>(hostContext.Configuration.GetSection("JT808Configuration"));
services.AddSingleton<JT808RemoteAddressTransmitConfigurationService>();
services.AddSingleton<JT808TransmitAddressFilterService>();
}); });
var serviceProvider = serverHostBuilder.Build().Services; 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", Host = "127.0.0.1",
Port = 12345 Port = 12345
}); });
jT808RemoteAddressTransmitConfigurationService.Add(new Dtos.JT808IPAddressDto
jT808TransmitAddressFilterService.Add(new Dtos.JT808IPAddressDto
{ {
Host = "127.0.0.1", Host = "127.0.0.1",
Port = 12346 Port = 12346
}); });
jT808RemoteAddressTransmitConfigurationService.Add(new Dtos.JT808IPAddressDto
jT808TransmitAddressFilterService.Add(new Dtos.JT808IPAddressDto
{ {
Host = "127.0.0.1", Host = "127.0.0.1",
Port = 12347 Port = 12347
}); });
jT808RemoteAddressTransmitConfigurationService.Add(new Dtos.JT808IPAddressDto
jT808TransmitAddressFilterService.Add(new Dtos.JT808IPAddressDto
{ {
Host = "127.0.0.1", Host = "127.0.0.1",
Port = 12348 Port = 12348
@@ -58,7 +58,7 @@ namespace JT808.DotNetty.Test.Internal
[Fact] [Fact]
public void Test1() public void Test1()
{ {
Assert.True(jT808RemoteAddressTransmitConfigurationService.ContainsKey(new Dtos.JT808IPAddressDto
Assert.True(jT808TransmitAddressFilterService.ContainsKey(new Dtos.JT808IPAddressDto
{ {
Host = "127.0.0.1", Host = "127.0.0.1",
Port = 12348 Port = 12348
@@ -68,7 +68,7 @@ namespace JT808.DotNetty.Test.Internal
[Fact] [Fact]
public void Test2() public void Test2()
{ {
var result = jT808RemoteAddressTransmitConfigurationService.GetAll();
var result = jT808TransmitAddressFilterService.GetAll();
} }


[Fact] [Fact]
@@ -79,10 +79,10 @@ namespace JT808.DotNetty.Test.Internal
Host = "127.0.0.1", Host = "127.0.0.1",
Port = 12349 Port = 12349
}; };
var result1= jT808RemoteAddressTransmitConfigurationService.Add(ip1);
var result1= jT808TransmitAddressFilterService.Add(ip1);
Assert.Equal(JT808ResultCode.Ok, result1.Code); Assert.Equal(JT808ResultCode.Ok, result1.Code);
Assert.True(result1.Data); Assert.True(result1.Data);
var result2 = jT808RemoteAddressTransmitConfigurationService.Remove(ip1);
var result2 = jT808TransmitAddressFilterService.Remove(ip1);
Assert.Equal(JT808ResultCode.Ok, result2.Code); Assert.Equal(JT808ResultCode.Ok, result2.Code);
Assert.True(result2.Data); Assert.True(result2.Data);
} }
@@ -95,7 +95,7 @@ namespace JT808.DotNetty.Test.Internal
Host = "127.0.0.1", Host = "127.0.0.1",
Port = 6561 Port = 6561
}; };
var result2 = jT808RemoteAddressTransmitConfigurationService.Remove(configIp);
var result2 = jT808TransmitAddressFilterService.Remove(configIp);
Assert.Equal(JT808ResultCode.Ok, result2.Code); Assert.Equal(JT808ResultCode.Ok, result2.Code);
Assert.False(result2.Data); Assert.False(result2.Data);
Assert.Equal("不能删除服务器配置的地址", result2.Message); Assert.Equal("不能删除服务器配置的地址", result2.Message);

+ 4
- 4
src/JT808.DotNetty/Handlers/JT808ServerHandler.cs Vedi File

@@ -18,14 +18,14 @@ namespace JT808.DotNetty.Handlers
private readonly JT808SessionManager jT808SessionManager; private readonly JT808SessionManager jT808SessionManager;


private readonly JT808RemoteAddressTransmitConfigurationService jT808RemoteAddressTransmitConfigurationService;
private readonly JT808TransmitAddressFilterService jT808TransmitAddressFilterService;


public JT808ServerHandler( public JT808ServerHandler(
JT808RemoteAddressTransmitConfigurationService jT808RemoteAddressTransmitConfigurationService,
JT808TransmitAddressFilterService jT808TransmitAddressFilterService,
JT808MsgIdHandlerBase handler, JT808MsgIdHandlerBase handler,
JT808SessionManager jT808SessionManager) JT808SessionManager jT808SessionManager)
{ {
this.jT808RemoteAddressTransmitConfigurationService = jT808RemoteAddressTransmitConfigurationService;
this.jT808TransmitAddressFilterService = jT808TransmitAddressFilterService;
this.handler = handler; this.handler = handler;
this.jT808SessionManager = jT808SessionManager; this.jT808SessionManager = jT808SessionManager;
} }
@@ -42,7 +42,7 @@ namespace JT808.DotNetty.Handlers
JT808Response jT808Package = handlerFunc(new JT808Request(msg)); JT808Response jT808Package = handlerFunc(new JT808Request(msg));
if (jT808Package != null) 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))); ctx.WriteAndFlushAsync(Unpooled.WrappedBuffer(JT808Serializer.Serialize(jT808Package.Package, jT808Package.MinBufferSize)));
} }


src/JT808.DotNetty/Internal/JT808RemoteAddressTransmitConfigurationService.cs → src/JT808.DotNetty/Internal/JT808TransmitAddressFilterService.cs Vedi File

@@ -11,14 +11,14 @@ using System.Text;
namespace JT808.DotNetty.Internal namespace JT808.DotNetty.Internal
{ {
/// <summary> /// <summary>
/// JT808远程地址转发配置服务
/// JT808转发地址过滤服务
/// 按照808的消息,有些请求必须要应答,但是转发可以不需要有应答可以节省部分资源包括: /// 按照808的消息,有些请求必须要应答,但是转发可以不需要有应答可以节省部分资源包括:
// 1.消息的序列化 // 1.消息的序列化
// 2.消息的下发 // 2.消息的下发
// 都有一定的性能损耗,那么不需要判断写超时 IdleState.WriterIdle // 都有一定的性能损耗,那么不需要判断写超时 IdleState.WriterIdle
// 就跟神兽貔貅一样。。。 // 就跟神兽貔貅一样。。。
/// </summary> /// </summary>
public class JT808RemoteAddressTransmitConfigurationService : IDisposable
public class JT808TransmitAddressFilterService : IDisposable
{ {
private readonly IOptionsMonitor<JT808Configuration> jT808ConfigurationOptionsMonitor; private readonly IOptionsMonitor<JT808Configuration> jT808ConfigurationOptionsMonitor;


@@ -26,7 +26,7 @@ namespace JT808.DotNetty.Internal


private IDisposable jT808ConfigurationOptionsMonitorDisposable; private IDisposable jT808ConfigurationOptionsMonitorDisposable;


public JT808RemoteAddressTransmitConfigurationService(
public JT808TransmitAddressFilterService(
IOptionsMonitor<JT808Configuration> jT808ConfigurationOptionsMonitor) IOptionsMonitor<JT808Configuration> jT808ConfigurationOptionsMonitor)
{ {
this.jT808ConfigurationOptionsMonitor = jT808ConfigurationOptionsMonitor; this.jT808ConfigurationOptionsMonitor = jT808ConfigurationOptionsMonitor;

+ 50
- 1
src/JT808.DotNetty/Internal/JT808WebAPIService.cs Vedi File

@@ -21,6 +21,8 @@ namespace JT808.DotNetty.Internal


private const string sourcePackagePrefix = "SourcePackage"; private const string sourcePackagePrefix = "SourcePackage";


private const string transmitPrefix = "Transmit";
private readonly IJT808SessionService jT808SessionService; private readonly IJT808SessionService jT808SessionService;


private readonly IJT808UnificationSendService jT808UnificationSendService; private readonly IJT808UnificationSendService jT808UnificationSendService;
@@ -29,17 +31,21 @@ namespace JT808.DotNetty.Internal


private readonly JT808SourcePackageChannelService jT808SourcePackageChannelService; private readonly JT808SourcePackageChannelService jT808SourcePackageChannelService;


private readonly JT808TransmitAddressFilterService jT808TransmitAddressFilterService;

/// <summary> /// <summary>
/// 初始化消息处理业务 /// 初始化消息处理业务
/// </summary> /// </summary>
public JT808WebAPIService( public JT808WebAPIService(
JT808AtomicCounterService jT808AtomicCounterService, JT808AtomicCounterService jT808AtomicCounterService,
JT808SourcePackageChannelService jT808SourcePackageChannelService, JT808SourcePackageChannelService jT808SourcePackageChannelService,
JT808TransmitAddressFilterService jT808TransmitAddressFilterService,
IJT808SessionService jT808SessionService, IJT808SessionService jT808SessionService,
IJT808UnificationSendService jT808UnificationSendService) IJT808UnificationSendService jT808UnificationSendService)
{ {
this.jT808AtomicCounterService = jT808AtomicCounterService; this.jT808AtomicCounterService = jT808AtomicCounterService;
this.jT808SourcePackageChannelService = jT808SourcePackageChannelService; this.jT808SourcePackageChannelService = jT808SourcePackageChannelService;
this.jT808TransmitAddressFilterService = jT808TransmitAddressFilterService;
this.jT808SessionService = jT808SessionService; this.jT808SessionService = jT808SessionService;
this.jT808UnificationSendService = jT808UnificationSendService; this.jT808UnificationSendService = jT808UnificationSendService;
HandlerDict = new Dictionary<string, Func<JT808HttpRequest, JT808HttpResponse>> HandlerDict = new Dictionary<string, Func<JT808HttpRequest, JT808HttpResponse>>
@@ -51,7 +57,10 @@ namespace JT808.DotNetty.Internal
{$"{RouteTablePrefix}/GetAtomicCounter", GetAtomicCounter}, {$"{RouteTablePrefix}/GetAtomicCounter", GetAtomicCounter},
{$"{RouteTablePrefix}/{sourcePackagePrefix}/Add", AddSourcePackageAddress}, {$"{RouteTablePrefix}/{sourcePackagePrefix}/Add", AddSourcePackageAddress},
{$"{RouteTablePrefix}/{sourcePackagePrefix}/Remove", RemoveSourcePackageAddress}, {$"{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()); 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) private JT808HttpResponse CreateJT808HttpResponse(dynamic dynamicObject)
{ {
byte[] data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(dynamicObject)); byte[] data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(dynamicObject));


+ 1
- 1
src/JT808.DotNetty/JT808DotnettyExtensions.cs Vedi File

@@ -37,7 +37,7 @@ namespace JT808.DotNetty
services.Configure<JT808Configuration>(hostContext.Configuration.GetSection("JT808Configuration")); services.Configure<JT808Configuration>(hostContext.Configuration.GetSection("JT808Configuration"));
services.TryAddSingleton<JT808SessionManager>(); services.TryAddSingleton<JT808SessionManager>();
services.TryAddSingleton<JT808AtomicCounterService>(); services.TryAddSingleton<JT808AtomicCounterService>();
services.TryAddSingleton<JT808RemoteAddressTransmitConfigurationService>();
services.TryAddSingleton<JT808TransmitAddressFilterService>();
services.TryAddSingleton<JT808MsgIdHandlerBase,JT808MsgIdDefaultHandler>(); services.TryAddSingleton<JT808MsgIdHandlerBase,JT808MsgIdDefaultHandler>();
services.TryAddSingleton<JT808SourcePackageChannelService>(); services.TryAddSingleton<JT808SourcePackageChannelService>();
services.TryAddSingleton<IJT808SourcePackageDispatcher, JT808SourcePackageDispatcherDefaultImpl>(); services.TryAddSingleton<IJT808SourcePackageDispatcher, JT808SourcePackageDispatcherDefaultImpl>();


Caricamento…
Annulla
Salva