@@ -6,6 +6,6 @@ | |||||
public class JT808UnificationSendRequestDto | public class JT808UnificationSendRequestDto | ||||
{ | { | ||||
public string TerminalPhoneNo { get; set; } | public string TerminalPhoneNo { get; set; } | ||||
public string Data { get; set; } | |||||
public string HexData { get; set; } | |||||
} | } | ||||
} | } |
@@ -3,6 +3,7 @@ using System; | |||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Net.Sockets; | using System.Net.Sockets; | ||||
using System.Text; | using System.Text; | ||||
using System.Threading.Tasks; | |||||
namespace JT808.Gateway.Abstractions | namespace JT808.Gateway.Abstractions | ||||
{ | { | ||||
@@ -19,5 +20,17 @@ namespace JT808.Gateway.Abstractions | |||||
await session.Client.SendToAsync(data, SocketFlags.None, session.RemoteEndPoint); | await session.Client.SendToAsync(data, SocketFlags.None, session.RemoteEndPoint); | ||||
} | } | ||||
} | } | ||||
public static void Send(this IJT808Session session, byte[] data) | |||||
{ | |||||
if (session.TransportProtocolType == JT808TransportProtocolType.tcp) | |||||
{ | |||||
session.Client.Send(data, SocketFlags.None); | |||||
} | |||||
else | |||||
{ | |||||
session.Client.SendTo(data, SocketFlags.None, session.RemoteEndPoint); | |||||
} | |||||
} | |||||
} | } | ||||
} | } |
@@ -25,6 +25,13 @@ | |||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> | ||||
<DocumentationFile>JT808.Gateway.Abstractions.xml</DocumentationFile> | <DocumentationFile>JT808.Gateway.Abstractions.xml</DocumentationFile> | ||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | |||||
<Compile Remove="Enums\JT808UseType.cs" /> | |||||
<Compile Remove="IJT808NormalGatewayBuilder.cs" /> | |||||
<Compile Remove="IJT808QueueGatewayBuilder.cs" /> | |||||
<Compile Remove="JT808NormalReplyMessageHandler.cs" /> | |||||
<Compile Remove="JT808QueueReplyMessageHandler.cs" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="JT808" Version="2.2.12" /> | <PackageReference Include="JT808" Version="2.2.12" /> | ||||
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="3.1.7" /> | <PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="3.1.7" /> | ||||
@@ -0,0 +1,333 @@ | |||||
using JT808.Protocol; | |||||
using JT808.Protocol.Enums; | |||||
using JT808.Protocol.Extensions; | |||||
using JT808.Protocol.MessageBody; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT808.Gateway.Abstractions | |||||
{ | |||||
/// <summary> | |||||
/// 通用消息处理程序 | |||||
/// </summary> | |||||
public class JT808MessageHandler | |||||
{ | |||||
protected Dictionary<ushort, MsgIdMethodDelegate> HandlerDict { get; } | |||||
protected delegate byte[] MsgIdMethodDelegate(JT808HeaderPackage package, IJT808Session session); | |||||
protected JT808Serializer JT808Serializer { get; } | |||||
public JT808MessageHandler(IJT808Config jT808Config) | |||||
{ | |||||
this.JT808Serializer = jT808Config.GetSerializer(); | |||||
HandlerDict = new Dictionary<ushort, MsgIdMethodDelegate> { | |||||
{JT808MsgId.终端通用应答.ToUInt16Value(), Msg0x0001}, | |||||
{JT808MsgId.终端鉴权.ToUInt16Value(), Msg0x0102}, | |||||
{JT808MsgId.终端心跳.ToUInt16Value(), Msg0x0002}, | |||||
{JT808MsgId.终端注销.ToUInt16Value(), Msg0x0003}, | |||||
{JT808MsgId.终端注册.ToUInt16Value(), Msg0x0100}, | |||||
{JT808MsgId.位置信息汇报.ToUInt16Value(),Msg0x0200 }, | |||||
{JT808MsgId.定位数据批量上传.ToUInt16Value(),Msg0x0704 }, | |||||
{JT808MsgId.数据上行透传.ToUInt16Value(),Msg0x0900 }, | |||||
{JT808MsgId.查询服务器时间请求.ToUInt16Value(),Msg0x0004 }, | |||||
{JT808MsgId.查询终端参数应答.ToUInt16Value(),Msg0x0104 }, | |||||
{JT808MsgId.查询终端属性应答.ToUInt16Value(),Msg0x0107 }, | |||||
{JT808MsgId.终端升级结果通知.ToUInt16Value(),Msg0x0108 }, | |||||
{JT808MsgId.位置信息查询应答.ToUInt16Value(),Msg0x0201 }, | |||||
{JT808MsgId.链路检测.ToUInt16Value(),Msg0x8204 }, | |||||
{JT808MsgId.车辆控制应答.ToUInt16Value(),Msg0x0500 }, | |||||
{JT808MsgId.摄像头立即拍摄命令.ToUInt16Value(),Msg0x8801 }, | |||||
{JT808MsgId.多媒体数据上传.ToUInt16Value(),Msg0x0801 }, | |||||
{JT808MsgId.多媒体事件信息上传.ToUInt16Value(),Msg0x0800 }, | |||||
{JT808MsgId.CAN总线数据上传.ToUInt16Value(),Msg0x0705 }, | |||||
}; | |||||
} | |||||
/// <summary> | |||||
/// 消息处理 | |||||
/// </summary> | |||||
/// <param name="request">请求数据</param> | |||||
/// <param name="session">当前会话</param> | |||||
/// <returns>应答消息数据</returns> | |||||
public virtual byte[] Processor(JT808HeaderPackage request, IJT808Session session) | |||||
{ | |||||
if (HandlerDict.TryGetValue(request.Header.MsgId, out var func)) | |||||
{ | |||||
return func(request, session); | |||||
} | |||||
return default; | |||||
//else | |||||
//{ | |||||
// //处理不了的消息统一回复通用应答 | |||||
// return CommonReply(request, session); | |||||
//} | |||||
} | |||||
/// <summary> | |||||
/// 终端通用应答 | |||||
/// 平台无需回复 | |||||
/// 实现自己的业务 | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <returns></returns> | |||||
public virtual byte[] Msg0x0001(JT808HeaderPackage request, IJT808Session session) | |||||
{ | |||||
return default; | |||||
} | |||||
/// <summary> | |||||
/// 平台通用应答 | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <param name="session"></param> | |||||
public virtual byte[] CommonReply(JT808HeaderPackage request, IJT808Session session) | |||||
{ | |||||
if (request.Version == JT808Version.JTT2019) | |||||
{ | |||||
byte[] data = JT808Serializer.Serialize(JT808MsgId.平台通用应答.Create_平台通用应答_2019(request.Header.TerminalPhoneNo, new JT808_0x8001() | |||||
{ | |||||
AckMsgId = request.Header.MsgId, | |||||
JT808PlatformResult = JT808PlatformResult.成功, | |||||
MsgNum = request.Header.MsgNum | |||||
})); | |||||
session.Send(data); | |||||
return data; | |||||
} | |||||
else | |||||
{ | |||||
byte[] data = JT808Serializer.Serialize(JT808MsgId.平台通用应答.Create(request.Header.TerminalPhoneNo, new JT808_0x8001() | |||||
{ | |||||
AckMsgId = request.Header.MsgId, | |||||
JT808PlatformResult = JT808PlatformResult.成功, | |||||
MsgNum = request.Header.MsgNum | |||||
})); | |||||
session.Send(data); | |||||
return data; | |||||
} | |||||
} | |||||
/// <summary> | |||||
/// 终端心跳 | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <returns></returns> | |||||
public virtual byte[] Msg0x0002(JT808HeaderPackage request, IJT808Session session) | |||||
{ | |||||
return CommonReply(request, session); | |||||
} | |||||
/// <summary> | |||||
/// 查询服务器时间 | |||||
/// 2019版本 | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <param name="session"></param> | |||||
/// <returns></returns> | |||||
public virtual byte[] Msg0x0004(JT808HeaderPackage request, IJT808Session session) | |||||
{ | |||||
byte[] data = JT808Serializer.Serialize(JT808MsgId.查询服务器时间应答.Create(request.Header.TerminalPhoneNo, new JT808_0x8004() | |||||
{ | |||||
Time=DateTime.Now | |||||
})); | |||||
session.Send(data); | |||||
return data; | |||||
} | |||||
/// <summary> | |||||
/// 服务器补传分包请求 | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <param name="session"></param> | |||||
/// <returns></returns> | |||||
public virtual byte[] Msg0x8003(JT808HeaderPackage request, IJT808Session session) | |||||
{ | |||||
throw new NotImplementedException("0x8003-服务器补传分包请求"); | |||||
} | |||||
/// <summary> | |||||
/// 终端补传分包请求 | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <param name="session"></param> | |||||
/// <returns></returns> | |||||
public virtual byte[] Msg0x0005(JT808HeaderPackage request, IJT808Session session) | |||||
{ | |||||
throw new NotImplementedException("0x0005-终端补传分包请求"); | |||||
} | |||||
/// <summary> | |||||
/// 终端注册 | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <param name="session"></param> | |||||
/// <returns></returns> | |||||
public virtual byte[] Msg0x0100(JT808HeaderPackage request, IJT808Session session) | |||||
{ | |||||
if (request.Version == JT808Version.JTT2019) | |||||
{ | |||||
byte[] data = JT808Serializer.Serialize(JT808MsgId.终端注册应答.Create_终端注册应答_2019(request.Header.TerminalPhoneNo, new JT808_0x8100() | |||||
{ | |||||
Code = "J" + request.Header.TerminalPhoneNo, | |||||
JT808TerminalRegisterResult = JT808TerminalRegisterResult.成功, | |||||
AckMsgNum = request.Header.MsgNum | |||||
})); | |||||
session.Send(data); | |||||
return data; | |||||
} | |||||
else | |||||
{ | |||||
byte[] data = JT808Serializer.Serialize(JT808MsgId.终端注册应答.Create(request.Header.TerminalPhoneNo, new JT808_0x8100() | |||||
{ | |||||
Code = "J" + request.Header.TerminalPhoneNo, | |||||
JT808TerminalRegisterResult = JT808TerminalRegisterResult.成功, | |||||
AckMsgNum = request.Header.MsgNum | |||||
})); | |||||
session.Send(data); | |||||
return data; | |||||
} | |||||
} | |||||
/// <summary> | |||||
/// 终端注销 | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <param name="session"></param> | |||||
/// <returns></returns> | |||||
public virtual byte[] Msg0x0003(JT808HeaderPackage request, IJT808Session session) | |||||
{ | |||||
return CommonReply(request, session); | |||||
} | |||||
/// <summary> | |||||
/// 终端鉴权 | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <param name="session"></param> | |||||
/// <returns></returns> | |||||
public virtual byte[] Msg0x0102(JT808HeaderPackage request, IJT808Session session) | |||||
{ | |||||
return CommonReply(request, session); | |||||
} | |||||
/// <summary> | |||||
/// 查询终端参数应答 | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <param name="session"></param> | |||||
/// <returns></returns> | |||||
public virtual byte[] Msg0x0104(JT808HeaderPackage request, IJT808Session session) | |||||
{ | |||||
return CommonReply(request, session); | |||||
} | |||||
/// <summary> | |||||
/// 查询终端属性应答 | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <param name="session"></param> | |||||
/// <returns></returns> | |||||
public virtual byte[] Msg0x0107(JT808HeaderPackage request, IJT808Session session) | |||||
{ | |||||
return CommonReply(request, session); | |||||
} | |||||
/// <summary> | |||||
/// 终端升级结果应答 | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <param name="session"></param> | |||||
/// <returns></returns> | |||||
public virtual byte[] Msg0x0108(JT808HeaderPackage request, IJT808Session session) | |||||
{ | |||||
return CommonReply(request, session); | |||||
} | |||||
/// <summary> | |||||
/// 位置信息汇报 | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <param name="session"></param> | |||||
/// <returns></returns> | |||||
public virtual byte[] Msg0x0200(JT808HeaderPackage request, IJT808Session session) | |||||
{ | |||||
return CommonReply(request, session); | |||||
} | |||||
/// <summary> | |||||
/// 位置信息查询应答 | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <param name="session"></param> | |||||
/// <returns></returns> | |||||
public virtual byte[] Msg0x0201(JT808HeaderPackage request, IJT808Session session) | |||||
{ | |||||
return CommonReply(request, session); | |||||
} | |||||
/// <summary> | |||||
/// 链路检测 | |||||
/// 2019版本 | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <param name="session"></param> | |||||
/// <returns></returns> | |||||
public virtual byte[] Msg0x8204(JT808HeaderPackage request, IJT808Session session) | |||||
{ | |||||
return default; | |||||
} | |||||
/// <summary> | |||||
/// 车辆控制应答 | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <param name="session"></param> | |||||
/// <returns></returns> | |||||
public virtual byte[] Msg0x0500(JT808HeaderPackage request, IJT808Session session) | |||||
{ | |||||
return CommonReply(request, session); | |||||
} | |||||
/// <summary> | |||||
/// 定位数据批量上传 | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <param name="session"></param> | |||||
/// <returns></returns> | |||||
public virtual byte[] Msg0x0704(JT808HeaderPackage request, IJT808Session session) | |||||
{ | |||||
return CommonReply(request, session); | |||||
} | |||||
/// <summary> | |||||
/// CAN总线数据上传 | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <param name="session"></param> | |||||
/// <returns></returns> | |||||
public virtual byte[] Msg0x0705(JT808HeaderPackage request, IJT808Session session) | |||||
{ | |||||
return CommonReply(request, session); | |||||
} | |||||
/// <summary> | |||||
/// 多媒体事件信息上传 | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <param name="session"></param> | |||||
/// <returns></returns> | |||||
public virtual byte[] Msg0x0800(JT808HeaderPackage request, IJT808Session session) | |||||
{ | |||||
return CommonReply(request, session); | |||||
} | |||||
/// <summary> | |||||
/// 多媒体数据上传 | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <param name="session"></param> | |||||
/// <returns></returns> | |||||
public virtual byte[] Msg0x0801(JT808HeaderPackage request, IJT808Session session) | |||||
{ | |||||
throw new NotImplementedException("0x8800多媒体数据上传应答"); | |||||
} | |||||
/// <summary> | |||||
/// 摄像头立即拍摄命令 | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <param name="session"></param> | |||||
/// <returns></returns> | |||||
public virtual byte[] Msg0x8801(JT808HeaderPackage request, IJT808Session session) | |||||
{ | |||||
throw new NotImplementedException("0x0805摄像头立即拍摄命令应答"); | |||||
} | |||||
/// <summary> | |||||
/// 数据上行透传 | |||||
/// </summary> | |||||
/// <param name="request"></param> | |||||
/// <param name="session"></param> | |||||
/// <returns></returns> | |||||
public virtual byte[] Msg0x0900(JT808HeaderPackage request, IJT808Session session) | |||||
{ | |||||
return CommonReply(request, session); | |||||
} | |||||
} | |||||
} |
@@ -59,7 +59,6 @@ namespace JT808.Gateway.Abstractions | |||||
return CommonReply(request, session); | return CommonReply(request, session); | ||||
} | } | ||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// 终端通用应答 | /// 终端通用应答 | ||||
/// 平台无需回复 | /// 平台无需回复 | ||||
@@ -32,7 +32,7 @@ namespace JT808.Gateway.ServerBenchmark | |||||
services.AddSingleton<ILoggerFactory, LoggerFactory>(); | services.AddSingleton<ILoggerFactory, LoggerFactory>(); | ||||
services.AddSingleton(typeof(ILogger<>), typeof(Logger<>)); | services.AddSingleton(typeof(ILogger<>), typeof(Logger<>)); | ||||
services.AddJT808Configure() | services.AddJT808Configure() | ||||
.AddNormalGateway(hostContext.Configuration) | |||||
.AddGateway(hostContext.Configuration) | |||||
.AddTcp() | .AddTcp() | ||||
.AddUdp(); | .AddUdp(); | ||||
}); | }); | ||||
@@ -14,7 +14,7 @@ namespace JT808.Gateway.Kafka | |||||
/// <param name="jT808GatewayBuilder"></param> | /// <param name="jT808GatewayBuilder"></param> | ||||
/// <param name="configuration">GetSection("JT808MsgProducerConfig")</param> | /// <param name="configuration">GetSection("JT808MsgProducerConfig")</param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public static IJT808QueueGatewayBuilder AddServerKafkaMsgProducer(this IJT808QueueGatewayBuilder jT808GatewayBuilder, IConfiguration configuration) | |||||
public static IJT808GatewayBuilder AddServerKafkaMsgProducer(this IJT808GatewayBuilder jT808GatewayBuilder, IConfiguration configuration) | |||||
{ | { | ||||
jT808GatewayBuilder.JT808Builder.Services.Configure<JT808MsgProducerConfig>(configuration.GetSection("JT808MsgProducerConfig")); | jT808GatewayBuilder.JT808Builder.Services.Configure<JT808MsgProducerConfig>(configuration.GetSection("JT808MsgProducerConfig")); | ||||
jT808GatewayBuilder.JT808Builder.Services.Replace(new ServiceDescriptor(typeof(IJT808MsgProducer), typeof(JT808MsgProducer), ServiceLifetime.Singleton)); | jT808GatewayBuilder.JT808Builder.Services.Replace(new ServiceDescriptor(typeof(IJT808MsgProducer), typeof(JT808MsgProducer), ServiceLifetime.Singleton)); | ||||
@@ -26,7 +26,7 @@ namespace JT808.Gateway.Kafka | |||||
/// <param name="jT808GatewayBuilder"></param> | /// <param name="jT808GatewayBuilder"></param> | ||||
/// <param name="configuration">GetSection("JT808MsgReplyConsumerConfig")</param> | /// <param name="configuration">GetSection("JT808MsgReplyConsumerConfig")</param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public static IJT808QueueGatewayBuilder AddServerKafkaMsgReplyConsumer(this IJT808QueueGatewayBuilder jT808GatewayBuilder, IConfiguration configuration) | |||||
public static IJT808GatewayBuilder AddServerKafkaMsgReplyConsumer(this IJT808GatewayBuilder jT808GatewayBuilder, IConfiguration configuration) | |||||
{ | { | ||||
jT808GatewayBuilder.JT808Builder.Services.Configure<JT808MsgReplyConsumerConfig>(configuration.GetSection("JT808MsgReplyConsumerConfig")); | jT808GatewayBuilder.JT808Builder.Services.Configure<JT808MsgReplyConsumerConfig>(configuration.GetSection("JT808MsgReplyConsumerConfig")); | ||||
jT808GatewayBuilder.JT808Builder.Services.Replace(new ServiceDescriptor(typeof(IJT808MsgReplyConsumer), typeof(JT808MsgReplyConsumer), ServiceLifetime.Singleton)); | jT808GatewayBuilder.JT808Builder.Services.Replace(new ServiceDescriptor(typeof(IJT808MsgReplyConsumer), typeof(JT808MsgReplyConsumer), ServiceLifetime.Singleton)); | ||||
@@ -38,7 +38,7 @@ namespace JT808.Gateway.Kafka | |||||
/// <param name="jT808GatewayBuilder"></param> | /// <param name="jT808GatewayBuilder"></param> | ||||
/// <param name="configuration">GetSection("JT808SessionProducerConfig")</param> | /// <param name="configuration">GetSection("JT808SessionProducerConfig")</param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public static IJT808QueueGatewayBuilder AddServerKafkaSessionProducer(this IJT808QueueGatewayBuilder jT808GatewayBuilder, IConfiguration configuration) | |||||
public static IJT808GatewayBuilder AddServerKafkaSessionProducer(this IJT808GatewayBuilder jT808GatewayBuilder, IConfiguration configuration) | |||||
{ | { | ||||
jT808GatewayBuilder.JT808Builder.Services.Configure<JT808SessionProducerConfig>(configuration.GetSection("JT808SessionProducerConfig")); | jT808GatewayBuilder.JT808Builder.Services.Configure<JT808SessionProducerConfig>(configuration.GetSection("JT808SessionProducerConfig")); | ||||
jT808GatewayBuilder.JT808Builder.Services.Replace(new ServiceDescriptor(typeof(IJT808SessionProducer), typeof(JT808SessionProducer), ServiceLifetime.Singleton)); | jT808GatewayBuilder.JT808Builder.Services.Replace(new ServiceDescriptor(typeof(IJT808SessionProducer), typeof(JT808SessionProducer), ServiceLifetime.Singleton)); | ||||
@@ -17,7 +17,7 @@ namespace JT808.Gateway.MsgLogging | |||||
return jT808ClientBuilder; | return jT808ClientBuilder; | ||||
} | } | ||||
public static IJT808NormalGatewayBuilder AddMsgLogging<TJT808MsgLogging>(this IJT808NormalGatewayBuilder jT808NormalGatewayBuilder) | |||||
public static IJT808GatewayBuilder AddMsgLogging<TJT808MsgLogging>(this IJT808GatewayBuilder jT808NormalGatewayBuilder) | |||||
where TJT808MsgLogging : IJT808MsgLogging | where TJT808MsgLogging : IJT808MsgLogging | ||||
{ | { | ||||
jT808NormalGatewayBuilder.JT808Builder.Services.AddSingleton(typeof(IJT808MsgLogging), typeof(TJT808MsgLogging)); | jT808NormalGatewayBuilder.JT808Builder.Services.AddSingleton(typeof(IJT808MsgLogging), typeof(TJT808MsgLogging)); | ||||
@@ -9,29 +9,29 @@ namespace JT808.Gateway.ReplyMessage | |||||
{ | { | ||||
public static class JT808ReplyMessageExtensions | public static class JT808ReplyMessageExtensions | ||||
{ | { | ||||
/// <summary> | |||||
/// 消息应答服务(不同的消费者实例) | |||||
/// </summary> | |||||
/// <param name="jT808ClientBuilder"></param> | |||||
/// <returns></returns> | |||||
public static IJT808ClientBuilder AddReplyMessage(this IJT808ClientBuilder jT808ClientBuilder) | |||||
{ | |||||
jT808ClientBuilder.JT808Builder.Services.AddSingleton<JT808QueueReplyMessageHandler>(); | |||||
jT808ClientBuilder.JT808Builder.Services.AddHostedService<JT808ReplyMessageHostedService>(); | |||||
return jT808ClientBuilder; | |||||
} | |||||
/// <summary> | |||||
/// 消息应答服务(不同的消费者实例) | |||||
/// </summary> | |||||
/// <typeparam name="TReplyMessageService">自定义消息回复服务</typeparam> | |||||
/// <param name="jT808ClientBuilder"></param> | |||||
/// <returns></returns> | |||||
public static IJT808ClientBuilder AddReplyMessage<TReplyMessageHandler>(this IJT808ClientBuilder jT808ClientBuilder) | |||||
where TReplyMessageHandler : JT808QueueReplyMessageHandler | |||||
{ | |||||
jT808ClientBuilder.JT808Builder.Services.AddSingleton<JT808QueueReplyMessageHandler, TReplyMessageHandler>(); | |||||
jT808ClientBuilder.JT808Builder.Services.AddHostedService<JT808ReplyMessageHostedService>(); | |||||
return jT808ClientBuilder; | |||||
} | |||||
///// <summary> | |||||
///// 消息应答服务(不同的消费者实例) | |||||
///// </summary> | |||||
///// <param name="jT808ClientBuilder"></param> | |||||
///// <returns></returns> | |||||
//public static IJT808ClientBuilder AddReplyMessage(this IJT808ClientBuilder jT808ClientBuilder) | |||||
//{ | |||||
// jT808ClientBuilder.JT808Builder.Services.AddSingleton<JT808QueueReplyMessageHandler>(); | |||||
// jT808ClientBuilder.JT808Builder.Services.AddHostedService<JT808ReplyMessageHostedService>(); | |||||
// return jT808ClientBuilder; | |||||
//} | |||||
///// <summary> | |||||
///// 消息应答服务(不同的消费者实例) | |||||
///// </summary> | |||||
///// <typeparam name="TReplyMessageService">自定义消息回复服务</typeparam> | |||||
///// <param name="jT808ClientBuilder"></param> | |||||
///// <returns></returns> | |||||
//public static IJT808ClientBuilder AddReplyMessage<TReplyMessageHandler>(this IJT808ClientBuilder jT808ClientBuilder) | |||||
// where TReplyMessageHandler : JT808QueueReplyMessageHandler | |||||
//{ | |||||
// jT808ClientBuilder.JT808Builder.Services.AddSingleton<JT808QueueReplyMessageHandler, TReplyMessageHandler>(); | |||||
// jT808ClientBuilder.JT808Builder.Services.AddHostedService<JT808ReplyMessageHostedService>(); | |||||
// return jT808ClientBuilder; | |||||
//} | |||||
} | } | ||||
} | } |
@@ -5,30 +5,30 @@ using JT808.Gateway.Abstractions; | |||||
namespace JT808.Gateway.ReplyMessage | namespace JT808.Gateway.ReplyMessage | ||||
{ | { | ||||
public class JT808ReplyMessageHostedService : IHostedService | |||||
{ | |||||
private readonly IJT808MsgConsumer jT808MsgConsumer; | |||||
private readonly JT808QueueReplyMessageHandler jT808ReplyMessageHandler; | |||||
//public class JT808ReplyMessageHostedService : IHostedService | |||||
//{ | |||||
// //private readonly IJT808MsgConsumer jT808MsgConsumer; | |||||
// //private readonly JT808QueueReplyMessageHandler jT808ReplyMessageHandler; | |||||
public JT808ReplyMessageHostedService( | |||||
JT808QueueReplyMessageHandler jT808ReplyMessageHandler, | |||||
IJT808MsgConsumer jT808MsgConsumer) | |||||
{ | |||||
this.jT808MsgConsumer = jT808MsgConsumer; | |||||
this.jT808ReplyMessageHandler = jT808ReplyMessageHandler; | |||||
} | |||||
// //public JT808ReplyMessageHostedService( | |||||
// // JT808QueueReplyMessageHandler jT808ReplyMessageHandler, | |||||
// // IJT808MsgConsumer jT808MsgConsumer) | |||||
// //{ | |||||
// // this.jT808MsgConsumer = jT808MsgConsumer; | |||||
// // this.jT808ReplyMessageHandler = jT808ReplyMessageHandler; | |||||
// //} | |||||
public Task StartAsync(CancellationToken cancellationToken) | |||||
{ | |||||
jT808MsgConsumer.Subscribe(); | |||||
jT808MsgConsumer.OnMessage(jT808ReplyMessageHandler.Processor); | |||||
return Task.CompletedTask; | |||||
} | |||||
// //public Task StartAsync(CancellationToken cancellationToken) | |||||
// //{ | |||||
// // jT808MsgConsumer.Subscribe(); | |||||
// // jT808MsgConsumer.OnMessage(jT808ReplyMessageHandler.Processor); | |||||
// // return Task.CompletedTask; | |||||
// //} | |||||
public Task StopAsync(CancellationToken cancellationToken) | |||||
{ | |||||
jT808MsgConsumer.Unsubscribe(); | |||||
return Task.CompletedTask; | |||||
} | |||||
} | |||||
// //public Task StopAsync(CancellationToken cancellationToken) | |||||
// //{ | |||||
// // jT808MsgConsumer.Unsubscribe(); | |||||
// // return Task.CompletedTask; | |||||
// //} | |||||
//} | |||||
} | } |
@@ -40,7 +40,7 @@ namespace JT808.Gateway.SessionNotice | |||||
/// </summary> | /// </summary> | ||||
/// <param name="jT808NormalGatewayBuilder"></param> | /// <param name="jT808NormalGatewayBuilder"></param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public static IJT808NormalGatewayBuilder AddSessionNotice(this IJT808NormalGatewayBuilder jT808NormalGatewayBuilder) | |||||
public static IJT808GatewayBuilder AddSessionNotice(this IJT808GatewayBuilder jT808NormalGatewayBuilder) | |||||
{ | { | ||||
jT808NormalGatewayBuilder.JT808Builder.Services.AddSingleton<JT808SessionNoticeService>(); | jT808NormalGatewayBuilder.JT808Builder.Services.AddSingleton<JT808SessionNoticeService>(); | ||||
jT808NormalGatewayBuilder.JT808Builder.Services.AddHostedService<JT808SessionNoticeHostedService>(); | jT808NormalGatewayBuilder.JT808Builder.Services.AddHostedService<JT808SessionNoticeHostedService>(); | ||||
@@ -53,7 +53,7 @@ namespace JT808.Gateway.SessionNotice | |||||
/// <typeparam name="TSessionNoticeService">自定义会话通知服务</typeparam> | /// <typeparam name="TSessionNoticeService">自定义会话通知服务</typeparam> | ||||
/// <param name="jT808NormalGatewayBuilder"></param> | /// <param name="jT808NormalGatewayBuilder"></param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public static IJT808NormalGatewayBuilder AddSessionNotice<TSessionNoticeService>(this IJT808NormalGatewayBuilder jT808NormalGatewayBuilder) | |||||
public static IJT808GatewayBuilder AddSessionNotice<TSessionNoticeService>(this IJT808GatewayBuilder jT808NormalGatewayBuilder) | |||||
where TSessionNoticeService : JT808SessionNoticeService | where TSessionNoticeService : JT808SessionNoticeService | ||||
{ | { | ||||
jT808NormalGatewayBuilder.JT808Builder.Services.AddSingleton<JT808SessionNoticeService, TSessionNoticeService>(); | jT808NormalGatewayBuilder.JT808Builder.Services.AddSingleton<JT808SessionNoticeService, TSessionNoticeService>(); | ||||
@@ -38,7 +38,7 @@ namespace JT808.Gateway.Traffic | |||||
/// </summary> | /// </summary> | ||||
/// <param name="jT808NormalGatewayBuilder"></param> | /// <param name="jT808NormalGatewayBuilder"></param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public static IJT808NormalGatewayBuilder AddTraffic<TIJT808Traffic>(this IJT808NormalGatewayBuilder jT808NormalGatewayBuilder) | |||||
public static IJT808GatewayBuilder AddTraffic<TIJT808Traffic>(this IJT808GatewayBuilder jT808NormalGatewayBuilder) | |||||
where TIJT808Traffic : IJT808Traffic | where TIJT808Traffic : IJT808Traffic | ||||
{ | { | ||||
jT808NormalGatewayBuilder.JT808Builder.Services.AddSingleton(typeof(IJT808Traffic), typeof(TIJT808Traffic)); | jT808NormalGatewayBuilder.JT808Builder.Services.AddSingleton(typeof(IJT808Traffic), typeof(TIJT808Traffic)); | ||||
@@ -51,7 +51,7 @@ namespace JT808.Gateway.Traffic | |||||
/// </summary> | /// </summary> | ||||
/// <param name="jT808NormalGatewayBuilder"></param> | /// <param name="jT808NormalGatewayBuilder"></param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public static IJT808NormalGatewayBuilder AddTraffic(this IJT808NormalGatewayBuilder jT808NormalGatewayBuilder) | |||||
public static IJT808GatewayBuilder AddTraffic(this IJT808GatewayBuilder jT808NormalGatewayBuilder) | |||||
{ | { | ||||
jT808NormalGatewayBuilder.JT808Builder.Services.AddSingleton(typeof(IJT808Traffic), typeof(JT808TrafficDefault)); | jT808NormalGatewayBuilder.JT808Builder.Services.AddSingleton(typeof(IJT808Traffic), typeof(JT808TrafficDefault)); | ||||
return jT808NormalGatewayBuilder; | return jT808NormalGatewayBuilder; | ||||
@@ -31,7 +31,7 @@ namespace JT808.Gateway.Transmit | |||||
/// <param name="jT808NormalGatewayBuilder"></param> | /// <param name="jT808NormalGatewayBuilder"></param> | ||||
/// <param name="configuration"></param> | /// <param name="configuration"></param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public static IJT808NormalGatewayBuilder AddTransmit(this IJT808NormalGatewayBuilder jT808NormalGatewayBuilder, IConfiguration configuration) | |||||
public static IJT808GatewayBuilder AddTransmit(this IJT808GatewayBuilder jT808NormalGatewayBuilder, IConfiguration configuration) | |||||
{ | { | ||||
jT808NormalGatewayBuilder.JT808Builder.Services.Configure<RemoteServerOptions>(configuration.GetSection("RemoteServerOptions")); | jT808NormalGatewayBuilder.JT808Builder.Services.Configure<RemoteServerOptions>(configuration.GetSection("RemoteServerOptions")); | ||||
jT808NormalGatewayBuilder.JT808Builder.Services.AddSingleton<JT808TransmitService>(); | jT808NormalGatewayBuilder.JT808Builder.Services.AddSingleton<JT808TransmitService>(); | ||||
@@ -6,6 +6,7 @@ | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<Compile Remove="Impl\JT808NormalReplyMessageHandlerImpl.cs" /> | |||||
<Compile Remove="Jobs\CallGrpcClientJob.cs" /> | <Compile Remove="Jobs\CallGrpcClientJob.cs" /> | ||||
</ItemGroup> | </ItemGroup> | ||||
@@ -52,7 +52,7 @@ namespace JT808.Gateway.NormalHosting | |||||
//// options.TcpPort = 808; | //// options.TcpPort = 808; | ||||
//// options.UdpPort = 808; | //// options.UdpPort = 808; | ||||
////}) | ////}) | ||||
.AddNormalGateway(hostContext.Configuration) | |||||
.AddGateway(hostContext.Configuration) | |||||
//.ReplaceNormalReplyMessageHandler<JT808NormalReplyMessageHandlerImpl>() | //.ReplaceNormalReplyMessageHandler<JT808NormalReplyMessageHandlerImpl>() | ||||
//.AddMsgLogging<JT808MsgLogging>() | //.AddMsgLogging<JT808MsgLogging>() | ||||
//.AddTraffic() | //.AddTraffic() | ||||
@@ -46,7 +46,7 @@ namespace JT808.Gateway.QueueHosting | |||||
// options.TcpPort = 808; | // options.TcpPort = 808; | ||||
// options.UdpPort = 808; | // options.UdpPort = 808; | ||||
//}) | //}) | ||||
.AddQueueGateway(hostContext.Configuration) | |||||
.AddGateway(hostContext.Configuration) | |||||
.AddServerKafkaMsgProducer(hostContext.Configuration) | .AddServerKafkaMsgProducer(hostContext.Configuration) | ||||
.AddServerKafkaSessionProducer(hostContext.Configuration) | .AddServerKafkaSessionProducer(hostContext.Configuration) | ||||
.AddServerKafkaMsgReplyConsumer(hostContext.Configuration) | .AddServerKafkaMsgReplyConsumer(hostContext.Configuration) | ||||
@@ -61,14 +61,13 @@ namespace JT808.Gateway.QueueHosting | |||||
//添加消息应答服务 | //添加消息应答服务 | ||||
.AddMsgReplyProducer(hostContext.Configuration) | .AddMsgReplyProducer(hostContext.Configuration) | ||||
//添加消息应答处理 | //添加消息应答处理 | ||||
.AddReplyMessage() | |||||
//.AddReplyMessage() | |||||
; | ; | ||||
//grpc客户端调用 | //grpc客户端调用 | ||||
//services.AddHostedService<CallGrpcClientJob>(); | //services.AddHostedService<CallGrpcClientJob>(); | ||||
//客户端测试 | //客户端测试 | ||||
services.AddHostedService<UpJob>(); | services.AddHostedService<UpJob>(); | ||||
}); | }); | ||||
await serverHostBuilder.RunConsoleAsync(); | await serverHostBuilder.RunConsoleAsync(); | ||||
} | } | ||||
} | } | ||||
@@ -30,8 +30,7 @@ namespace JT808.Gateway.Test | |||||
Assert.Equal("123456", token); | Assert.Equal("123456", token); | ||||
Assert.Equal("http://localhost/", uri); | Assert.Equal("http://localhost/", uri); | ||||
serviceDescriptors.AddJT808WebApiClientTool(builder.Build()); | serviceDescriptors.AddJT808WebApiClientTool(builder.Build()); | ||||
} | |||||
} | |||||
[Fact(DisplayName = "使用postman测试")] | [Fact(DisplayName = "使用postman测试")] | ||||
public void Test2() | public void Test2() | ||||
{ | { | ||||
@@ -43,8 +42,42 @@ namespace JT808.Gateway.Test | |||||
//http://127.0.0.1:828/jt808api/Tcp/Session/RemoveByTerminalPhoneNo | //http://127.0.0.1:828/jt808api/Tcp/Session/RemoveByTerminalPhoneNo | ||||
//123456789 | //123456789 | ||||
///http://127.0.0.1:828/jt808api/UnificationSend | ///http://127.0.0.1:828/jt808api/UnificationSend | ||||
//{"TerminalPhoneNo":"123456789","Data":"7e 01 02 7e"} | |||||
//{"TerminalPhoneNo":"123456789","Data":"7e01027e"} | |||||
//{"TerminalPhoneNo":"123456789","HexData":"7e 01 02 7e"} | |||||
//{"TerminalPhoneNo":"123456789","HexData":"7e01027e"} | |||||
//UDP | |||||
//http://127.0.0.1:828/jt808api/Udp/Session/GetAll | |||||
//http://127.0.0.1:828/jt808api/Udp/Session/RemoveUdpByTerminalPhoneNo | |||||
//123456789 | |||||
//http://127.0.0.1:828/jt808api/Udp/Session/QueryUdpSessionByTerminalPhoneNo | |||||
} | } | ||||
[Fact] | |||||
public void Test3() | |||||
{ | |||||
IServiceCollection serviceDescriptors = new ServiceCollection(); | |||||
serviceDescriptors.AddSingleton<A>(); | |||||
IServiceProvider aa = serviceDescriptors.BuildServiceProvider(); | |||||
IServiceCollection sc= aa.GetRequiredService<IServiceCollection>(); | |||||
sc.AddSingleton<B>(); | |||||
IServiceProvider aa1 = serviceDescriptors.BuildServiceProvider(); | |||||
B b = aa.GetRequiredService<B>(); | |||||
} | |||||
} | |||||
public class A | |||||
{ | |||||
} | |||||
public class B | |||||
{ | |||||
} | |||||
public class C | |||||
{ | |||||
} | } | ||||
} | } |
@@ -16,8 +16,8 @@ | |||||
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance> | <PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance> | ||||
<PackageId>JT808.Gateway.WebApiClientTool</PackageId> | <PackageId>JT808.Gateway.WebApiClientTool</PackageId> | ||||
<Product>JT808.Gateway.WebApiClientTool</Product> | <Product>JT808.Gateway.WebApiClientTool</Product> | ||||
<Description>基于Pipeline的WebApiClient客户端调用工具</Description> | |||||
<PackageReleaseNotes>基于Pipeline的WebApiClient客户端调用工具</PackageReleaseNotes> | |||||
<Description>JT808WebApiClient客户端调用工具</Description> | |||||
<PackageReleaseNotes>JT808WebApiClient客户端调用工具</PackageReleaseNotes> | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> | ||||
<DocumentationFile>JT808.Gateway.WebApiClientTool.xml</DocumentationFile> | <DocumentationFile>JT808.Gateway.WebApiClientTool.xml</DocumentationFile> | ||||
@@ -4,24 +4,47 @@ | |||||
<name>JT808.Gateway.WebApiClientTool</name> | <name>JT808.Gateway.WebApiClientTool</name> | ||||
</assembly> | </assembly> | ||||
<members> | <members> | ||||
<member name="T:JT808.Gateway.WebApiClientTool.JT808HttpClient"> | |||||
<summary> | |||||
</summary> | |||||
</member> | |||||
<member name="P:JT808.Gateway.WebApiClientTool.JT808HttpClient.HttpClient"> | |||||
<summary> | |||||
</summary> | |||||
</member> | |||||
<member name="M:JT808.Gateway.WebApiClientTool.JT808HttpClient.#ctor(System.Net.Http.HttpClient)"> | |||||
<summary> | |||||
</summary> | |||||
<param name="httpClient"></param> | |||||
</member> | |||||
<member name="M:JT808.Gateway.WebApiClientTool.JT808HttpClient.UnificationSend(JT808.Gateway.Abstractions.Dtos.JT808UnificationSendRequestDto)"> | |||||
<summary> | |||||
统一下发信息 | |||||
</summary> | |||||
<param name="jT808UnificationSendRequestDto"></param> | |||||
<returns></returns> | |||||
</member> | |||||
<member name="M:JT808.Gateway.WebApiClientTool.JT808HttpClient.GetTcpSessionAll"> | <member name="M:JT808.Gateway.WebApiClientTool.JT808HttpClient.GetTcpSessionAll"> | ||||
<summary> | <summary> | ||||
会话服务集合 | 会话服务集合 | ||||
</summary> | </summary> | ||||
<returns></returns> | <returns></returns> | ||||
</member> | </member> | ||||
<member name="M:JT808.Gateway.WebApiClientTool.JT808HttpClient.RemoveByTerminalPhoneNo(System.String)"> | |||||
<member name="M:JT808.Gateway.WebApiClientTool.JT808HttpClient.QueryTcpSessionByTerminalPhoneNo(System.String)"> | |||||
<summary> | <summary> | ||||
会话服务-通过设备终端号移除对应会话 | |||||
会话服务-通过设备终端号查询对应会话信息 | |||||
</summary> | </summary> | ||||
<param name="terminalPhoneNo"></param> | <param name="terminalPhoneNo"></param> | ||||
<returns></returns> | <returns></returns> | ||||
</member> | </member> | ||||
<member name="M:JT808.Gateway.WebApiClientTool.JT808HttpClient.UnificationSend(JT808.Gateway.Abstractions.Dtos.JT808UnificationSendRequestDto)"> | |||||
<member name="M:JT808.Gateway.WebApiClientTool.JT808HttpClient.RemoveTcpByTerminalPhoneNo(System.String)"> | |||||
<summary> | <summary> | ||||
统一下发信息 | |||||
会话服务-通过设备终端号移除对应会话 | |||||
</summary> | </summary> | ||||
<param name="jT808UnificationSendRequestDto"></param> | |||||
<param name="terminalPhoneNo"></param> | |||||
<returns></returns> | <returns></returns> | ||||
</member> | </member> | ||||
<member name="M:JT808.Gateway.WebApiClientTool.JT808HttpClient.GetUdpSessionAll"> | <member name="M:JT808.Gateway.WebApiClientTool.JT808HttpClient.GetUdpSessionAll"> | ||||
@@ -30,5 +53,41 @@ | |||||
</summary> | </summary> | ||||
<returns></returns> | <returns></returns> | ||||
</member> | </member> | ||||
<member name="M:JT808.Gateway.WebApiClientTool.JT808HttpClient.QueryUdpSessionByTerminalPhoneNo(System.String)"> | |||||
<summary> | |||||
会话服务-通过设备终端号查询对应会话信息 | |||||
</summary> | |||||
<param name="terminalPhoneNo"></param> | |||||
<returns></returns> | |||||
</member> | |||||
<member name="M:JT808.Gateway.WebApiClientTool.JT808HttpClient.RemoveUdpByTerminalPhoneNo(System.String)"> | |||||
<summary> | |||||
会话服务-通过设备终端号移除对应会话 | |||||
</summary> | |||||
<param name="terminalPhoneNo"></param> | |||||
<returns></returns> | |||||
</member> | |||||
<member name="T:JT808.Gateway.WebApiClientTool.JT808HttpClientExtensions"> | |||||
<summary> | |||||
</summary> | |||||
</member> | |||||
<member name="M:JT808.Gateway.WebApiClientTool.JT808HttpClientExtensions.AddJT808WebApiClientTool(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(Microsoft.Extensions.DependencyInjection.IServiceCollection,Microsoft.Extensions.Configuration.IConfiguration)"> | |||||
<summary> | |||||
</summary> | |||||
<param name="serviceDescriptors"></param> | |||||
<param name="configuration"></param> | |||||
<returns></returns> | |||||
</member> | |||||
</members> | </members> | ||||
</doc> | </doc> |
@@ -10,14 +10,41 @@ using System.Threading.Tasks; | |||||
namespace JT808.Gateway.WebApiClientTool | namespace JT808.Gateway.WebApiClientTool | ||||
{ | { | ||||
/// <summary> | |||||
/// | |||||
/// </summary> | |||||
public class JT808HttpClient | public class JT808HttpClient | ||||
{ | { | ||||
//todo:其余接口待接入 | |||||
/// <summary> | |||||
/// | |||||
/// </summary> | |||||
public HttpClient HttpClient { get; } | public HttpClient HttpClient { get; } | ||||
/// <summary> | |||||
/// | |||||
/// </summary> | |||||
/// <param name="httpClient"></param> | |||||
public JT808HttpClient(HttpClient httpClient) | public JT808HttpClient(HttpClient httpClient) | ||||
{ | { | ||||
HttpClient = httpClient; | HttpClient = httpClient; | ||||
} | } | ||||
/// <summary> | |||||
/// 统一下发信息 | |||||
/// </summary> | |||||
/// <param name="jT808UnificationSendRequestDto"></param> | |||||
/// <returns></returns> | |||||
public async ValueTask<JT808ResultDto<bool>> UnificationSend(JT808UnificationSendRequestDto jT808UnificationSendRequestDto) | |||||
{ | |||||
var request = new HttpRequestMessage(HttpMethod.Post, JT808GatewayConstants.JT808WebApiRouteTable.UnificationSend); | |||||
request.Content = new StringContent(JsonSerializer.Serialize(jT808UnificationSendRequestDto)); | |||||
var response = await HttpClient.SendAsync(request); | |||||
response.EnsureSuccessStatusCode(); | |||||
var data = await response.Content.ReadAsStreamAsync(); | |||||
var value = await JsonSerializer.DeserializeAsync<JT808ResultDto<bool>>(data); | |||||
return value; | |||||
} | |||||
/// <summary> | /// <summary> | ||||
/// 会话服务集合 | /// 会话服务集合 | ||||
/// </summary> | /// </summary> | ||||
@@ -33,30 +60,30 @@ namespace JT808.Gateway.WebApiClientTool | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// 会话服务-通过设备终端号移除对应会话 | |||||
/// 会话服务-通过设备终端号查询对应会话信息 | |||||
/// </summary> | /// </summary> | ||||
/// <param name="terminalPhoneNo"></param> | /// <param name="terminalPhoneNo"></param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public async ValueTask<JT808ResultDto<bool>> RemoveByTerminalPhoneNo(string terminalPhoneNo) | |||||
public async ValueTask<JT808ResultDto<JT808TcpSessionInfoDto>> QueryTcpSessionByTerminalPhoneNo(string terminalPhoneNo) | |||||
{ | { | ||||
var request = new HttpRequestMessage(HttpMethod.Post, JT808GatewayConstants.JT808WebApiRouteTable.SessionRemoveByTerminalPhoneNo); | |||||
var request = new HttpRequestMessage(HttpMethod.Post, JT808GatewayConstants.JT808WebApiRouteTable.QueryTcpSessionByTerminalPhoneNo); | |||||
request.Content = new StringContent(terminalPhoneNo); | request.Content = new StringContent(terminalPhoneNo); | ||||
var response = await HttpClient.SendAsync(request); | var response = await HttpClient.SendAsync(request); | ||||
response.EnsureSuccessStatusCode(); | response.EnsureSuccessStatusCode(); | ||||
var data = await response.Content.ReadAsStreamAsync(); | var data = await response.Content.ReadAsStreamAsync(); | ||||
var value = await JsonSerializer.DeserializeAsync<JT808ResultDto<bool>>(data); | |||||
var value = await JsonSerializer.DeserializeAsync<JT808ResultDto<JT808TcpSessionInfoDto>>(data); | |||||
return value; | return value; | ||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// 统一下发信息 | |||||
/// 会话服务-通过设备终端号移除对应会话 | |||||
/// </summary> | /// </summary> | ||||
/// <param name="jT808UnificationSendRequestDto"></param> | |||||
/// <param name="terminalPhoneNo"></param> | |||||
/// <returns></returns> | /// <returns></returns> | ||||
public async ValueTask<JT808ResultDto<bool>> UnificationSend(JT808UnificationSendRequestDto jT808UnificationSendRequestDto) | |||||
public async ValueTask<JT808ResultDto<bool>> RemoveTcpByTerminalPhoneNo(string terminalPhoneNo) | |||||
{ | { | ||||
var request = new HttpRequestMessage(HttpMethod.Post, JT808GatewayConstants.JT808WebApiRouteTable.UnificationSend); | |||||
request.Content = new StringContent(JsonSerializer.Serialize(jT808UnificationSendRequestDto)); | |||||
var request = new HttpRequestMessage(HttpMethod.Post, JT808GatewayConstants.JT808WebApiRouteTable.SessionRemoveByTerminalPhoneNo); | |||||
request.Content = new StringContent(terminalPhoneNo); | |||||
var response = await HttpClient.SendAsync(request); | var response = await HttpClient.SendAsync(request); | ||||
response.EnsureSuccessStatusCode(); | response.EnsureSuccessStatusCode(); | ||||
var data = await response.Content.ReadAsStreamAsync(); | var data = await response.Content.ReadAsStreamAsync(); | ||||
@@ -77,5 +104,37 @@ namespace JT808.Gateway.WebApiClientTool | |||||
var value = await JsonSerializer.DeserializeAsync<JT808ResultDto<List<JT808UdpSessionInfoDto>>>(data); | var value = await JsonSerializer.DeserializeAsync<JT808ResultDto<List<JT808UdpSessionInfoDto>>>(data); | ||||
return value; | return value; | ||||
} | } | ||||
/// <summary> | |||||
/// 会话服务-通过设备终端号查询对应会话信息 | |||||
/// </summary> | |||||
/// <param name="terminalPhoneNo"></param> | |||||
/// <returns></returns> | |||||
public async ValueTask<JT808ResultDto<JT808UdpSessionInfoDto>> QueryUdpSessionByTerminalPhoneNo(string terminalPhoneNo) | |||||
{ | |||||
var request = new HttpRequestMessage(HttpMethod.Post, JT808GatewayConstants.JT808WebApiRouteTable.QueryUdpSessionByTerminalPhoneNo); | |||||
request.Content = new StringContent(terminalPhoneNo); | |||||
var response = await HttpClient.SendAsync(request); | |||||
response.EnsureSuccessStatusCode(); | |||||
var data = await response.Content.ReadAsStreamAsync(); | |||||
var value = await JsonSerializer.DeserializeAsync<JT808ResultDto<JT808UdpSessionInfoDto>>(data); | |||||
return value; | |||||
} | |||||
/// <summary> | |||||
/// 会话服务-通过设备终端号移除对应会话 | |||||
/// </summary> | |||||
/// <param name="terminalPhoneNo"></param> | |||||
/// <returns></returns> | |||||
public async ValueTask<JT808ResultDto<bool>> RemoveUdpByTerminalPhoneNo(string terminalPhoneNo) | |||||
{ | |||||
var request = new HttpRequestMessage(HttpMethod.Post, JT808GatewayConstants.JT808WebApiRouteTable.RemoveUdpByTerminalPhoneNo); | |||||
request.Content = new StringContent(terminalPhoneNo); | |||||
var response = await HttpClient.SendAsync(request); | |||||
response.EnsureSuccessStatusCode(); | |||||
var data = await response.Content.ReadAsStreamAsync(); | |||||
var value = await JsonSerializer.DeserializeAsync<JT808ResultDto<bool>>(data); | |||||
return value; | |||||
} | |||||
} | } | ||||
} | } |
@@ -6,8 +6,18 @@ using System.Text; | |||||
namespace JT808.Gateway.WebApiClientTool | namespace JT808.Gateway.WebApiClientTool | ||||
{ | { | ||||
/// <summary> | |||||
/// | |||||
/// </summary> | |||||
public static class JT808HttpClientExtensions | public static class JT808HttpClientExtensions | ||||
{ | { | ||||
/// <summary> | |||||
/// | |||||
/// </summary> | |||||
/// <param name="serviceDescriptors"></param> | |||||
/// <param name="webapiUri"></param> | |||||
/// <param name="token"></param> | |||||
/// <returns></returns> | |||||
public static IServiceCollection AddJT808WebApiClientTool(this IServiceCollection serviceDescriptors, Uri webapiUri,string token) | public static IServiceCollection AddJT808WebApiClientTool(this IServiceCollection serviceDescriptors, Uri webapiUri,string token) | ||||
{ | { | ||||
serviceDescriptors.AddHttpClient("JT808WebApiClientTool", c => | serviceDescriptors.AddHttpClient("JT808WebApiClientTool", c => | ||||
@@ -20,6 +30,12 @@ namespace JT808.Gateway.WebApiClientTool | |||||
return serviceDescriptors; | return serviceDescriptors; | ||||
} | } | ||||
/// <summary> | |||||
/// | |||||
/// </summary> | |||||
/// <param name="serviceDescriptors"></param> | |||||
/// <param name="configuration"></param> | |||||
/// <returns></returns> | |||||
public static IServiceCollection AddJT808WebApiClientTool(this IServiceCollection serviceDescriptors, IConfiguration configuration) | public static IServiceCollection AddJT808WebApiClientTool(this IServiceCollection serviceDescriptors, IConfiguration configuration) | ||||
{ | { | ||||
serviceDescriptors.AddHttpClient("JT808WebApiClientTool", c => | serviceDescriptors.AddHttpClient("JT808WebApiClientTool", c => | ||||
@@ -17,8 +17,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.MsgLogging", | |||||
EndProject | EndProject | ||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.SessionNotice", "JT808.Gateway.Services\JT808.Gateway.SessionNotice\JT808.Gateway.SessionNotice.csproj", "{1CB84599-5F56-4461-A451-DF16E3854AB9}" | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.SessionNotice", "JT808.Gateway.Services\JT808.Gateway.SessionNotice\JT808.Gateway.SessionNotice.csproj", "{1CB84599-5F56-4461-A451-DF16E3854AB9}" | ||||
EndProject | EndProject | ||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.ReplyMessage", "JT808.Gateway.Services\JT808.Gateway.ReplyMessage\JT808.Gateway.ReplyMessage.csproj", "{604BB5CF-9ED1-4D78-9328-59436E2B4EB4}" | |||||
EndProject | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.Transmit", "JT808.Gateway.Services\JT808.Gateway.Transmit\JT808.Gateway.Transmit.csproj", "{598E445A-AF2E-42F0-98F4-18EC22E473FC}" | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.Transmit", "JT808.Gateway.Services\JT808.Gateway.Transmit\JT808.Gateway.Transmit.csproj", "{598E445A-AF2E-42F0-98F4-18EC22E473FC}" | ||||
EndProject | EndProject | ||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.Client", "JT808.Gateway.Client\JT808.Gateway.Client.csproj", "{AC3070AC-A938-4213-A562-C079BB4A3F9E}" | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.Client", "JT808.Gateway.Client\JT808.Gateway.Client.csproj", "{AC3070AC-A938-4213-A562-C079BB4A3F9E}" | ||||
@@ -41,6 +39,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.Traffic", "JT | |||||
EndProject | EndProject | ||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.WebApiClientTool", "JT808.Gateway.WebApiClientTool\JT808.Gateway.WebApiClientTool.csproj", "{479DFD02-4777-4DC2-9E2E-8EA33BFB36C9}" | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.WebApiClientTool", "JT808.Gateway.WebApiClientTool\JT808.Gateway.WebApiClientTool.csproj", "{479DFD02-4777-4DC2-9E2E-8EA33BFB36C9}" | ||||
EndProject | EndProject | ||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.ReplyMessage", "JT808.Gateway.Services\JT808.Gateway.ReplyMessage\JT808.Gateway.ReplyMessage.csproj", "{886D0A3F-C974-442B-9820-F1C4C04EAAB6}" | |||||
EndProject | |||||
Global | Global | ||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||
Debug|Any CPU = Debug|Any CPU | Debug|Any CPU = Debug|Any CPU | ||||
@@ -71,10 +71,6 @@ Global | |||||
{1CB84599-5F56-4461-A451-DF16E3854AB9}.Debug|Any CPU.Build.0 = Debug|Any CPU | {1CB84599-5F56-4461-A451-DF16E3854AB9}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
{1CB84599-5F56-4461-A451-DF16E3854AB9}.Release|Any CPU.ActiveCfg = Release|Any CPU | {1CB84599-5F56-4461-A451-DF16E3854AB9}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
{1CB84599-5F56-4461-A451-DF16E3854AB9}.Release|Any CPU.Build.0 = Release|Any CPU | {1CB84599-5F56-4461-A451-DF16E3854AB9}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
{604BB5CF-9ED1-4D78-9328-59436E2B4EB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{604BB5CF-9ED1-4D78-9328-59436E2B4EB4}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{604BB5CF-9ED1-4D78-9328-59436E2B4EB4}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{604BB5CF-9ED1-4D78-9328-59436E2B4EB4}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{598E445A-AF2E-42F0-98F4-18EC22E473FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | {598E445A-AF2E-42F0-98F4-18EC22E473FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||||
{598E445A-AF2E-42F0-98F4-18EC22E473FC}.Debug|Any CPU.Build.0 = Debug|Any CPU | {598E445A-AF2E-42F0-98F4-18EC22E473FC}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
{598E445A-AF2E-42F0-98F4-18EC22E473FC}.Release|Any CPU.ActiveCfg = Release|Any CPU | {598E445A-AF2E-42F0-98F4-18EC22E473FC}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
@@ -111,6 +107,10 @@ Global | |||||
{479DFD02-4777-4DC2-9E2E-8EA33BFB36C9}.Debug|Any CPU.Build.0 = Debug|Any CPU | {479DFD02-4777-4DC2-9E2E-8EA33BFB36C9}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
{479DFD02-4777-4DC2-9E2E-8EA33BFB36C9}.Release|Any CPU.ActiveCfg = Release|Any CPU | {479DFD02-4777-4DC2-9E2E-8EA33BFB36C9}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
{479DFD02-4777-4DC2-9E2E-8EA33BFB36C9}.Release|Any CPU.Build.0 = Release|Any CPU | {479DFD02-4777-4DC2-9E2E-8EA33BFB36C9}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
{886D0A3F-C974-442B-9820-F1C4C04EAAB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{886D0A3F-C974-442B-9820-F1C4C04EAAB6}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{886D0A3F-C974-442B-9820-F1C4C04EAAB6}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{886D0A3F-C974-442B-9820-F1C4C04EAAB6}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
EndGlobalSection | EndGlobalSection | ||||
GlobalSection(SolutionProperties) = preSolution | GlobalSection(SolutionProperties) = preSolution | ||||
HideSolutionNode = FALSE | HideSolutionNode = FALSE | ||||
@@ -119,7 +119,6 @@ Global | |||||
{D62E3054-6924-4F1A-9BEF-E52B191F16B6} = {3EF8490D-C993-49D8-8A3D-493B7F259D70} | {D62E3054-6924-4F1A-9BEF-E52B191F16B6} = {3EF8490D-C993-49D8-8A3D-493B7F259D70} | ||||
{A242A839-4F00-4434-A7E8-7E3BEBA5B75C} = {3EF8490D-C993-49D8-8A3D-493B7F259D70} | {A242A839-4F00-4434-A7E8-7E3BEBA5B75C} = {3EF8490D-C993-49D8-8A3D-493B7F259D70} | ||||
{1CB84599-5F56-4461-A451-DF16E3854AB9} = {3EF8490D-C993-49D8-8A3D-493B7F259D70} | {1CB84599-5F56-4461-A451-DF16E3854AB9} = {3EF8490D-C993-49D8-8A3D-493B7F259D70} | ||||
{604BB5CF-9ED1-4D78-9328-59436E2B4EB4} = {3EF8490D-C993-49D8-8A3D-493B7F259D70} | |||||
{598E445A-AF2E-42F0-98F4-18EC22E473FC} = {3EF8490D-C993-49D8-8A3D-493B7F259D70} | {598E445A-AF2E-42F0-98F4-18EC22E473FC} = {3EF8490D-C993-49D8-8A3D-493B7F259D70} | ||||
{E3DC260E-0B55-4993-B051-402E44D4E883} = {7CBAACEE-19BF-499A-8C41-36A1324D45E9} | {E3DC260E-0B55-4993-B051-402E44D4E883} = {7CBAACEE-19BF-499A-8C41-36A1324D45E9} | ||||
{22368AAD-A1F3-446B-B68F-98A0933BF1F6} = {7CBAACEE-19BF-499A-8C41-36A1324D45E9} | {22368AAD-A1F3-446B-B68F-98A0933BF1F6} = {7CBAACEE-19BF-499A-8C41-36A1324D45E9} | ||||
@@ -127,6 +126,7 @@ Global | |||||
{E34C6B7D-A48B-4871-895C-07AC12F959D3} = {6FAEC008-93CB-4730-8C58-D31FFD342C4F} | {E34C6B7D-A48B-4871-895C-07AC12F959D3} = {6FAEC008-93CB-4730-8C58-D31FFD342C4F} | ||||
{AF0C529A-D3CA-4FE4-93B4-735D0934EBEF} = {6FAEC008-93CB-4730-8C58-D31FFD342C4F} | {AF0C529A-D3CA-4FE4-93B4-735D0934EBEF} = {6FAEC008-93CB-4730-8C58-D31FFD342C4F} | ||||
{E5A0BFB6-4345-4592-A2B1-E3CB1FA423AE} = {3EF8490D-C993-49D8-8A3D-493B7F259D70} | {E5A0BFB6-4345-4592-A2B1-E3CB1FA423AE} = {3EF8490D-C993-49D8-8A3D-493B7F259D70} | ||||
{886D0A3F-C974-442B-9820-F1C4C04EAAB6} = {3EF8490D-C993-49D8-8A3D-493B7F259D70} | |||||
EndGlobalSection | EndGlobalSection | ||||
GlobalSection(ExtensibilityGlobals) = postSolution | GlobalSection(ExtensibilityGlobals) = postSolution | ||||
SolutionGuid = {AA9303A7-6FB3-4572-88AA-3302E85330D1} | SolutionGuid = {AA9303A7-6FB3-4572-88AA-3302E85330D1} | ||||
@@ -225,7 +225,7 @@ namespace JT808.Gateway.Handlers | |||||
try | try | ||||
{ | { | ||||
JT808UnificationSendRequestDto jT808UnificationSendRequestDto = JsonSerializer.Deserialize<JT808UnificationSendRequestDto>(json); | JT808UnificationSendRequestDto jT808UnificationSendRequestDto = JsonSerializer.Deserialize<JT808UnificationSendRequestDto>(json); | ||||
resultDto.Data = JT808SessionManager.TrySendByTerminalPhoneNoAsync(jT808UnificationSendRequestDto.TerminalPhoneNo, jT808UnificationSendRequestDto.Data.ToHexBytes()) | |||||
resultDto.Data = JT808SessionManager.TrySendByTerminalPhoneNoAsync(jT808UnificationSendRequestDto.TerminalPhoneNo, jT808UnificationSendRequestDto.HexData.ToHexBytes()) | |||||
.GetAwaiter() | .GetAwaiter() | ||||
.GetResult(); | .GetResult(); | ||||
resultDto.Code = JT808ResultCode.Ok; | resultDto.Code = JT808ResultCode.Ok; | ||||
@@ -19,6 +19,10 @@ | |||||
<Product>JT808.Gateway</Product> | <Product>JT808.Gateway</Product> | ||||
<Version>$(JT808GatewayPackageVersion)</Version> | <Version>$(JT808GatewayPackageVersion)</Version> | ||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | |||||
<Compile Remove="Internal\JT808NormalGatewayBuilderDefault.cs" /> | |||||
<Compile Remove="Internal\JT808QueueGatewayBuilderDefault.cs" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="Microsoft.Extensions.Options" Version="3.1.7" /> | <PackageReference Include="Microsoft.Extensions.Options" Version="3.1.7" /> | ||||
@@ -1,7 +1,6 @@ | |||||
using JT808.Gateway.Abstractions; | using JT808.Gateway.Abstractions; | ||||
using JT808.Gateway.Authorization; | using JT808.Gateway.Authorization; | ||||
using JT808.Gateway.Configurations; | using JT808.Gateway.Configurations; | ||||
using JT808.Gateway.Enums; | |||||
using JT808.Gateway.Handlers; | using JT808.Gateway.Handlers; | ||||
using JT808.Gateway.Internal; | using JT808.Gateway.Internal; | ||||
using JT808.Gateway.Services; | using JT808.Gateway.Services; | ||||
@@ -19,47 +18,63 @@ namespace JT808.Gateway | |||||
{ | { | ||||
public static partial class JT808GatewayExtensions | public static partial class JT808GatewayExtensions | ||||
{ | { | ||||
public static IJT808QueueGatewayBuilder AddQueueGateway(this IJT808Builder jT808Builder, Action<JT808Configuration> config) | |||||
{ | |||||
IJT808QueueGatewayBuilder server = new JT808QueueGatewayBuilderDefault(jT808Builder); | |||||
server.JT808Builder.Services.Configure(config); | |||||
server.AddJT808Core(); | |||||
server.JT808Builder.Services.AddHostedService<JT808MsgReplyHostedService>(); | |||||
return server; | |||||
} | |||||
//public static IJT808QueueGatewayBuilder AddQueueGateway(this IJT808Builder jT808Builder, Action<JT808Configuration> config) | |||||
//{ | |||||
// IJT808QueueGatewayBuilder server = new JT808QueueGatewayBuilderDefault(jT808Builder); | |||||
// server.JT808Builder.Services.Configure(config); | |||||
// server.AddJT808Core(); | |||||
// server.JT808Builder.Services.AddHostedService<JT808MsgReplyHostedService>(); | |||||
// return server; | |||||
//} | |||||
public static IJT808NormalGatewayBuilder AddNormalGateway(this IJT808Builder jT808Builder, Action<JT808Configuration> config) | |||||
{ | |||||
IJT808NormalGatewayBuilder server = new JT808NormalGatewayBuilderDefault(jT808Builder); | |||||
server.JT808Builder.Services.AddSingleton<JT808NormalReplyMessageHandler>(); | |||||
server.JT808Builder.Services.Configure(config); | |||||
server.AddJT808Core(); | |||||
return server; | |||||
} | |||||
//public static IJT808NormalGatewayBuilder AddNormalGateway(this IJT808Builder jT808Builder, Action<JT808Configuration> config) | |||||
//{ | |||||
// IJT808NormalGatewayBuilder server = new JT808NormalGatewayBuilderDefault(jT808Builder); | |||||
// server.JT808Builder.Services.AddSingleton<JT808NormalReplyMessageHandler>(); | |||||
// server.JT808Builder.Services.Configure(config); | |||||
// server.AddJT808Core(); | |||||
// return server; | |||||
//} | |||||
public static IJT808QueueGatewayBuilder AddQueueGateway(this IJT808Builder jT808Builder, IConfiguration configuration) | |||||
{ | |||||
IJT808QueueGatewayBuilder server = new JT808QueueGatewayBuilderDefault(jT808Builder); | |||||
server.JT808Builder.Services.Configure<JT808Configuration>(configuration.GetSection("JT808Configuration")); | |||||
server.AddJT808Core(); | |||||
server.JT808Builder.Services.AddHostedService<JT808MsgReplyHostedService>(); | |||||
return server; | |||||
} | |||||
//public static IJT808QueueGatewayBuilder AddQueueGateway(this IJT808Builder jT808Builder, IConfiguration configuration) | |||||
//{ | |||||
// IJT808QueueGatewayBuilder server = new JT808QueueGatewayBuilderDefault(jT808Builder); | |||||
// server.JT808Builder.Services.Configure<JT808Configuration>(configuration.GetSection("JT808Configuration")); | |||||
// server.AddJT808Core(); | |||||
// server.JT808Builder.Services.AddHostedService<JT808MsgReplyHostedService>(); | |||||
// return server; | |||||
//} | |||||
//public static IJT808NormalGatewayBuilder AddNormalGateway(this IJT808Builder jT808Builder, IConfiguration configuration) | |||||
//{ | |||||
// IJT808NormalGatewayBuilder server = new JT808NormalGatewayBuilderDefault(jT808Builder); | |||||
// server.JT808Builder.Services.AddSingleton<JT808NormalReplyMessageHandler>(); | |||||
// server.JT808Builder.Services.Configure<JT808Configuration>(configuration.GetSection("JT808Configuration")); | |||||
// server.AddJT808Core(); | |||||
// return server; | |||||
//} | |||||
public static IJT808NormalGatewayBuilder AddNormalGateway(this IJT808Builder jT808Builder, IConfiguration configuration) | |||||
//public static IJT808NormalGatewayBuilder ReplaceNormalReplyMessageHandler<TJT808NormalReplyMessageHandler>(this IJT808NormalGatewayBuilder config) | |||||
// where TJT808NormalReplyMessageHandler : JT808NormalReplyMessageHandler | |||||
//{ | |||||
// config.JT808Builder.Services.Replace(new ServiceDescriptor(typeof(JT808NormalReplyMessageHandler),typeof(TJT808NormalReplyMessageHandler), ServiceLifetime.Singleton)); | |||||
// return config; | |||||
//} | |||||
public static IJT808GatewayBuilder AddGateway(this IJT808Builder jT808Builder, Action<JT808Configuration> config) | |||||
{ | { | ||||
IJT808NormalGatewayBuilder server = new JT808NormalGatewayBuilderDefault(jT808Builder); | |||||
server.JT808Builder.Services.AddSingleton<JT808NormalReplyMessageHandler>(); | |||||
server.JT808Builder.Services.Configure<JT808Configuration>(configuration.GetSection("JT808Configuration")); | |||||
server.AddJT808Core(); | |||||
return server; | |||||
JT808GatewayBuilderDefault jT808GatewayBuilderDefault = new JT808GatewayBuilderDefault(jT808Builder); | |||||
jT808GatewayBuilderDefault.JT808Builder.Services.Configure(config); | |||||
jT808GatewayBuilderDefault.AddJT808Core(); | |||||
return jT808GatewayBuilderDefault; | |||||
} | } | ||||
public static IJT808NormalGatewayBuilder ReplaceNormalReplyMessageHandler<TJT808NormalReplyMessageHandler>(this IJT808NormalGatewayBuilder config) | |||||
where TJT808NormalReplyMessageHandler : JT808NormalReplyMessageHandler | |||||
public static IJT808GatewayBuilder AddGateway(this IJT808Builder jT808Builder, IConfiguration configuration) | |||||
{ | { | ||||
config.JT808Builder.Services.Replace(new ServiceDescriptor(typeof(JT808NormalReplyMessageHandler),typeof(TJT808NormalReplyMessageHandler), ServiceLifetime.Singleton)); | |||||
return config; | |||||
JT808GatewayBuilderDefault jT808GatewayBuilderDefault = new JT808GatewayBuilderDefault(jT808Builder); | |||||
jT808GatewayBuilderDefault.JT808Builder.Services.Configure<JT808Configuration>(configuration.GetSection("JT808Configuration")); | |||||
jT808GatewayBuilderDefault.AddJT808Core(); | |||||
return jT808GatewayBuilderDefault; | |||||
} | } | ||||
public static IJT808GatewayBuilder AddTcp(this IJT808GatewayBuilder config) | public static IJT808GatewayBuilder AddTcp(this IJT808GatewayBuilder config) | ||||
@@ -1,17 +1,12 @@ | |||||
using System; | using System; | ||||
using System.Buffers; | using System.Buffers; | ||||
using System.Collections.Generic; | |||||
using System.IO.Pipelines; | using System.IO.Pipelines; | ||||
using System.Net; | using System.Net; | ||||
using System.Net.Sockets; | using System.Net.Sockets; | ||||
using System.Text; | |||||
using System.Threading; | using System.Threading; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
using JT808.Gateway.Abstractions; | using JT808.Gateway.Abstractions; | ||||
using JT808.Gateway.Abstractions.Enums; | |||||
using JT808.Gateway.Configurations; | using JT808.Gateway.Configurations; | ||||
using JT808.Gateway.Enums; | |||||
using JT808.Gateway.Services; | |||||
using JT808.Gateway.Session; | using JT808.Gateway.Session; | ||||
using JT808.Protocol; | using JT808.Protocol; | ||||
using JT808.Protocol.Exceptions; | using JT808.Protocol.Exceptions; | ||||
@@ -30,62 +25,32 @@ namespace JT808.Gateway | |||||
private readonly JT808SessionManager SessionManager; | private readonly JT808SessionManager SessionManager; | ||||
private readonly IJT808MsgProducer MsgProducer; | |||||
private readonly JT808Serializer Serializer; | private readonly JT808Serializer Serializer; | ||||
private readonly JT808Configuration Configuration; | private readonly JT808Configuration Configuration; | ||||
private readonly JT808NormalReplyMessageHandler JT808NormalReplyMessageHandler; | |||||
private JT808UseType JT808UseType; | |||||
private readonly JT808MessageHandler MessageHandler; | |||||
/// <summary> | /// <summary> | ||||
/// 使用队列方式 | /// 使用队列方式 | ||||
/// </summary> | /// </summary> | ||||
/// <param name="messageHandler"></param> | |||||
/// <param name="jT808ConfigurationAccessor"></param> | /// <param name="jT808ConfigurationAccessor"></param> | ||||
/// <param name="jT808Config"></param> | /// <param name="jT808Config"></param> | ||||
/// <param name="loggerFactory"></param> | /// <param name="loggerFactory"></param> | ||||
/// <param name="jT808SessionManager"></param> | /// <param name="jT808SessionManager"></param> | ||||
/// <param name="jT808MsgProducer"></param> | |||||
/// <param name="jT808AtomicCounterServiceFactory"></param> | |||||
public JT808TcpServer( | |||||
IOptions<JT808Configuration> jT808ConfigurationAccessor, | |||||
IJT808Config jT808Config, | |||||
ILoggerFactory loggerFactory, | |||||
JT808SessionManager jT808SessionManager, | |||||
IJT808MsgProducer jT808MsgProducer) | |||||
{ | |||||
SessionManager = jT808SessionManager; | |||||
Logger = loggerFactory.CreateLogger("JT808TcpServer"); | |||||
Serializer = jT808Config.GetSerializer(); | |||||
MsgProducer = jT808MsgProducer; | |||||
Configuration = jT808ConfigurationAccessor.Value; | |||||
JT808UseType = JT808UseType.Queue; | |||||
InitServer(); | |||||
} | |||||
/// <summary> | |||||
/// 使用正常方式 | |||||
/// </summary> | |||||
/// <param name="jT808ConfigurationAccessor"></param> | |||||
/// <param name="jT808Config"></param> | |||||
/// <param name="loggerFactory"></param> | |||||
/// <param name="jT808SessionManager"></param> | |||||
/// <param name="replyMessageHandler"></param> | |||||
/// <param name="jT808AtomicCounterServiceFactory"></param> | |||||
public JT808TcpServer( | public JT808TcpServer( | ||||
JT808MessageHandler messageHandler, | |||||
IOptions<JT808Configuration> jT808ConfigurationAccessor, | IOptions<JT808Configuration> jT808ConfigurationAccessor, | ||||
IJT808Config jT808Config, | IJT808Config jT808Config, | ||||
ILoggerFactory loggerFactory, | ILoggerFactory loggerFactory, | ||||
JT808SessionManager jT808SessionManager, | |||||
JT808NormalReplyMessageHandler replyMessageHandler) | |||||
JT808SessionManager jT808SessionManager) | |||||
{ | { | ||||
MessageHandler = messageHandler; | |||||
SessionManager = jT808SessionManager; | SessionManager = jT808SessionManager; | ||||
Logger = loggerFactory.CreateLogger("JT808TcpServer"); | Logger = loggerFactory.CreateLogger("JT808TcpServer"); | ||||
Serializer = jT808Config.GetSerializer(); | Serializer = jT808Config.GetSerializer(); | ||||
JT808NormalReplyMessageHandler = replyMessageHandler; | |||||
Configuration = jT808ConfigurationAccessor.Value; | Configuration = jT808ConfigurationAccessor.Value; | ||||
JT808UseType = JT808UseType.Normal; | |||||
InitServer(); | InitServer(); | ||||
} | } | ||||
@@ -231,14 +196,7 @@ namespace JT808.Gateway | |||||
var package = Serializer.HeaderDeserialize(contentSpan, minBufferSize: 10240); | var package = Serializer.HeaderDeserialize(contentSpan, minBufferSize: 10240); | ||||
if (Logger.IsEnabled(LogLevel.Trace)) Logger.LogTrace($"[Accept Hex {session.Client.RemoteEndPoint}]:{package.OriginalData.ToArray().ToHexString()}"); | if (Logger.IsEnabled(LogLevel.Trace)) Logger.LogTrace($"[Accept Hex {session.Client.RemoteEndPoint}]:{package.OriginalData.ToArray().ToHexString()}"); | ||||
SessionManager.TryLink(package.Header.TerminalPhoneNo, session); | SessionManager.TryLink(package.Header.TerminalPhoneNo, session); | ||||
if(JT808UseType== JT808UseType.Normal) | |||||
{ | |||||
JT808NormalReplyMessageHandler.Processor(package, session); | |||||
} | |||||
else if(JT808UseType== JT808UseType.Queue) | |||||
{ | |||||
MsgProducer.ProduceAsync(package.Header.TerminalPhoneNo, package.OriginalData.ToArray()); | |||||
} | |||||
MessageHandler.Processor(package, session); | |||||
} | } | ||||
} | } | ||||
catch (NotImplementedException ex) | catch (NotImplementedException ex) | ||||
@@ -8,10 +8,7 @@ using System.Text; | |||||
using System.Threading; | using System.Threading; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
using JT808.Gateway.Abstractions; | using JT808.Gateway.Abstractions; | ||||
using JT808.Gateway.Abstractions.Enums; | |||||
using JT808.Gateway.Configurations; | using JT808.Gateway.Configurations; | ||||
using JT808.Gateway.Enums; | |||||
using JT808.Gateway.Services; | |||||
using JT808.Gateway.Session; | using JT808.Gateway.Session; | ||||
using JT808.Protocol; | using JT808.Protocol; | ||||
using JT808.Protocol.Exceptions; | using JT808.Protocol.Exceptions; | ||||
@@ -30,49 +27,26 @@ namespace JT808.Gateway | |||||
private readonly JT808SessionManager SessionManager; | private readonly JT808SessionManager SessionManager; | ||||
private readonly IJT808MsgProducer MsgProducer; | |||||
private readonly JT808Serializer Serializer; | private readonly JT808Serializer Serializer; | ||||
private readonly JT808Configuration Configuration; | private readonly JT808Configuration Configuration; | ||||
private readonly IPEndPoint LocalIPEndPoint; | private readonly IPEndPoint LocalIPEndPoint; | ||||
private readonly JT808NormalReplyMessageHandler JT808NormalReplyMessageHandler; | |||||
private JT808UseType JT808UseType; | |||||
private readonly JT808MessageHandler MessageHandler; | |||||
public JT808UdpServer( | public JT808UdpServer( | ||||
IOptions<JT808Configuration> jT808ConfigurationAccessor, | IOptions<JT808Configuration> jT808ConfigurationAccessor, | ||||
IJT808Config jT808Config, | IJT808Config jT808Config, | ||||
ILoggerFactory loggerFactory, | ILoggerFactory loggerFactory, | ||||
JT808SessionManager jT808SessionManager, | JT808SessionManager jT808SessionManager, | ||||
IJT808MsgProducer jT808MsgProducer) | |||||
{ | |||||
SessionManager = jT808SessionManager; | |||||
Logger = loggerFactory.CreateLogger("JT808UdpServer"); | |||||
Serializer = jT808Config.GetSerializer(); | |||||
MsgProducer = jT808MsgProducer; | |||||
Configuration = jT808ConfigurationAccessor.Value; | |||||
JT808UseType = JT808UseType.Queue; | |||||
LocalIPEndPoint = new System.Net.IPEndPoint(IPAddress.Any, Configuration.UdpPort); | |||||
server = new Socket(LocalIPEndPoint.AddressFamily, SocketType.Dgram, ProtocolType.Udp); | |||||
server.Bind(LocalIPEndPoint); | |||||
} | |||||
public JT808UdpServer( | |||||
IOptions<JT808Configuration> jT808ConfigurationAccessor, | |||||
IJT808Config jT808Config, | |||||
ILoggerFactory loggerFactory, | |||||
JT808SessionManager jT808SessionManager, | |||||
JT808NormalReplyMessageHandler replyMessageHandler) | |||||
JT808MessageHandler messageHandler) | |||||
{ | { | ||||
SessionManager = jT808SessionManager; | SessionManager = jT808SessionManager; | ||||
Logger = loggerFactory.CreateLogger("JT808UdpServer"); | Logger = loggerFactory.CreateLogger("JT808UdpServer"); | ||||
Serializer = jT808Config.GetSerializer(); | Serializer = jT808Config.GetSerializer(); | ||||
JT808NormalReplyMessageHandler = replyMessageHandler; | |||||
Configuration = jT808ConfigurationAccessor.Value; | Configuration = jT808ConfigurationAccessor.Value; | ||||
JT808UseType = JT808UseType.Normal; | |||||
MessageHandler = messageHandler; | |||||
LocalIPEndPoint = new System.Net.IPEndPoint(IPAddress.Any, Configuration.UdpPort); | LocalIPEndPoint = new System.Net.IPEndPoint(IPAddress.Any, Configuration.UdpPort); | ||||
server = new Socket(LocalIPEndPoint.AddressFamily, SocketType.Dgram, ProtocolType.Udp); | server = new Socket(LocalIPEndPoint.AddressFamily, SocketType.Dgram, ProtocolType.Udp); | ||||
server.Bind(LocalIPEndPoint); | server.Bind(LocalIPEndPoint); | ||||
@@ -120,14 +94,7 @@ namespace JT808.Gateway | |||||
{ | { | ||||
Logger.LogInformation($"[Connected]:{receiveMessageFromResult.RemoteEndPoint}"); | Logger.LogInformation($"[Connected]:{receiveMessageFromResult.RemoteEndPoint}"); | ||||
} | } | ||||
if (JT808UseType == JT808UseType.Normal) | |||||
{ | |||||
JT808NormalReplyMessageHandler.Processor(package, session); | |||||
} | |||||
else if (JT808UseType == JT808UseType.Queue) | |||||
{ | |||||
MsgProducer.ProduceAsync(package.Header.TerminalPhoneNo, package.OriginalData.ToArray()); | |||||
} | |||||
MessageHandler.Processor(package, session); | |||||
} | } | ||||
catch (NotImplementedException ex) | catch (NotImplementedException ex) | ||||
{ | { | ||||