소스 검색

1.使用webapi取代miniapi因为很多过滤器不支持

2.修改接口文档
pull/25/head
SmallChi(Koike) 3 년 전
부모
커밋
6f66db64b7
26개의 변경된 파일582개의 추가작업 그리고 854개의 파일을 삭제
  1. +1
    -0
      .gitignore
  2. +7
    -7
      api/README_Pipeline.md
  3. +0
    -13
      src/JT808.Gateway.Abstractions/IJT808Authorization.cs
  4. +0
    -5
      src/JT808.Gateway.Abstractions/JT808.Gateway.Abstractions.xml
  5. +4
    -4
      src/JT808.Gateway.Abstractions/JT808GatewayConstants.cs
  6. +0
    -90
      src/JT808.Gateway.Abstractions/JT808MsgIdHttpHandlerBase.cs
  7. +17
    -14
      src/JT808.Gateway.Services/JT808.Gateway.Transmit/JT808TransmitService.cs
  8. +30
    -0
      src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/Customs/JT808HttpClientExt.cs
  9. +31
    -0
      src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/Customs/JT808WebApiExt.cs
  10. +21
    -0
      src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/JT808.Gateway.NormalHosting.csproj
  11. +5
    -2
      src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/Jobs/CallHttpClientJob.cs
  12. +31
    -10
      src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/Program.cs
  13. +12
    -5
      src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/appsettings.json
  14. +1
    -2
      src/JT808.Gateway.Tests/JT808.Gateway.QueueHosting/Program.cs
  15. +34
    -0
      src/JT808.Gateway.WebApiClientTool/JT808.Gateway.WebApiClientTool.xml
  16. +83
    -4
      src/JT808.Gateway.WebApiClientTool/JT808HttpClientExtensions.cs
  17. +1
    -0
      src/JT808.Gateway.sln
  18. +0
    -48
      src/JT808.Gateway/Authorization/JT808AuthorizationDefault.cs
  19. +63
    -0
      src/JT808.Gateway/Authorization/JT808TokenAttribute.cs
  20. +0
    -102
      src/JT808.Gateway/Extensions/JT808HttpContextExtensions.cs
  21. +27
    -0
      src/JT808.Gateway/Extensions/JT808WebApiExtensions.cs
  22. +94
    -123
      src/JT808.Gateway/JT808.Gateway.xml
  23. +0
    -39
      src/JT808.Gateway/JT808GatewayExtensions.cs
  24. +0
    -180
      src/JT808.Gateway/JT808HttpServer.cs
  25. +0
    -52
      src/JT808.Gateway/JT808MiniWebApi.cs
  26. +120
    -154
      src/JT808.Gateway/JT808WebApi.cs

+ 1
- 0
.gitignore 파일 보기

@@ -331,3 +331,4 @@ ASALocalRun/
/nupkgs
/src/JT808.DotNetty.Admin/tools/protoc-gen-grpc-web-1.0.3-windows-x86_64.exe
/src/JT808.Gateway.Benchmark/JT808.Gateway.CleintBenchmark/.config/dotnet-tools.json
/src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/wwwroot/logs/JT808.Gateway

+ 7
- 7
api/README_Pipeline.md 파일 보기

@@ -35,7 +35,7 @@
|请求Url|请求方式|说明|
|:------|:------|:------|
| 127.0.0.1:828/jt808api/Tcp/Session/GetAll| GET| 基于Tcp管理会话服务-获取会话集合|
| 127.0.0.1:828/jt808api/Tcp/Session/QueryTcpSessionByTerminalPhoneNo| POST| 基于Tcp管理会话服务-通过设备终端号查询对应会话|
| 127.0.0.1:828/jt808api/Tcp/Session/QuerySessionByTerminalPhoneNo| POST| 基于Tcp管理会话服务-通过设备终端号查询对应会话|
| 127.0.0.1:828/jt808api/Tcp/Session/RemoveByTerminalPhoneNo| POST| 基于Tcp管理会话服务-通过设备终端号移除对应会话|

### 基于Udp接口请求
@@ -43,8 +43,8 @@
|请求Url|请求方式|说明|
|:------|:------|:------|
| 127.0.0.1:828/jt808api/Udp/Session/GetAll| GET| 基于Udp管理会话服务-获取会话集合|
| 127.0.0.1:828/jt808api/Udp/Session/QueryUdpSessionByTerminalPhoneNo| POST| 基于Udp管理会话服务-通过设备终端号查询对应会话|
| 127.0.0.1:828/jt808api/Udp/Session/RemoveUdpByTerminalPhoneNo| POST| 基于Udp管理会话服务-通过设备终端号移除对应会话|
| 127.0.0.1:828/jt808api/Udp/Session/QuerySessionByTerminalPhoneNo| POST| 基于Udp管理会话服务-通过设备终端号查询对应会话|
| 127.0.0.1:828/jt808api/Udp/Session/RemoveByTerminalPhoneNo| POST| 基于Udp管理会话服务-通过设备终端号移除对应会话|

### SIM黑名单管理接口请求

@@ -52,7 +52,7 @@
|:------|:------|:------|
| 127.0.0.1:828/jt808api/Blacklist/Add| POST| SIM卡黑名单服务-将对应SIM号加入黑名单|
| 127.0.0.1:828/jt808api/Blacklist/Remove| POST| SIM卡黑名单服务-将对应SIM号移除黑名单|
| 127.0.0.1:828/jt808api/Blacklist/Get| Get| SIM卡黑名单服务-获取所有sim的黑名单列表|
| 127.0.0.1:828/jt808api/Blacklist/GetAll| Get| SIM卡黑名单服务-获取所有sim的黑名单列表|

### 统一对象返回 JT808ResultDto\<T>

@@ -154,7 +154,7 @@

#### 2.通过设备终端号查询对应会话

请求地址:Tcp/Session/QueryTcpSessionByTerminalPhoneNo
请求地址:Tcp/Session/QuerySessionByTerminalPhoneNo

请求方式:POST

@@ -272,7 +272,7 @@

#### 2.通过设备终端号查询对应会话

请求地址:Udp/Session/QueryUdpSessionByTerminalPhoneNo
请求地址:Udp/Session/QuerySessionByTerminalPhoneNo

请求方式:POST

@@ -415,7 +415,7 @@

#### 3.获取sim卡黑名单

请求地址:Blacklist/Get
请求地址:Blacklist/GetAll

请求方式:GET



+ 0
- 13
src/JT808.Gateway.Abstractions/IJT808Authorization.cs 파일 보기

@@ -1,13 +0,0 @@
using System;
using System.Collections.Generic;
using System.Net;
using System.Security.Principal;
using System.Text;

namespace JT808.Gateway.Abstractions
{
public interface IJT808Authorization
{
bool Authorization(HttpListenerContext context, out IPrincipal principal);
}
}

+ 0
- 5
src/JT808.Gateway.Abstractions/JT808.Gateway.Abstractions.xml 파일 보기

@@ -464,10 +464,5 @@
<param name="request"></param>
<returns></returns>
</member>
<member name="M:JT808.Gateway.Abstractions.JT808MsgIdHttpHandlerBase.#ctor">
<summary>
初始化消息处理业务
</summary>
</member>
</members>
</doc>

+ 4
- 4
src/JT808.Gateway.Abstractions/JT808GatewayConstants.cs 파일 보기

@@ -28,7 +28,7 @@
/// <summary>
/// 会话服务-通过设备终端号查询对应会话
/// </summary>
public static string QueryTcpSessionByTerminalPhoneNo = $"{RouteTablePrefix}/{TcpPrefix}/{SessionPrefix}/QueryTcpSessionByTerminalPhoneNo";
public static string QueryTcpSessionByTerminalPhoneNo = $"{RouteTablePrefix}/{TcpPrefix}/{SessionPrefix}/QuerySessionByTerminalPhoneNo";
/// <summary>
/// 统一下发信息
/// </summary>
@@ -40,11 +40,11 @@
/// <summary>
/// 会话服务-通过设备终端号移除对应会话
/// </summary>
public static string RemoveUdpByTerminalPhoneNo = $"{RouteTablePrefix}/{UdpPrefix}/{SessionPrefix}/RemoveUdpByTerminalPhoneNo";
public static string RemoveUdpByTerminalPhoneNo = $"{RouteTablePrefix}/{UdpPrefix}/{SessionPrefix}/RemoveByTerminalPhoneNo";
/// <summary>
/// 会话服务-通过设备终端号查询对应会话
/// </summary>
public static string QueryUdpSessionByTerminalPhoneNo = $"{RouteTablePrefix}/{UdpPrefix}/{SessionPrefix}/QueryUdpSessionByTerminalPhoneNo";
public static string QueryUdpSessionByTerminalPhoneNo = $"{RouteTablePrefix}/{UdpPrefix}/{SessionPrefix}/QuerySessionByTerminalPhoneNo";
/// <summary>
/// 黑名单添加
/// </summary>
@@ -56,7 +56,7 @@
/// <summary>
/// 黑名单查询
/// </summary>
public static string BlacklistGet = $"{RouteTablePrefix}/Blacklist/Get";
public static string BlacklistGet = $"{RouteTablePrefix}/Blacklist/GetAll";
}
}
}

+ 0
- 90
src/JT808.Gateway.Abstractions/JT808MsgIdHttpHandlerBase.cs 파일 보기

@@ -1,90 +0,0 @@
using JT808.Gateway.Abstractions.Dtos;
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.Json;

namespace JT808.Gateway.Abstractions
{
public abstract class JT808MsgIdHttpHandlerBase
{
public Dictionary<string, Func<string,byte[]>> HandlerDict { get; }

/// <summary>
/// 初始化消息处理业务
/// </summary>
protected JT808MsgIdHttpHandlerBase()
{
HandlerDict = new Dictionary<string, Func<string, byte[]>>();
}

protected void CreateRoute(string url, Func<string, byte[]> func)
{
if (!HandlerDict.ContainsKey(url))
{
HandlerDict.Add(url, func);
}
else
{
// 替换
HandlerDict[url] = func;
}
}

protected byte[] CreateHttpResponse(dynamic dynamicObject)
{
byte[] data = JsonSerializer.SerializeToUtf8Bytes(dynamicObject);
return data;
}

public byte[] DefaultHttpResponse()
{
byte[] json = JsonSerializer.SerializeToUtf8Bytes(new JT808DefaultResultDto());
return json;
}

public byte[] EmptyHttpResponse()
{
byte[] json = JsonSerializer.SerializeToUtf8Bytes(new JT808ResultDto<string>()
{
Code = JT808ResultCode.Empty,
Message = "内容为空",
Data = "Content Empty"
});
return json;
}

public byte[] NotFoundHttpResponse()
{
byte[] json = JsonSerializer.SerializeToUtf8Bytes(new JT808ResultDto<string>()
{
Code = JT808ResultCode.NotFound,
Message = "没有该服务",
Data = "没有该服务"
});
return json;
}

public byte[] AuthFailHttpResponse()
{
byte[] json = JsonSerializer.SerializeToUtf8Bytes(new JT808ResultDto<string>()
{
Code = JT808ResultCode.AuthFail,
Message = "token认证失败",
Data = "token认证失败"
});
return json;
}

public byte[] ErrorHttpResponse(Exception ex)
{
byte[] json = JsonSerializer.SerializeToUtf8Bytes(new JT808ResultDto<string>()
{
Code = JT808ResultCode.Error,
Message = ex.StackTrace,
Data = ex.Message
});
return json;
}
}
}

+ 17
- 14
src/JT808.Gateway.Services/JT808.Gateway.Transmit/JT808TransmitService.cs 파일 보기

@@ -147,27 +147,30 @@ namespace JT808.Gateway.Transmit
{
await Task.Delay(time);
List<string> lastRemoteServers = new List<string>();
foreach (var item in optionsMonitor.CurrentValue.DataTransfer)
if (optionsMonitor.CurrentValue != null && optionsMonitor.CurrentValue.DataTransfer!=null)
{
if (item.TerminalNos != null && item.TerminalNos.Any())
foreach (var item in optionsMonitor.CurrentValue.DataTransfer)
{
foreach (var terminal in item.TerminalNos)
if (item.TerminalNos != null && item.TerminalNos.Any())
{
string tmpKey = $"{terminal}_{item.Host}";
if (!channeldic.ContainsKey(tmpKey))
foreach (var terminal in item.TerminalNos)
{
lastRemoteServers.Add(tmpKey);
string tmpKey = $"{terminal}_{item.Host}";
if (!channeldic.ContainsKey(tmpKey))
{
lastRemoteServers.Add(tmpKey);
}
}
}
}
else
{
string key = $"all_{item.Host}";
if (!channeldic.ContainsKey(key))
}
else
{
lastRemoteServers.Add(key);
string key = $"all_{item.Host}";
if (!channeldic.ContainsKey(key))
{
lastRemoteServers.Add(key);
}
}
}
}
}
foreach (var item in lastRemoteServers)
{


+ 30
- 0
src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/Customs/JT808HttpClientExt.cs 파일 보기

@@ -0,0 +1,30 @@
using JT808.Gateway.Abstractions.Dtos;
using JT808.Gateway.WebApiClientTool;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;

namespace JT808.Gateway.NormalHosting.Customs
{
public class JT808HttpClientExt : JT808HttpClient
{
public static string index1 = $"jt808apiext/index1";
public JT808HttpClientExt(HttpClient httpClient) : base(httpClient)
{
}

/// <summary>
/// ext
/// </summary>
/// <returns></returns>
public async ValueTask<JT808ResultDto<string>> GetIndex1()
{
var request = new HttpRequestMessage(HttpMethod.Get, index1);
var response = await HttpClient.SendAsync(request);
response.EnsureSuccessStatusCode();
var data = await response.Content.ReadAsStreamAsync();
var value = await JsonSerializer.DeserializeAsync<JT808ResultDto<string>>(data);
return value;
}
}
}

+ 31
- 0
src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/Customs/JT808WebApiExt.cs 파일 보기

@@ -0,0 +1,31 @@
using JT808.Gateway.Abstractions.Dtos;
using JT808.Gateway.Services;
using JT808.Gateway.Session;
using Microsoft.AspNetCore.Mvc;

namespace JT808.Gateway.NormalHosting.Customs
{
[Route("jt808apiext")]
[ApiController]
public class JT808WebApiExt : ControllerBase
{
public JT808WebApiExt(JT808SessionManager jT808SessionManager, JT808BlacklistManager jT808BlacklistManager)
{

}

/// <summary>
/// index1
/// </summary>
/// <returns></returns>
[HttpGet]
[Route("index1")]
public ActionResult<JT808ResultDto<string>> Index1()
{
JT808ResultDto<string> resultDto = new JT808ResultDto<string>();
resultDto.Data = "Hello,JT808 WebApi Ext";
resultDto.Code = JT808ResultCode.Ok;
return resultDto;
}
}
}

+ 21
- 0
src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/JT808.Gateway.NormalHosting.csproj 파일 보기

@@ -5,8 +5,24 @@
<TargetFramework>net6</TargetFramework>
</PropertyGroup>

<ItemGroup>
<Compile Remove="wwwroot\logs\**" />
<Content Remove="wwwroot\logs\**" />
<EmbeddedResource Remove="wwwroot\logs\**" />
<None Remove="wwwroot\logs\**" />
</ItemGroup>

<ItemGroup>
<Content Remove="appsettings.json" />
</ItemGroup>

<ItemGroup>
<None Include="appsettings.json" />
</ItemGroup>


<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.0" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.11.1" />
@@ -37,4 +53,9 @@
</None>
</ItemGroup>

<ItemGroup>
<Folder Include="Properties\" />
<Folder Include="wwwroot\" />
</ItemGroup>

</Project>

+ 5
- 2
src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/Jobs/CallHttpClientJob.cs 파일 보기

@@ -10,6 +10,7 @@ using JT808.Protocol.Extensions;
using Microsoft.Extensions.Options;
using JT808.Gateway.Abstractions.Configurations;
using JT808.Gateway.WebApiClientTool;
using JT808.Gateway.NormalHosting.Customs;

namespace JT808.Gateway.NormalHosting.Jobs
{
@@ -17,10 +18,10 @@ namespace JT808.Gateway.NormalHosting.Jobs
{

private readonly ILogger Logger;
private JT808HttpClient jT808HttpClient;
private JT808HttpClientExt jT808HttpClient;
public CallHttpClientJob(
ILoggerFactory loggerFactory,
JT808HttpClient jT808HttpClient)
JT808HttpClientExt jT808HttpClient)
{
Logger = loggerFactory.CreateLogger<CallHttpClientJob>();
this.jT808HttpClient = jT808HttpClient;
@@ -32,12 +33,14 @@ namespace JT808.Gateway.NormalHosting.Jobs
{
while (!cancellationToken.IsCancellationRequested)
{
var result1 = await jT808HttpClient.GetIndex1();
var result2 = await jT808HttpClient.GetTcpSessionAll();
var result3 = await jT808HttpClient.UnificationSend(new Abstractions.Dtos.JT808UnificationSendRequestDto
{
TerminalPhoneNo= "123456789012",
HexData= "7E02000026123456789012007D02000000010000000200BA7F0E07E4F11C0028003C00001810151010100104000000640202007D01137E"
});
Logger.LogInformation($"[GetIndex Ext]:{JsonSerializer.Serialize(result1)}");
Logger.LogInformation($"[GetTcpAtomicCounter]:{JsonSerializer.Serialize(result2)}");
Logger.LogInformation($"[GetTcpSessionAll]:{JsonSerializer.Serialize(result3)}");
Thread.Sleep(3000);


+ 31
- 10
src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/Program.cs 파일 보기

@@ -18,6 +18,12 @@ using JT808.Gateway.WebApiClientTool;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Routing;
using Microsoft.AspNetCore.Server;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration.Json;
using JT808.Gateway.Abstractions.Configurations;
using System.Net;
using JT808.Gateway.Extensions;
using JT808.Gateway.NormalHosting.Customs;

namespace JT808.Gateway.NormalHosting
{
@@ -25,10 +31,9 @@ namespace JT808.Gateway.NormalHosting
{
static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
var builder = WebApplication.CreateBuilder();
builder.Host.ConfigureAppConfiguration((hostingContext, config) =>
{
config.SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{ hostingContext.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true);
@@ -42,8 +47,6 @@ namespace JT808.Gateway.NormalHosting
})
.ConfigureServices((hostContext, services) =>
{
services.AddSingleton<ILoggerFactory, LoggerFactory>();
services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
//使用内存队列实现会话通知
services.AddSingleton<JT808SessionService>();
services.AddSingleton<IJT808SessionProducer, JT808SessionProducer>();
@@ -56,7 +59,7 @@ namespace JT808.Gateway.NormalHosting
.AddClient()
.Builder()
//方式1:客户端webapi调用
.AddWebApiClientTool(hostContext.Configuration)
.AddWebApiClientTool<JT808HttpClientExt>(hostContext.Configuration)
.AddGateway(hostContext.Configuration)
.AddMessageHandler<JT808CustomMessageHandlerImpl>()
.AddMsgReplyConsumer<JT808MsgReplyConsumer>()
@@ -64,18 +67,36 @@ namespace JT808.Gateway.NormalHosting
.AddSessionNotice()
.AddTransmit(hostContext.Configuration)
.AddTcp()
.AddUdp()
.AddHttp();
.AddUdp();
//方式2:客户端webapi调用
//services.AddJT808WebApiClientTool(hostContext.Configuration);
//httpclient客户端调用
//services.AddHostedService<CallHttpClientJob>();
services.AddHostedService<CallHttpClientJob>();
//客户端测试 依赖AddClient()服务
//services.AddHostedService<UpJob>();
//需要跨域的
services.AddCors(options =>
options.AddPolicy("jt808", builder =>
builder.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials()
.SetIsOriginAllowed(o => true)));
});
builder.WebHost.UseKestrel((app, serverOptions) =>
{
//1.配置webapi端口监听
var jT808Configuration = app.Configuration.GetSection(nameof(JT808Configuration)).Get<JT808Configuration>();
serverOptions.ListenAnyIP(jT808Configuration.WebApiPort);
})
.ConfigureServices((hostContext, services) =>
{
services.AddControllers();
});

var app = builder.Build();
app.UseJT808MiniWebApi();

app.UseCors();
app.MapControllers().RequireCors("jt808");

app.Run();
}


+ 12
- 5
src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/appsettings.json 파일 보기

@@ -1,9 +1,16 @@
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"Microsoft.AspNetCore.Mvc": "Information",
"Microsoft.AspNetCore.Server.Kestrel": "Information"
}
},
"JT808Configuration": {
"TcpPort": 808,
"UdpPort": 808,
"WebApiPort": 828,
"Token": "123456",
"Token": "1234567",
"MiniNumBufferSize": 51200,
"SoBacklog": 65535
},
@@ -13,10 +20,10 @@
},
"RemoteServerOptions": {
"DataTransfer": [
{
"Host": "127.0.0.1:20000",
"TerminalNos": [ "1234567890", "1234567891" ]
}
//{
// "Host": "127.0.0.1:20000",
// "TerminalNos": [ "1234567890", "1234567891" ]
//}
]
}
}

+ 1
- 2
src/JT808.Gateway.Tests/JT808.Gateway.QueueHosting/Program.cs 파일 보기

@@ -66,8 +66,7 @@ namespace JT808.Gateway.QueueHosting
.AddServerKafkaSessionProducer(hostContext.Configuration)
.AddServerKafkaMsgReplyConsumer(hostContext.Configuration)
.AddTcp()
.AddUdp()
.AddHttp();
.AddUdp();
//方式2:客户端webapi调用
//services.AddJT808WebApiClientTool(hostContext.Configuration);
//httpclient客户端调用


+ 34
- 0
src/JT808.Gateway.WebApiClientTool/JT808.Gateway.WebApiClientTool.xml 파일 보기

@@ -120,6 +120,40 @@
<member name="M:JT808.Gateway.WebApiClientTool.JT808HttpClientExtensions.AddWebApiClientTool(JT808.Protocol.IJT808Builder,System.Uri,System.String)">
<summary>
</summary>
<param name="jT808Builder"></param>
<param name="webapiUri"></param>
<param name="token"></param>
<returns></returns>
</member>
<member name="M:JT808.Gateway.WebApiClientTool.JT808HttpClientExtensions.AddJT808WebApiClientTool``1(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Uri,System.String)">
<summary>
</summary>
<param name="serviceDescriptors"></param>
<param name="webapiUri"></param>
<param name="token"></param>
<returns></returns>
</member>
<member name="M:JT808.Gateway.WebApiClientTool.JT808HttpClientExtensions.AddJT808WebApiClientTool``1(Microsoft.Extensions.DependencyInjection.IServiceCollection,Microsoft.Extensions.Configuration.IConfiguration)">
<summary>
</summary>
<param name="serviceDescriptors"></param>
<param name="configuration"></param>
<returns></returns>
</member>
<member name="M:JT808.Gateway.WebApiClientTool.JT808HttpClientExtensions.AddWebApiClientTool``1(JT808.Protocol.IJT808Builder,Microsoft.Extensions.Configuration.IConfiguration)">
<summary>
</summary>
<param name="jT808Builder"></param>
<param name="configuration"></param>
<returns></returns>
</member>
<member name="M:JT808.Gateway.WebApiClientTool.JT808HttpClientExtensions.AddWebApiClientTool``1(JT808.Protocol.IJT808Builder,System.Uri,System.String)">
<summary>
</summary>
<param name="jT808Builder"></param>
<param name="webapiUri"></param>


+ 83
- 4
src/JT808.Gateway.WebApiClientTool/JT808HttpClientExtensions.cs 파일 보기

@@ -13,6 +13,7 @@ namespace JT808.Gateway.WebApiClientTool
/// </summary>
public static class JT808HttpClientExtensions
{
const int timeout = 15;
/// <summary>
///
/// </summary>
@@ -26,7 +27,7 @@ namespace JT808.Gateway.WebApiClientTool
{
c.DefaultRequestHeaders.Add("token", token);
c.BaseAddress = webapiUri;
c.Timeout = TimeSpan.FromSeconds(3);
c.Timeout = TimeSpan.FromSeconds(timeout);
})
.AddTypedClient<JT808HttpClient>();
return serviceDescriptors;
@@ -44,7 +45,7 @@ namespace JT808.Gateway.WebApiClientTool
{
c.DefaultRequestHeaders.Add("token", configuration.GetSection("JT808WebApiClientToolConfig:Token").Get<string>());
c.BaseAddress = new Uri(configuration.GetSection("JT808WebApiClientToolConfig:Uri").Get<string>());
c.Timeout = TimeSpan.FromSeconds(3);
c.Timeout = TimeSpan.FromSeconds(timeout);
})
.AddTypedClient<JT808HttpClient>();
return serviceDescriptors;
@@ -62,7 +63,7 @@ namespace JT808.Gateway.WebApiClientTool
{
c.DefaultRequestHeaders.Add("token", configuration.GetSection("JT808WebApiClientToolConfig:Token").Get<string>());
c.BaseAddress = new Uri(configuration.GetSection("JT808WebApiClientToolConfig:Uri").Get<string>());
c.Timeout = TimeSpan.FromSeconds(3);
c.Timeout = TimeSpan.FromSeconds(timeout);
})
.AddTypedClient<JT808HttpClient>();
return jT808Builder;
@@ -81,10 +82,88 @@ namespace JT808.Gateway.WebApiClientTool
{
c.DefaultRequestHeaders.Add("token", token);
c.BaseAddress = webapiUri;
c.Timeout = TimeSpan.FromSeconds(3);
c.Timeout = TimeSpan.FromSeconds(timeout);
})
.AddTypedClient<JT808HttpClient>();
return jT808Builder;
}

/// <summary>
///
/// </summary>
/// <param name="serviceDescriptors"></param>
/// <param name="webapiUri"></param>
/// <param name="token"></param>
/// <returns></returns>
public static IServiceCollection AddJT808WebApiClientTool<TJT808HttpClient>(this IServiceCollection serviceDescriptors, Uri webapiUri, string token)
where TJT808HttpClient : JT808HttpClient
{
serviceDescriptors.AddHttpClient("JT808WebApiClientTool", c =>
{
c.DefaultRequestHeaders.Add("token", token);
c.BaseAddress = webapiUri;
c.Timeout = TimeSpan.FromSeconds(timeout);
})
.AddTypedClient<TJT808HttpClient>();
return serviceDescriptors;
}

/// <summary>
///
/// </summary>
/// <param name="serviceDescriptors"></param>
/// <param name="configuration"></param>
/// <returns></returns>
public static IServiceCollection AddJT808WebApiClientTool<TJT808HttpClient>(this IServiceCollection serviceDescriptors, IConfiguration configuration)
where TJT808HttpClient : JT808HttpClient
{
serviceDescriptors.AddHttpClient("JT808WebApiClientTool", c =>
{
c.DefaultRequestHeaders.Add("token", configuration.GetSection("JT808WebApiClientToolConfig:Token").Get<string>());
c.BaseAddress = new Uri(configuration.GetSection("JT808WebApiClientToolConfig:Uri").Get<string>());
c.Timeout = TimeSpan.FromSeconds(timeout);
})
.AddTypedClient<TJT808HttpClient>();
return serviceDescriptors;
}

/// <summary>
///
/// </summary>
/// <param name="jT808Builder"></param>
/// <param name="configuration"></param>
/// <returns></returns>
public static IJT808Builder AddWebApiClientTool<TJT808HttpClient>(this IJT808Builder jT808Builder, IConfiguration configuration)
where TJT808HttpClient : JT808HttpClient
{
jT808Builder.Services.AddHttpClient("JT808WebApiClientTool", c =>
{
c.DefaultRequestHeaders.Add("token", configuration.GetSection("JT808WebApiClientToolConfig:Token").Get<string>());
c.BaseAddress = new Uri(configuration.GetSection("JT808WebApiClientToolConfig:Uri").Get<string>());
c.Timeout = TimeSpan.FromSeconds(timeout);
})
.AddTypedClient<TJT808HttpClient>();
return jT808Builder;
}

/// <summary>
///
/// </summary>
/// <param name="jT808Builder"></param>
/// <param name="webapiUri"></param>
/// <param name="token"></param>
/// <returns></returns>
public static IJT808Builder AddWebApiClientTool<TJT808HttpClient>(this IJT808Builder jT808Builder, Uri webapiUri, string token)
where TJT808HttpClient: JT808HttpClient
{
jT808Builder.Services.AddHttpClient("JT808WebApiClientTool", c =>
{
c.DefaultRequestHeaders.Add("token", token);
c.BaseAddress = webapiUri;
c.Timeout = TimeSpan.FromSeconds(timeout);
})
.AddTypedClient<TJT808HttpClient>();
return jT808Builder;
}
}
}

+ 1
- 0
src/JT808.Gateway.sln 파일 보기

@@ -42,6 +42,7 @@ EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{2336747A-28A3-443E-8E23-4B25E3F2D971}"
ProjectSection(SolutionItems) = preProject
PipelineInfo.props = PipelineInfo.props
..\api\README_Pipeline.md = ..\api\README_Pipeline.md
EndProjectSection
EndProject
Global


+ 0
- 48
src/JT808.Gateway/Authorization/JT808AuthorizationDefault.cs 파일 보기

@@ -1,48 +0,0 @@
using JT808.Gateway.Abstractions;
using JT808.Gateway.Abstractions.Configurations;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Security.Claims;
using System.Security.Principal;
using System.Text;

namespace JT808.Gateway.Authorization
{
class JT808AuthorizationDefault : IJT808Authorization
{
private IOptionsMonitor<JT808Configuration> optionsMonitor;
public JT808AuthorizationDefault(IOptionsMonitor<JT808Configuration> optionsMonitor)
{
this.optionsMonitor = optionsMonitor;
}
public bool Authorization(HttpListenerContext context, out IPrincipal principal)
{
var uriSpan = context.Request.Url.AbsoluteUri.AsSpan();
var uriParamStr = uriSpan.Slice(uriSpan.IndexOf('?')+1).ToString().ToLower();
var uriParams = uriParamStr.Split('&');
var tokenParam = uriParams.FirstOrDefault(m => m.Contains("token"));
string tokenValue = string.Empty;
if (!string.IsNullOrEmpty(tokenParam))
{
tokenValue = tokenParam.Split('=')[1];
}
else
{
tokenValue = context.Request.Headers.Get("token");
}
if (optionsMonitor.CurrentValue.WebApiToken == tokenValue)
{
principal = new ClaimsPrincipal(new GenericIdentity(tokenValue));
return true;
}
else
{
principal = null;
return false;
}
}
}
}

+ 63
- 0
src/JT808.Gateway/Authorization/JT808TokenAttribute.cs 파일 보기

@@ -0,0 +1,63 @@
using JT808.Gateway.Abstractions;
using JT808.Gateway.Abstractions.Configurations;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Mvc.Filters;
using System;
using System.Net;
using System.Security.Principal;
using System.Threading.Tasks;
using Microsoft.Extensions.Primitives;
using Microsoft.AspNetCore.Mvc;
using JT808.Gateway.Abstractions.Dtos;
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.Options;

namespace JT808.Gateway.Authorization
{
/// <summary>
///
/// </summary>
public class JT808TokenAttribute : Attribute, IAuthorizationFilter
{
const string token = "token";
/// <summary>
///
/// </summary>
/// <param name="context"></param>
public void OnAuthorization(AuthorizationFilterContext context)
{
IOptions<JT808Configuration> jT808Configuration = context.HttpContext.RequestServices.GetRequiredService<IOptions<JT808Configuration>>();
StringValues tokenValue;
if (context.HttpContext.Request.Query.TryGetValue(token, out tokenValue))
{
if(jT808Configuration.Value.WebApiToken != tokenValue)
{
JT808ResultDto<string> resultDto = new JT808ResultDto<string>();
resultDto.Message = "auth error";
resultDto.Data = "auth error";
resultDto.Code = 401;
context.Result =new OkObjectResult(resultDto);
}
}
else if (context.HttpContext.Request.Headers.TryGetValue(token, out tokenValue))
{
if (jT808Configuration.Value.WebApiToken != tokenValue)
{
JT808ResultDto<string> resultDto = new JT808ResultDto<string>();
resultDto.Message = "auth error";
resultDto.Data = "auth error";
resultDto.Code = 401;
context.Result = new OkObjectResult(resultDto);
}
}
else
{
JT808ResultDto<string> resultDto = new JT808ResultDto<string>();
resultDto.Message = "auth error";
resultDto.Data = "auth error";
resultDto.Code = 401;
context.Result = new OkObjectResult(resultDto);
}
}
}
}

+ 0
- 102
src/JT808.Gateway/Extensions/JT808HttpContextExtensions.cs 파일 보기

@@ -1,102 +0,0 @@
using System;
using System.Collections.Generic;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace JT808.Gateway.Extensions
{
public static class JT808HttpContextExtensions
{
private const string jsonType = "application/json";

public static void Http204(this HttpListenerContext context)
{
context.Response.StatusCode = (int)HttpStatusCode.NoContent;
context.Response.KeepAlive = false;
context.Response.OutputStream.Close();
context.Response.Close();
}

public static void Http401(this HttpListenerContext context)
{
byte[] b = Encoding.UTF8.GetBytes("auth error");
context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
context.Response.ContentType = jsonType;
context.Response.KeepAlive = false;
context.Response.ContentLength64 = b.Length;
var output = context.Response.OutputStream;
output.Write(b, 0, b.Length);
context.Response.OutputStream.Close();
context.Response.Close();
}

public static void Http400(this HttpListenerContext context)
{
byte[] b = Encoding.UTF8.GetBytes($"sim and channel parameter required.");
context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
context.Response.KeepAlive = false;
context.Response.ContentType = jsonType;
context.Response.ContentLength64 = b.Length;
var output = context.Response.OutputStream;
output.Write(b, 0, b.Length);
context.Response.OutputStream.Close();
context.Response.Close();
}

public static void Http404(this HttpListenerContext context)
{
context.Response.StatusCode = (int)HttpStatusCode.NotFound;
context.Response.KeepAlive = false;
context.Response.ContentType = jsonType;
context.Response.OutputStream.Close();
context.Response.Close();
}

public static void Http405(this HttpListenerContext context)
{
context.Response.StatusCode = (int)HttpStatusCode.MethodNotAllowed;
context.Response.KeepAlive = false;
context.Response.ContentType = jsonType;
context.Response.OutputStream.Close();
context.Response.Close();
}

public static void Http500(this HttpListenerContext context)
{
byte[] b = Encoding.UTF8.GetBytes("inner error");
context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
context.Response.KeepAlive = false;
context.Response.ContentType = jsonType;
context.Response.ContentLength64 = b.Length;
var output = context.Response.OutputStream;
output.Write(b,0, b.Length);
context.Response.OutputStream.Close();
context.Response.Close();
}

public static void HttpSend(this HttpListenerContext context, ReadOnlyMemory<byte> buffer)
{
context.Response.StatusCode = (int)HttpStatusCode.OK;
context.Response.KeepAlive = false;
context.Response.ContentType = jsonType;
context.Response.ContentLength64 = buffer.Length;
context.Response.OutputStream.Write(buffer.ToArray(),0, buffer.Length);
context.Response.OutputStream.Close();
context.Response.Close();
}

public static void HttpSend(this HttpListenerContext context, string json)
{
byte[] b = Encoding.UTF8.GetBytes(json);
context.Response.StatusCode = (int)HttpStatusCode.OK;
context.Response.KeepAlive = false;
context.Response.ContentType = jsonType;
context.Response.ContentLength64 = b.Length;
context.Response.OutputStream.Write(b,0, b.Length);
context.Response.OutputStream.Close();
context.Response.Close();
}
}
}

+ 27
- 0
src/JT808.Gateway/Extensions/JT808WebApiExtensions.cs 파일 보기

@@ -0,0 +1,27 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;

namespace JT808.Gateway.Extensions
{
public static class JT808WebApiExtensions
{
public static IServiceCollection AddJT808Cors(this IServiceCollection serviceDescriptors)
{
serviceDescriptors.AddCors(options =>
options.AddPolicy("jt808", builder =>
builder.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials()
.SetIsOriginAllowed(o => true)));
return serviceDescriptors;
}

public static IApplicationBuilder UseJT808Cors(this IApplicationBuilder app)
{
app.UseCors("jt808");
return app;
}
}
}

+ 94
- 123
src/JT808.Gateway/JT808.Gateway.xml 파일 보기

@@ -4,242 +4,213 @@
<name>JT808.Gateway</name>
</assembly>
<members>
<member name="T:JT808.Gateway.Handlers.JT808MsgIdDefaultWebApiHandler">
<member name="T:JT808.Gateway.Authorization.JT808TokenAttribute">
<summary>
默认消息处理业务实现
</summary>
</member>
<member name="M:JT808.Gateway.Handlers.JT808MsgIdDefaultWebApiHandler.#ctor(JT808.Gateway.Session.JT808SessionManager,JT808.Gateway.Services.JT808BlacklistManager)">
<member name="M:JT808.Gateway.Authorization.JT808TokenAttribute.OnAuthorization(Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext)">
<summary>
</summary>
<param name="jT808SessionManager"></param>
<param name="jT808BlacklistManager"></param>
<param name="context"></param>
</member>
<member name="M:JT808.Gateway.Handlers.JT808MsgIdDefaultWebApiHandler.GetTcpSessionAll(System.String)">
<member name="T:JT808.Gateway.JT808GatewayExtensions">
<summary>
会话服务集合
JT808网关注册扩展
</summary>
<param name="json"></param>
<returns></returns>
</member>
<member name="M:JT808.Gateway.Handlers.JT808MsgIdDefaultWebApiHandler.QueryTcpSessionByTerminalPhoneNo(System.String)">
<member name="M:JT808.Gateway.JT808GatewayExtensions.AddGateway(JT808.Protocol.IJT808Builder,System.Action{JT808.Gateway.Abstractions.Configurations.JT808Configuration})">
<summary>
通过终端手机号查询对应会话
添加808网关
</summary>
<param name="json"></param>
<param name="jT808Builder"></param>
<param name="config"></param>
<returns></returns>
</member>
<member name="M:JT808.Gateway.Handlers.JT808MsgIdDefaultWebApiHandler.RemoveSessionByTerminalPhoneNo(System.String)">
<member name="M:JT808.Gateway.JT808GatewayExtensions.AddGateway(JT808.Protocol.IJT808Builder,Microsoft.Extensions.Configuration.IConfiguration)">
<summary>
会话服务-通过设备终端号移除对应会话
添加808网关
</summary>
<param name="json"></param>
<param name="jT808Builder"></param>
<param name="configuration"></param>
<returns></returns>
</member>
<member name="M:JT808.Gateway.Handlers.JT808MsgIdDefaultWebApiHandler.GetUdpSessionAll(System.String)">
<member name="M:JT808.Gateway.JT808GatewayExtensions.AddTcp(JT808.Gateway.Abstractions.IJT808GatewayBuilder)">
<summary>
会话服务集合
添加tcp服务器
</summary>
<param name="json"></param>
<param name="config"></param>
<returns></returns>
</member>
<member name="M:JT808.Gateway.Handlers.JT808MsgIdDefaultWebApiHandler.QueryUdpSessionByTerminalPhoneNo(System.String)">
<member name="M:JT808.Gateway.JT808GatewayExtensions.AddUdp(JT808.Gateway.Abstractions.IJT808GatewayBuilder)">
<summary>
通过终端手机号查询对应会话
添加udp服务器
</summary>
<param name="json"></param>
<param name="config"></param>
<returns></returns>
</member>
<member name="M:JT808.Gateway.Handlers.JT808MsgIdDefaultWebApiHandler.RemoveUdpByTerminalPhoneNo(System.String)">
<member name="M:JT808.Gateway.JT808GatewayExtensions.AddMessageHandler``1(JT808.Gateway.Abstractions.IJT808GatewayBuilder)">
<summary>
会话服务-通过设备终端号移除对应会话
添加消息业务处理程序
</summary>
<param name="json"></param>
<typeparam name="TJT808MessageHandler"></typeparam>
<param name="config"></param>
<returns></returns>
</member>
<member name="M:JT808.Gateway.Handlers.JT808MsgIdDefaultWebApiHandler.UnificationSend(System.String)">
<member name="M:JT808.Gateway.JT808GatewayExtensions.AddMsgProducer``1(JT808.Gateway.Abstractions.IJT808GatewayBuilder)">
<summary>
统一下发信息
添加消息生产者
</summary>
<param name="json"></param>
<typeparam name="TJT808MsgProducer"></typeparam>
<param name="config"></param>
<returns></returns>
</member>
<member name="M:JT808.Gateway.Handlers.JT808MsgIdDefaultWebApiHandler.BlacklistAdd(System.String)">
<member name="M:JT808.Gateway.JT808GatewayExtensions.AddMsgReplyLoggingProducer``1(JT808.Gateway.Abstractions.IJT808GatewayBuilder)">
<summary>
添加sim卡黑名单
添加消息应答后的应答生产者
</summary>
<param name="json"></param>
<typeparam name="TJT808MsgReplyLoggingProducer"></typeparam>
<param name="config"></param>
<returns></returns>
</member>
<member name="M:JT808.Gateway.Handlers.JT808MsgIdDefaultWebApiHandler.BlacklistRemove(System.String)">
<member name="M:JT808.Gateway.JT808GatewayExtensions.AddMsgReplyConsumer``1(JT808.Gateway.Abstractions.IJT808GatewayBuilder)">
<summary>
移除sim卡黑名单
添加消息应答消费者
</summary>
<param name="json"></param>
<typeparam name="TJT808MsgReplyConsumer"></typeparam>
<param name="config"></param>
<returns></returns>
</member>
<member name="M:JT808.Gateway.Handlers.JT808MsgIdDefaultWebApiHandler.QueryBlacklist(System.String)">
<member name="M:JT808.Gateway.JT808GatewayExtensions.AddJT808Core(JT808.Gateway.Abstractions.IJT808GatewayBuilder)">
<summary>
查询sim卡黑名单
添加公共模块
</summary>
<param name="json"></param>
<param name="config"></param>
<returns></returns>
</member>
<member name="M:JT808.Gateway.Handlers.JT808MsgIdDefaultWebApiHandler.InitCommontRoute">
<member name="T:JT808.Gateway.JT808TcpServer">
<summary>
808 tcp服务器
</summary>
</member>
<member name="M:JT808.Gateway.Handlers.JT808MsgIdDefaultWebApiHandler.InitTcpRoute">
<member name="M:JT808.Gateway.JT808TcpServer.#ctor(Microsoft.Extensions.Options.IOptionsMonitor{JT808.Gateway.Abstractions.Configurations.JT808Configuration},JT808.Gateway.Abstractions.IJT808MsgProducer,JT808.Gateway.Abstractions.IJT808MsgReplyLoggingProducer,JT808.Gateway.Abstractions.JT808MessageHandler,JT808.Protocol.IJT808Config,Microsoft.Extensions.Logging.ILoggerFactory,JT808.Gateway.Session.JT808SessionManager,JT808.Gateway.Services.JT808BlacklistManager)">
<summary>
初始化服务注册
</summary>
<param name="configurationMonitor"></param>
<param name="msgProducer"></param>
<param name="msgReplyLoggingProducer"></param>
<param name="messageHandler"></param>
<param name="jT808Config"></param>
<param name="loggerFactory"></param>
<param name="jT808SessionManager"></param>
<param name="jT808BlacklistManager"></param>
</member>
<member name="M:JT808.Gateway.Handlers.JT808MsgIdDefaultWebApiHandler.InitUdpRoute">
<member name="M:JT808.Gateway.JT808TcpServer.StartAsync(System.Threading.CancellationToken)">
<summary>
</summary>
</member>
<member name="T:JT808.Gateway.JT808GatewayExtensions">
<summary>
JT808网关注册扩展
</summary>
</member>
<member name="M:JT808.Gateway.JT808GatewayExtensions.AddGateway(JT808.Protocol.IJT808Builder,System.Action{JT808.Gateway.Abstractions.Configurations.JT808Configuration})">
<summary>
添加808网关
</summary>
<param name="jT808Builder"></param>
<param name="config"></param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:JT808.Gateway.JT808GatewayExtensions.AddGateway(JT808.Protocol.IJT808Builder,Microsoft.Extensions.Configuration.IConfiguration)">
<member name="M:JT808.Gateway.JT808TcpServer.StopAsync(System.Threading.CancellationToken)">
<summary>
添加808网关
</summary>
<param name="jT808Builder"></param>
<param name="configuration"></param>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:JT808.Gateway.JT808GatewayExtensions.AddTcp(JT808.Gateway.Abstractions.IJT808GatewayBuilder)">
<member name="T:JT808.Gateway.JT808WebApi">
<summary>
添加tcp服务器
jt808 webapi
</summary>
<param name="config"></param>
<returns></returns>
</member>
<member name="M:JT808.Gateway.JT808GatewayExtensions.AddUdp(JT808.Gateway.Abstractions.IJT808GatewayBuilder)">
<member name="F:JT808.Gateway.JT808WebApi.SessionManager">
<summary>
添加udp服务器
</summary>
<param name="config"></param>
<returns></returns>
</member>
<member name="M:JT808.Gateway.JT808GatewayExtensions.AddHttp(JT808.Gateway.Abstractions.IJT808GatewayBuilder)">
<member name="F:JT808.Gateway.JT808WebApi.BlacklistManager">
<summary>
添加http服务器
</summary>
<param name="config"></param>
<returns></returns>
</member>
<member name="M:JT808.Gateway.JT808GatewayExtensions.AddHttp``1(JT808.Gateway.Abstractions.IJT808GatewayBuilder)">
<member name="M:JT808.Gateway.JT808WebApi.#ctor(JT808.Gateway.Session.JT808SessionManager,JT808.Gateway.Services.JT808BlacklistManager)">
<summary>
添加http服务器
</summary>
<typeparam name="TJT808MsgIdDefaultWebApiHandler"></typeparam>
<param name="config"></param>
<returns></returns>
<param name="jT808SessionManager"></param>
<param name="jT808BlacklistManager"></param>
</member>
<member name="M:JT808.Gateway.JT808GatewayExtensions.AddMessageHandler``1(JT808.Gateway.Abstractions.IJT808GatewayBuilder)">
<member name="M:JT808.Gateway.JT808WebApi.Index">
<summary>
添加消息业务处理程序
index
</summary>
<typeparam name="TJT808MessageHandler"></typeparam>
<param name="config"></param>
<returns></returns>
</member>
<member name="M:JT808.Gateway.JT808GatewayExtensions.AddHttpAuthorization``1(JT808.Gateway.Abstractions.IJT808GatewayBuilder)">
<member name="M:JT808.Gateway.JT808WebApi.UnificationSend(JT808.Gateway.Abstractions.Dtos.JT808UnificationSendRequestDto)">
<summary>
添加Http服务认证机制
统一下发设备消息服务
</summary>
<typeparam name="TJT808Authorization"></typeparam>
<param name="config"></param>
<returns></returns>
</member>
<member name="M:JT808.Gateway.JT808GatewayExtensions.AddMsgProducer``1(JT808.Gateway.Abstractions.IJT808GatewayBuilder)">
<member name="M:JT808.Gateway.JT808WebApi.SessionTcpGetAll">
<summary>
添加消息生产者
会话服务-Tcp会话查询
</summary>
<typeparam name="TJT808MsgProducer"></typeparam>
<param name="config"></param>
<returns></returns>
</member>
<member name="M:JT808.Gateway.JT808GatewayExtensions.AddMsgReplyLoggingProducer``1(JT808.Gateway.Abstractions.IJT808GatewayBuilder)">
<member name="M:JT808.Gateway.JT808WebApi.QueryTcpSessionByTerminalPhoneNo(JT808.Gateway.Abstractions.Dtos.JT808TerminalPhoneNoDto)">
<summary>
添加消息应答后的应答生产者
会话服务-通过设备终端号查询对应会话
</summary>
<typeparam name="TJT808MsgReplyLoggingProducer"></typeparam>
<param name="config"></param>
<param name="parameter"></param>
<returns></returns>
</member>
<member name="M:JT808.Gateway.JT808GatewayExtensions.AddMsgReplyConsumer``1(JT808.Gateway.Abstractions.IJT808GatewayBuilder)">
<member name="M:JT808.Gateway.JT808WebApi.SessionTcpRemoveByTerminalPhoneNo(JT808.Gateway.Abstractions.Dtos.JT808TerminalPhoneNoDto)">
<summary>
添加消息应答消费者
会话服务-通过设备终端号移除对应会话
</summary>
<typeparam name="TJT808MsgReplyConsumer"></typeparam>
<param name="config"></param>
<param name="parameter"></param>
<returns></returns>
</member>
<member name="M:JT808.Gateway.JT808GatewayExtensions.AddJT808Core(JT808.Gateway.Abstractions.IJT808GatewayBuilder)">
<member name="M:JT808.Gateway.JT808WebApi.SessionUdpGetAll">
<summary>
添加公共模块
会话服务-Udp会话查询
</summary>
<param name="config"></param>
<returns></returns>
</member>
<member name="T:JT808.Gateway.JT808MiniWebApi">
<member name="M:JT808.Gateway.JT808WebApi.QueryUdpSessionByTerminalPhoneNo(JT808.Gateway.Abstractions.Dtos.JT808TerminalPhoneNoDto)">
<summary>
会话服务-通过设备终端号查询对应会话
</summary>
<param name="parameter"></param>
<returns></returns>
</member>
<member name="M:JT808.Gateway.JT808MiniWebApi.UseJT808MiniWebApi(Microsoft.AspNetCore.Builder.WebApplication)">
<member name="M:JT808.Gateway.JT808WebApi.SessionUdpRemoveByTerminalPhoneNo(JT808.Gateway.Abstractions.Dtos.JT808TerminalPhoneNoDto)">
<summary>
会话服务-通过设备终端号移除对应会话
</summary>
<param name="app"></param>
<param name="parameter"></param>
<returns></returns>
</member>
<member name="T:JT808.Gateway.JT808TcpServer">
<member name="M:JT808.Gateway.JT808WebApi.BlacklistAdd(JT808.Gateway.Abstractions.Dtos.JT808TerminalPhoneNoDto)">
<summary>
808 tcp服务器
黑名单添加
</summary>
<returns></returns>
</member>
<member name="M:JT808.Gateway.JT808TcpServer.#ctor(Microsoft.Extensions.Options.IOptionsMonitor{JT808.Gateway.Abstractions.Configurations.JT808Configuration},JT808.Gateway.Abstractions.IJT808MsgProducer,JT808.Gateway.Abstractions.IJT808MsgReplyLoggingProducer,JT808.Gateway.Abstractions.JT808MessageHandler,JT808.Protocol.IJT808Config,Microsoft.Extensions.Logging.ILoggerFactory,JT808.Gateway.Session.JT808SessionManager,JT808.Gateway.Services.JT808BlacklistManager)">
<summary>
初始化服务注册
</summary>
<param name="configurationMonitor"></param>
<param name="msgProducer"></param>
<param name="msgReplyLoggingProducer"></param>
<param name="messageHandler"></param>
<param name="jT808Config"></param>
<param name="loggerFactory"></param>
<param name="jT808SessionManager"></param>
<param name="jT808BlacklistManager"></param>
</member>
<member name="M:JT808.Gateway.JT808TcpServer.StartAsync(System.Threading.CancellationToken)">
<member name="M:JT808.Gateway.JT808WebApi.BlacklistRemove(JT808.Gateway.Abstractions.Dtos.JT808TerminalPhoneNoDto)">
<summary>
黑名单删除
</summary>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="M:JT808.Gateway.JT808TcpServer.StopAsync(System.Threading.CancellationToken)">
<member name="M:JT808.Gateway.JT808WebApi.BlacklistGetAll">
<summary>
黑名单查询
</summary>
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="T:JT808.Gateway.Services.JT808BlacklistManager">


+ 0
- 39
src/JT808.Gateway/JT808GatewayExtensions.cs 파일 보기

@@ -1,7 +1,6 @@
using JT808.Gateway.Abstractions;
using JT808.Gateway.Authorization;
using JT808.Gateway.Abstractions.Configurations;
using JT808.Gateway.Handlers;
using JT808.Gateway.Internal;
using JT808.Gateway.Services;
using JT808.Gateway.Session;
@@ -71,32 +70,6 @@ namespace JT808.Gateway
return config;
}
/// <summary>
/// 添加http服务器
/// </summary>
/// <param name="config"></param>
/// <returns></returns>
public static IJT808GatewayBuilder AddHttp(this IJT808GatewayBuilder config)
{
config.JT808Builder.Services.AddSingleton<IJT808Authorization, JT808AuthorizationDefault>();
config.JT808Builder.Services.AddSingleton<JT808MsgIdDefaultWebApiHandler>();
config.JT808Builder.Services.AddHostedService<JT808HttpServer>();
return config;
}
/// <summary>
/// 添加http服务器
/// </summary>
/// <typeparam name="TJT808MsgIdDefaultWebApiHandler"></typeparam>
/// <param name="config"></param>
/// <returns></returns>
public static IJT808GatewayBuilder AddHttp<TJT808MsgIdDefaultWebApiHandler>(this IJT808GatewayBuilder config)
where TJT808MsgIdDefaultWebApiHandler: JT808MsgIdDefaultWebApiHandler
{
config.JT808Builder.Services.AddSingleton<IJT808Authorization, JT808AuthorizationDefault>();
config.JT808Builder.Services.AddSingleton(typeof(JT808MsgIdDefaultWebApiHandler),typeof(TJT808MsgIdDefaultWebApiHandler));
config.JT808Builder.Services.AddHostedService<JT808HttpServer>();
return config;
}
/// <summary>
/// 添加消息业务处理程序
/// </summary>
/// <typeparam name="TJT808MessageHandler"></typeparam>
@@ -109,18 +82,6 @@ namespace JT808.Gateway
return config;
}
/// <summary>
/// 添加Http服务认证机制
/// </summary>
/// <typeparam name="TJT808Authorization"></typeparam>
/// <param name="config"></param>
/// <returns></returns>
public static IJT808GatewayBuilder AddHttpAuthorization<TJT808Authorization>(this IJT808GatewayBuilder config)
where TJT808Authorization : IJT808Authorization
{
config.JT808Builder.Services.Replace(new ServiceDescriptor(typeof(IJT808Authorization), typeof(TJT808Authorization), ServiceLifetime.Singleton));
return config;
}
/// <summary>
/// 添加消息生产者
/// </summary>
/// <typeparam name="TJT808MsgProducer"></typeparam>


+ 0
- 180
src/JT808.Gateway/JT808HttpServer.cs 파일 보기

@@ -1,180 +0,0 @@
using JT808.Gateway.Abstractions;
using JT808.Gateway.Abstractions.Configurations;
using JT808.Gateway.Extensions;
using JT808.Gateway.Handlers;
using JT808.Gateway.Session;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using System;
using System.Buffers;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.WebSockets;
using System.Security.Principal;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace JT808.Gateway
{
public class JT808HttpServer : IHostedService
{
private readonly ILogger Logger;

private readonly JT808Configuration Configuration;

private readonly IJT808Authorization authorization;

private HttpListener listener;

private readonly JT808MsgIdDefaultWebApiHandler MsgIdDefaultWebApiHandler;

public JT808HttpServer(
JT808MsgIdDefaultWebApiHandler jT808MsgIdDefaultWebApiHandler,
IOptions<JT808Configuration> jT808ConfigurationAccessor,
IJT808Authorization authorization,
ILoggerFactory loggerFactory)
{
Logger = loggerFactory.CreateLogger<JT808HttpServer>();
Configuration = jT808ConfigurationAccessor.Value;
MsgIdDefaultWebApiHandler = jT808MsgIdDefaultWebApiHandler;
this.authorization = authorization;
}

public Task StartAsync(CancellationToken cancellationToken)
{
if (!HttpListener.IsSupported)
{
Logger.LogWarning("Windows XP SP2 or Server 2003 is required to use the HttpListener class.");
return Task.CompletedTask;
}
listener = new HttpListener();
listener.AuthenticationSchemes = AuthenticationSchemes.Anonymous;
try
{
listener.Prefixes.Add($"http://*:{Configuration.WebApiPort}/");
listener.Start();
}
catch (System.Net.HttpListenerException ex)
{
Logger.LogWarning(ex, $"{ex.Message}:使用cmd命令[netsh http add urlacl url=http://*:{Configuration.WebApiPort}/ user=Everyone]");
}
Logger.LogInformation($"JT808 Http Server start at {IPAddress.Any}:{Configuration.WebApiPort}.");
Task.Factory.StartNew(() =>
{
while (listener.IsListening)
{
var context = listener.GetContext();
try
{
if (context.Request.RawUrl.StartsWith("/favicon.ico"))
{
context.Http404();
continue;
}
// 增加CORS
// https://stackoverflow.com/questions/25437405/cors-access-for-httplistener
context.Response.AppendHeader("Access-Control-Allow-Origin", "*");
if (context.Request.HttpMethod == HttpMethod.Options.Method)
{
context.Response.AddHeader("Access-Control-Allow-Headers", "*");
context.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST");
context.Response.AddHeader("Access-Control-Max-Age", "1728000");
context.Http204();
}
if (authorization.Authorization(context, out var principal))
{
DateTime start = DateTime.Now;
if (Logger.IsEnabled(LogLevel.Debug))
{
Logger.LogDebug($"ProcessRequestAsync Start:{context.Request.RemoteEndPoint}-{context.Request.RawUrl}");
}
ProcessRequest(context, principal);
if (Logger.IsEnabled(LogLevel.Debug))
{
double time = (DateTime.Now - start).TotalMilliseconds;
Logger.LogDebug($"ProcessRequestAsync End:{context.Request.RemoteEndPoint}-{context.Request.RawUrl} {time}ms");
}
}
else
{
context.Http401();
}
}
catch (AggregateException ex)
{
context.Http500();
Logger.LogError(ex, ex.StackTrace);
}
catch (Exception ex)
{
context.Http500();
Logger.LogError(ex, ex.StackTrace);
}
}
}, cancellationToken);
return Task.CompletedTask;
}

private void ProcessRequest(HttpListenerContext context, IPrincipal principal)
{
var router = MsgIdDefaultWebApiHandler.HandlerDict.FirstOrDefault(f => context.Request.RawUrl.StartsWith(f.Key));
if (router.Key == null)
{
context.Http404();
return;
}
byte[] response;
if (context.Request.HttpMethod == HttpMethod.Get.Method)
{
var index = context.Request.Url.AbsoluteUri.IndexOf('?');
if (index > 0)
{
var uriParamStr = context.Request.Url.AbsoluteUri[(index + 1)..].ToString();
response = router.Value(uriParamStr);
context.HttpSend(response);
}
else
{
response = router.Value("");
context.HttpSend(response);
}
}
else if(context.Request.HttpMethod == HttpMethod.Post.Method)
{
string json = string.Empty;
using (var reader = new StreamReader(context.Request.InputStream,context.Request.ContentEncoding))
{
json = reader.ReadToEnd();
}
response = router.Value(json);
context.HttpSend(response);
}
else
{
context.Http405();
}
}

public Task StopAsync(CancellationToken cancellationToken)
{
try
{
listener.Stop();
}
catch (System.ObjectDisposedException ex)
{
Logger.LogError(ex, "");
}
catch (Exception ex)
{
Logger.LogError(ex, "");
}
return Task.CompletedTask;
}
}
}

+ 0
- 52
src/JT808.Gateway/JT808MiniWebApi.cs 파일 보기

@@ -1,52 +0,0 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Http;
using JT808.Gateway.Abstractions;
using JT808.Gateway.Abstractions.Dtos;
using System.Text.Json;
using Microsoft.Extensions.DependencyInjection;
using JT808.Gateway.Session;
using JT808.Gateway.Services;
using System;

namespace JT808.Gateway
{
/// <summary>
///
/// </summary>
public static class JT808MiniWebApi
{
/// <summary>
///
/// </summary>
/// <param name="app"></param>
/// <returns></returns>
public static void UseJT808MiniWebApi(this WebApplication app)
{
//CreateRoute(JT808GatewayConstants.JT808WebApiRouteTable.UnificationSend, UnificationSend);
//CreateRoute(JT808GatewayConstants.JT808WebApiRouteTable.BlacklistAdd, BlacklistAdd);
//CreateRoute(JT808GatewayConstants.JT808WebApiRouteTable.BlacklistRemove, BlacklistRemove);
//CreateRoute(JT808GatewayConstants.JT808WebApiRouteTable.BlacklistGet, QueryBlacklist);
app.MapPost(JT808GatewayConstants.JT808WebApiRouteTable.UnificationSend,async context =>
{
JT808ResultDto<bool> resultDto = new JT808ResultDto<bool>();
JT808SessionManager SessionManager = context.RequestServices.GetRequiredService<JT808SessionManager>();
JT808BlacklistManager BlacklistManager = context.RequestServices.GetRequiredService<JT808BlacklistManager>();
try
{
JT808UnificationSendRequestDto jT808UnificationSendRequestDto = JsonSerializer.Deserialize<JT808UnificationSendRequestDto>(context.Request.Body);
resultDto.Data = await SessionManager.TrySendByTerminalPhoneNoAsync(jT808UnificationSendRequestDto.TerminalPhoneNo,Convert.FromHexString(jT808UnificationSendRequestDto.HexData));
resultDto.Code = JT808ResultCode.Ok;
}
catch (Exception ex)
{
resultDto.Data = false;
resultDto.Code = JT808ResultCode.Error;
resultDto.Message = ex.StackTrace;
}
await context.Response.WriteAsJsonAsync(resultDto);
});
}
}
}

src/JT808.Gateway/Handlers/JT808MsgIdDefaultWebApiHandler.cs → src/JT808.Gateway/JT808WebApi.cs 파일 보기

@@ -1,45 +1,92 @@
using JT808.Gateway.Abstractions;
using JT808.Gateway.Abstractions.Dtos;
using JT808.Gateway.Authorization;
using JT808.Gateway.Services;
using JT808.Gateway.Session;
using JT808.Protocol.Extensions;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;

namespace JT808.Gateway.Handlers
namespace JT808.Gateway
{
/// <summary>
/// 默认消息处理业务实现
/// jt808 webapi
/// </summary>
public class JT808MsgIdDefaultWebApiHandler : JT808MsgIdHttpHandlerBase
[ApiController]
[Route("jt808api")]
public sealed class JT808WebApi:ControllerBase
{
private JT808SessionManager SessionManager;
private JT808BlacklistManager BlacklistManager;
/// <summary>
///
/// </summary>
JT808SessionManager SessionManager;
/// <summary>
///
/// </summary>
JT808BlacklistManager BlacklistManager;

/// <summary>
///
/// </summary>
/// <param name="jT808SessionManager"></param>
/// <param name="jT808BlacklistManager"></param>
public JT808MsgIdDefaultWebApiHandler(
public JT808WebApi(
JT808SessionManager jT808SessionManager,
JT808BlacklistManager jT808BlacklistManager)
{
this.SessionManager = jT808SessionManager;
this.BlacklistManager = jT808BlacklistManager;
InitTcpRoute();
InitUdpRoute();
InitCommontRoute();
}

/// <summary>
/// 会话服务集合
/// index
/// </summary>
/// <returns></returns>
[HttpGet]
[Route("index")]
public ActionResult<JT808ResultDto<string>> Index()
{
JT808ResultDto<string> resultDto = new JT808ResultDto<string>();
resultDto.Data = "Hello,JT808 WebApi";
resultDto.Code = JT808ResultCode.Ok;
return resultDto;
}

/// <summary>
/// 统一下发设备消息服务
/// </summary>
/// <returns></returns>
[HttpPost]
[Route("UnificationSend")]
[JT808Token]
public async Task<ActionResult<JT808ResultDto<bool>>> UnificationSend([FromBody] JT808UnificationSendRequestDto parameter)
{
JT808ResultDto<bool> resultDto = new JT808ResultDto<bool>();
try
{
resultDto.Data = await SessionManager.TrySendByTerminalPhoneNoAsync(parameter.TerminalPhoneNo, Convert.FromHexString(parameter.HexData));
resultDto.Code = JT808ResultCode.Ok;
}
catch (Exception ex)
{
resultDto.Data = false;
resultDto.Code = JT808ResultCode.Error;
resultDto.Message = ex.StackTrace;
}
return resultDto;
}

/// <summary>
/// 会话服务-Tcp会话查询
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public byte[] GetTcpSessionAll(string json)
[HttpGet]
[Route("/Tcp/Session/GetAll")]
[JT808Token]
public ActionResult<JT808ResultDto<List<JT808TcpSessionInfoDto>>> SessionTcpGetAll()
{
JT808ResultDto<List<JT808TcpSessionInfoDto>> resultDto = new JT808ResultDto<List<JT808TcpSessionInfoDto>>();
try
@@ -51,33 +98,31 @@ namespace JT808.Gateway.Handlers
TerminalPhoneNo = s.TerminalPhoneNo,
RemoteAddressIP = s.RemoteEndPoint.ToString(),
}).ToList();

resultDto.Code = JT808ResultCode.Ok;
}
catch (Exception ex)
{
resultDto.Data = null;
resultDto.Data = new List<JT808TcpSessionInfoDto>();
resultDto.Code = JT808ResultCode.Error;
resultDto.Message = ex.StackTrace;
}
return CreateHttpResponse(resultDto);
return resultDto;
}

/// <summary>
/// 通过终端手机号查询对应会话
/// 会话服务-通过设备终端号查询对应会话
/// </summary>
/// <param name="json"></param>
/// <param name="parameter"></param>
/// <returns></returns>
public byte[] QueryTcpSessionByTerminalPhoneNo(string json)
[HttpPost]
[Route("/Tcp/Session/QuerySessionByTerminalPhoneNo")]
[JT808Token]
public ActionResult<JT808ResultDto<JT808TcpSessionInfoDto>> QueryTcpSessionByTerminalPhoneNo([FromBody] JT808TerminalPhoneNoDto parameter)
{
if (string.IsNullOrEmpty(json))
{
return EmptyHttpResponse();
}

JT808ResultDto<JT808TcpSessionInfoDto> resultDto = new JT808ResultDto<JT808TcpSessionInfoDto>();
try
{
JT808TerminalPhoneNoDto parameter = JsonSerializer.Deserialize<JT808TerminalPhoneNoDto>(json);
resultDto.Data = SessionManager.GetTcpAll(w => w.TerminalPhoneNo == parameter.TerminalPhoneNo).Select(s => new JT808TcpSessionInfoDto
{
LastActiveTime = s.ActiveTime,
@@ -93,49 +138,43 @@ namespace JT808.Gateway.Handlers
resultDto.Code = JT808ResultCode.Error;
resultDto.Message = ex.StackTrace;
}
return CreateHttpResponse(resultDto);
return resultDto;
}

/// <summary>
/// 会话服务-通过设备终端号移除对应会话
/// </summary>
/// <param name="json"></param>
/// <param name="parameter"></param>
/// <returns></returns>
public byte[] RemoveSessionByTerminalPhoneNo(string json)
[HttpPost]
[Route("/Tcp/Session/RemoveByTerminalPhoneNo")]
[JT808Token]
public ActionResult<JT808ResultDto<bool>> SessionTcpRemoveByTerminalPhoneNo([FromBody] JT808TerminalPhoneNoDto parameter)
{
if (string.IsNullOrEmpty(json))
{
return EmptyHttpResponse();
}
JT808ResultDto<bool> resultDto = new JT808ResultDto<bool>();
try
{
JT808TerminalPhoneNoDto parameter = JsonSerializer.Deserialize<JT808TerminalPhoneNoDto>(json);
SessionManager.RemoveByTerminalPhoneNo(parameter.TerminalPhoneNo);
resultDto.Code = JT808ResultCode.Ok;
resultDto.Data = true;
}
catch (AggregateException ex)
{
resultDto.Data = false;
resultDto.Code = 500;
resultDto.Message = ex.StackTrace;
}
catch (Exception ex)
{
resultDto.Data = false;
resultDto.Code = JT808ResultCode.Error;
resultDto.Message = ex.StackTrace;
}
return CreateHttpResponse(resultDto);
return resultDto;
}

/// <summary>
/// 会话服务集合
/// 会话服务-Udp会话查询
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public byte[] GetUdpSessionAll(string json)
[HttpGet]
[Route("/Udp/Session/GetAll")]
[JT808Token]
public ActionResult<JT808ResultDto<List<JT808UdpSessionInfoDto>>> SessionUdpGetAll()
{
JT808ResultDto<List<JT808UdpSessionInfoDto>> resultDto = new JT808ResultDto<List<JT808UdpSessionInfoDto>>();
try
@@ -147,32 +186,30 @@ namespace JT808.Gateway.Handlers
TerminalPhoneNo = s.TerminalPhoneNo,
RemoteAddressIP = s.RemoteEndPoint.ToString(),
}).ToList();

resultDto.Code = JT808ResultCode.Ok;
}
catch (Exception ex)
{
resultDto.Data = null;
resultDto.Data = new List<JT808UdpSessionInfoDto>();
resultDto.Code = JT808ResultCode.Error;
resultDto.Message = ex.StackTrace;
}
return CreateHttpResponse(resultDto);
return resultDto;
}

/// <summary>
/// 通过终端手机号查询对应会话
/// 会话服务-通过设备终端号查询对应会话
/// </summary>
/// <param name="json"></param>
/// <param name="parameter"></param>
/// <returns></returns>
public byte[] QueryUdpSessionByTerminalPhoneNo(string json)
[HttpPost]
[Route("/Udp/Session/QuerySessionByTerminalPhoneNo")]
[JT808Token]
public ActionResult<JT808ResultDto<JT808UdpSessionInfoDto>> QueryUdpSessionByTerminalPhoneNo([FromBody] JT808TerminalPhoneNoDto parameter)
{
if (string.IsNullOrEmpty(json))
{
return EmptyHttpResponse();
}
JT808ResultDto<JT808UdpSessionInfoDto> resultDto = new JT808ResultDto<JT808UdpSessionInfoDto>();
try
{
JT808TerminalPhoneNoDto parameter = JsonSerializer.Deserialize<JT808TerminalPhoneNoDto>(json);
resultDto.Data = SessionManager.GetUdpAll(w => w.TerminalPhoneNo == parameter.TerminalPhoneNo).Select(s => new JT808UdpSessionInfoDto
{
LastActiveTime = s.ActiveTime,
@@ -188,90 +225,50 @@ namespace JT808.Gateway.Handlers
resultDto.Code = JT808ResultCode.Error;
resultDto.Message = ex.StackTrace;
}
return CreateHttpResponse(resultDto);
return resultDto;
}

/// <summary>
/// 会话服务-通过设备终端号移除对应会话
/// </summary>
/// <param name="json"></param>
/// <param name="parameter"></param>
/// <returns></returns>
public byte[] RemoveUdpByTerminalPhoneNo(string json)
[HttpPost]
[Route("/Udp/Session/RemoveByTerminalPhoneNo")]
[JT808Token]
public ActionResult<JT808ResultDto<bool>> SessionUdpRemoveByTerminalPhoneNo([FromBody] JT808TerminalPhoneNoDto parameter)
{
if (string.IsNullOrEmpty(json))
{
return EmptyHttpResponse();
}
JT808ResultDto<bool> resultDto = new JT808ResultDto<bool>();
try
{
JT808TerminalPhoneNoDto parameter = JsonSerializer.Deserialize<JT808TerminalPhoneNoDto>(json);
SessionManager.RemoveByTerminalPhoneNo(parameter.TerminalPhoneNo);
resultDto.Code = JT808ResultCode.Ok;
resultDto.Data = true;
}
catch (AggregateException ex)
{
resultDto.Data = false;
resultDto.Code = 500;
resultDto.Message = ex.StackTrace;
}
catch (Exception ex)
{
resultDto.Data = false;
resultDto.Code = JT808ResultCode.Error;
resultDto.Message = ex.StackTrace;
}
return CreateHttpResponse(resultDto);
return resultDto;
}

/// <summary>
/// 统一下发信息
/// 黑名单添加
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public byte[] UnificationSend(string json)
[HttpPost]
[Route("/Blacklist/Add")]
[JT808Token]
public ActionResult<JT808ResultDto<bool>> BlacklistAdd([FromBody] JT808TerminalPhoneNoDto parameter)
{
if (string.IsNullOrEmpty(json))
{
return EmptyHttpResponse();
}
JT808ResultDto<bool> resultDto = new JT808ResultDto<bool>();
try
{
JT808UnificationSendRequestDto jT808UnificationSendRequestDto = JsonSerializer.Deserialize<JT808UnificationSendRequestDto>(json);
resultDto.Data = SessionManager.TrySendByTerminalPhoneNoAsync(jT808UnificationSendRequestDto.TerminalPhoneNo, jT808UnificationSendRequestDto.HexData.ToHexBytes())
.GetAwaiter()
.GetResult();
resultDto.Code = JT808ResultCode.Ok;
}
catch (Exception ex)
{
resultDto.Data = false;
resultDto.Code = JT808ResultCode.Error;
resultDto.Message = ex.StackTrace;
}
return CreateHttpResponse(resultDto);
}

/// <summary>
/// 添加sim卡黑名单
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public byte[] BlacklistAdd(string json)
{
if (string.IsNullOrEmpty(json))
{
return EmptyHttpResponse();
}
JT808ResultDto<bool> resultDto = new JT808ResultDto<bool>();
try
{
JT808TerminalPhoneNoDto parameter = JsonSerializer.Deserialize<JT808TerminalPhoneNoDto>(json);
BlacklistManager.Add(parameter.TerminalPhoneNo);
resultDto.Data = true;
resultDto.Code = JT808ResultCode.Ok;
resultDto.Data = true;
}
catch (Exception ex)
{
@@ -279,27 +276,24 @@ namespace JT808.Gateway.Handlers
resultDto.Code = JT808ResultCode.Error;
resultDto.Message = ex.StackTrace;
}
return CreateHttpResponse(resultDto);
return resultDto;
}

/// <summary>
/// 移除sim卡黑名单
/// 黑名单删除
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public byte[] BlacklistRemove(string json)
[HttpPost]
[Route("/Blacklist/Remove")]
[JT808Token]
public ActionResult<JT808ResultDto<bool>> BlacklistRemove([FromBody] JT808TerminalPhoneNoDto parameter)
{
if (string.IsNullOrEmpty(json))
{
return EmptyHttpResponse();
}
JT808ResultDto<bool> resultDto = new JT808ResultDto<bool>();
try
{
JT808TerminalPhoneNoDto parameter = JsonSerializer.Deserialize<JT808TerminalPhoneNoDto>(json);
BlacklistManager.Remove(parameter.TerminalPhoneNo);
resultDto.Data = true;
resultDto.Code = JT808ResultCode.Ok;
resultDto.Data = true;
}
catch (Exception ex)
{
@@ -307,60 +301,32 @@ namespace JT808.Gateway.Handlers
resultDto.Code = JT808ResultCode.Error;
resultDto.Message = ex.StackTrace;
}
return CreateHttpResponse(resultDto);
return resultDto;
}

/// <summary>
/// 查询sim卡黑名单
/// 黑名单查询
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public byte[] QueryBlacklist(string json)
[HttpGet]
[Route("/Blacklist/GetAll")]
[JT808Token]
public ActionResult<JT808ResultDto<List<string>>> BlacklistGetAll()
{
JT808ResultDto<List<string>> resultDto = new JT808ResultDto<List<string>>();
try
{
resultDto.Data = BlacklistManager.GetAll();
resultDto.Code = JT808ResultCode.Ok;
resultDto.Data = BlacklistManager.GetAll();
}
catch (Exception ex)
{
resultDto.Data = null;
resultDto.Data = new List<string>();
resultDto.Code = JT808ResultCode.Error;
resultDto.Message = ex.StackTrace;
}
return CreateHttpResponse(resultDto);
}

/// <summary>
///
/// </summary>
protected virtual void InitCommontRoute()
{
CreateRoute(JT808GatewayConstants.JT808WebApiRouteTable.UnificationSend, UnificationSend);
CreateRoute(JT808GatewayConstants.JT808WebApiRouteTable.BlacklistAdd, BlacklistAdd);
CreateRoute(JT808GatewayConstants.JT808WebApiRouteTable.BlacklistRemove, BlacklistRemove);
CreateRoute(JT808GatewayConstants.JT808WebApiRouteTable.BlacklistGet, QueryBlacklist);
}

/// <summary>
///
/// </summary>
protected virtual void InitTcpRoute()
{
CreateRoute(JT808GatewayConstants.JT808WebApiRouteTable.SessionTcpGetAll, GetTcpSessionAll);
CreateRoute(JT808GatewayConstants.JT808WebApiRouteTable.QueryTcpSessionByTerminalPhoneNo, QueryTcpSessionByTerminalPhoneNo);
CreateRoute(JT808GatewayConstants.JT808WebApiRouteTable.SessionRemoveByTerminalPhoneNo, RemoveSessionByTerminalPhoneNo);
return resultDto;
}

/// <summary>
///
/// </summary>
protected virtual void InitUdpRoute()
{
CreateRoute(JT808GatewayConstants.JT808WebApiRouteTable.SessionUdpGetAll, GetUdpSessionAll);
CreateRoute(JT808GatewayConstants.JT808WebApiRouteTable.QueryUdpSessionByTerminalPhoneNo, QueryUdpSessionByTerminalPhoneNo);
CreateRoute(JT808GatewayConstants.JT808WebApiRouteTable.RemoveUdpByTerminalPhoneNo, RemoveUdpByTerminalPhoneNo);
}
}
}

불러오는 중...
취소
저장