Browse Source

1.修改网关消息处理程序的使用方式

2.添加webapi客户端注册方式
tags/pipeline-1.1.0
SmallChi(Koike) 4 years ago
parent
commit
a961c06fca
15 changed files with 166 additions and 179 deletions
  1. +4
    -1
      simples/JT808.Gateway.SimpleClient/Program.cs
  2. +2
    -2
      src/JT808.Gateway.Abstractions/Configurations/JT808Configuration.cs
  3. +2
    -0
      src/JT808.Gateway.Abstractions/Extensions/JT808SessionExtensions.cs
  4. +25
    -46
      src/JT808.Gateway.Abstractions/JT808.Gateway.Abstractions.xml
  5. +49
    -87
      src/JT808.Gateway.Abstractions/JT808MessageHandler.cs
  6. +5
    -8
      src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/Impl/JT808CustomMessageHandlerImpl.cs
  7. +4
    -1
      src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/Program.cs
  8. +7
    -8
      src/JT808.Gateway.Tests/JT808.Gateway.QueueHosting/Impl/JT808CustomMessageHandlerImpl.cs
  9. +2
    -21
      src/JT808.Gateway.Tests/JT808.Gateway.QueueHosting/Impl/JT808ReplyMessageHandlerImpl.cs
  10. +4
    -1
      src/JT808.Gateway.Tests/JT808.Gateway.QueueHosting/Program.cs
  11. +17
    -0
      src/JT808.Gateway.WebApiClientTool/JT808.Gateway.WebApiClientTool.xml
  12. +40
    -1
      src/JT808.Gateway.WebApiClientTool/JT808HttpClientExtensions.cs
  13. +2
    -1
      src/JT808.Gateway/JT808TcpServer.cs
  14. +2
    -1
      src/JT808.Gateway/JT808UdpServer.cs
  15. +1
    -1
      src/Version.props

+ 4
- 1
simples/JT808.Gateway.SimpleClient/Program.cs View File

@@ -10,6 +10,7 @@ using Microsoft.Extensions.Hosting;
using JT808.Gateway.Client; using JT808.Gateway.Client;
using JT808.Gateway.SimpleClient.Services; using JT808.Gateway.SimpleClient.Services;
using JT808.Gateway.SimpleClient.Jobs; using JT808.Gateway.SimpleClient.Jobs;
using JT808.Gateway.WebApiClientTool;


namespace JT808.Gateway.SimpleClient namespace JT808.Gateway.SimpleClient
{ {
@@ -28,7 +29,9 @@ namespace JT808.Gateway.SimpleClient
services.AddSingleton<ILoggerFactory, LoggerFactory>(); services.AddSingleton<ILoggerFactory, LoggerFactory>();
services.AddSingleton(typeof(ILogger<>), typeof(Logger<>)); services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
services.AddJT808Configure() services.AddJT808Configure()
.AddClient();
.AddClient()
;
services.AddJT808WebApiClientTool(new Uri("http://127.0.0.1:828/"),"12346");
services.AddHostedService<UpService>(); services.AddHostedService<UpService>();
services.AddHostedService<Up2019Service>(); services.AddHostedService<Up2019Service>();
services.AddHostedService<CallHttpClientJob>(); services.AddHostedService<CallHttpClientJob>();


+ 2
- 2
src/JT808.Gateway.Abstractions/Configurations/JT808Configuration.cs View File

@@ -33,8 +33,8 @@ namespace JT808.Gateway.Abstractions.Configurations
/// </summary> /// </summary>
public int UdpReceiveTimeoutCheckTimeSeconds { get; set; } = 60; public int UdpReceiveTimeoutCheckTimeSeconds { get; set; } = 60;
/// <summary> /// <summary>
/// 网关不做消息业务处理,往队列发送
/// 网关忽略消息应答
/// </summary> /// </summary>
public List<uint> FilterMsgIdHandlerForQueue { get; set; } = new List<uint>();
public HashSet<uint> IgnoreMsgIdReply { get; set; } = new HashSet<uint>();
} }
} }

+ 2
- 0
src/JT808.Gateway.Abstractions/Extensions/JT808SessionExtensions.cs View File

@@ -11,6 +11,7 @@ namespace JT808.Gateway.Abstractions
{ {
public static async void SendAsync(this IJT808Session session,byte[] data) public static async void SendAsync(this IJT808Session session,byte[] data)
{ {
if (data == null) return;
if (session.TransportProtocolType == JT808TransportProtocolType.tcp) if (session.TransportProtocolType == JT808TransportProtocolType.tcp)
{ {
await session.Client.SendAsync(data, SocketFlags.None); await session.Client.SendAsync(data, SocketFlags.None);
@@ -23,6 +24,7 @@ namespace JT808.Gateway.Abstractions


public static void Send(this IJT808Session session, byte[] data) public static void Send(this IJT808Session session, byte[] data)
{ {
if (data == null) return;
if (session.TransportProtocolType == JT808TransportProtocolType.tcp) if (session.TransportProtocolType == JT808TransportProtocolType.tcp)
{ {
session.Client.Send(data, SocketFlags.None); session.Client.Send(data, SocketFlags.None);


+ 25
- 46
src/JT808.Gateway.Abstractions/JT808.Gateway.Abstractions.xml View File

@@ -30,9 +30,9 @@
Udp 60s检查一次 Udp 60s检查一次
</summary> </summary>
</member> </member>
<member name="P:JT808.Gateway.Abstractions.Configurations.JT808Configuration.FilterMsgIdHandlerForQueue">
<member name="P:JT808.Gateway.Abstractions.Configurations.JT808Configuration.IgnoreMsgIdReply">
<summary> <summary>
网关不做消息业务处理,往队列发送
网关忽略消息应答
</summary> </summary>
</member> </member>
<member name="P:JT808.Gateway.Abstractions.Dtos.JT808TcpSessionInfoDto.LastActiveTime"> <member name="P:JT808.Gateway.Abstractions.Dtos.JT808TcpSessionInfoDto.LastActiveTime">
@@ -169,15 +169,14 @@
通用消息处理程序 通用消息处理程序
</summary> </summary>
</member> </member>
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Processor(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)">
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Processor(JT808.Protocol.JT808HeaderPackage)">
<summary> <summary>
消息处理 消息处理
</summary> </summary>
<param name="request">请求数据</param> <param name="request">请求数据</param>
<param name="session">当前会话</param>
<returns>应答消息数据</returns> <returns>应答消息数据</returns>
</member> </member>
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0001(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)">
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0001(JT808.Protocol.JT808HeaderPackage)">
<summary> <summary>
终端通用应答 终端通用应答
平台无需回复 平台无需回复
@@ -186,172 +185,152 @@
<param name="request"></param> <param name="request"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.CommonReply(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)">
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.CommonReply(JT808.Protocol.JT808HeaderPackage)">
<summary> <summary>
平台通用应答 平台通用应答
</summary> </summary>
<param name="request"></param> <param name="request"></param>
<param name="session"></param>
</member> </member>
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0002(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)">
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0002(JT808.Protocol.JT808HeaderPackage)">
<summary> <summary>
终端心跳 终端心跳
</summary> </summary>
<param name="request"></param> <param name="request"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0004(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)">
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0004(JT808.Protocol.JT808HeaderPackage)">
<summary> <summary>
查询服务器时间 查询服务器时间
2019版本 2019版本
</summary> </summary>
<param name="request"></param> <param name="request"></param>
<param name="session"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x8003(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)">
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x8003(JT808.Protocol.JT808HeaderPackage)">
<summary> <summary>
服务器补传分包请求 服务器补传分包请求
</summary> </summary>
<param name="request"></param> <param name="request"></param>
<param name="session"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0005(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)">
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0005(JT808.Protocol.JT808HeaderPackage)">
<summary> <summary>
终端补传分包请求 终端补传分包请求
</summary> </summary>
<param name="request"></param> <param name="request"></param>
<param name="session"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0100(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)">
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0100(JT808.Protocol.JT808HeaderPackage)">
<summary> <summary>
终端注册 终端注册
</summary> </summary>
<param name="request"></param> <param name="request"></param>
<param name="session"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0003(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)">
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0003(JT808.Protocol.JT808HeaderPackage)">
<summary> <summary>
终端注销 终端注销
</summary> </summary>
<param name="request"></param> <param name="request"></param>
<param name="session"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0102(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)">
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0102(JT808.Protocol.JT808HeaderPackage)">
<summary> <summary>
终端鉴权 终端鉴权
</summary> </summary>
<param name="request"></param> <param name="request"></param>
<param name="session"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0104(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)">
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0104(JT808.Protocol.JT808HeaderPackage)">
<summary> <summary>
查询终端参数应答 查询终端参数应答
</summary> </summary>
<param name="request"></param> <param name="request"></param>
<param name="session"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0107(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)">
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0107(JT808.Protocol.JT808HeaderPackage)">
<summary> <summary>
查询终端属性应答 查询终端属性应答
</summary> </summary>
<param name="request"></param> <param name="request"></param>
<param name="session"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0108(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)">
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0108(JT808.Protocol.JT808HeaderPackage)">
<summary> <summary>
终端升级结果应答 终端升级结果应答
</summary> </summary>
<param name="request"></param> <param name="request"></param>
<param name="session"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0200(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)">
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0200(JT808.Protocol.JT808HeaderPackage)">
<summary> <summary>
位置信息汇报 位置信息汇报
</summary> </summary>
<param name="request"></param> <param name="request"></param>
<param name="session"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0201(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)">
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0201(JT808.Protocol.JT808HeaderPackage)">
<summary> <summary>
位置信息查询应答 位置信息查询应答
</summary> </summary>
<param name="request"></param> <param name="request"></param>
<param name="session"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x8204(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)">
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x8204(JT808.Protocol.JT808HeaderPackage)">
<summary> <summary>
链路检测 链路检测
2019版本 2019版本
</summary> </summary>
<param name="request"></param> <param name="request"></param>
<param name="session"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0500(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)">
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0500(JT808.Protocol.JT808HeaderPackage)">
<summary> <summary>
车辆控制应答 车辆控制应答
</summary> </summary>
<param name="request"></param> <param name="request"></param>
<param name="session"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0704(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)">
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0704(JT808.Protocol.JT808HeaderPackage)">
<summary> <summary>
定位数据批量上传 定位数据批量上传
</summary> </summary>
<param name="request"></param> <param name="request"></param>
<param name="session"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0705(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)">
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0705(JT808.Protocol.JT808HeaderPackage)">
<summary> <summary>
CAN总线数据上传 CAN总线数据上传
</summary> </summary>
<param name="request"></param> <param name="request"></param>
<param name="session"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0800(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)">
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0800(JT808.Protocol.JT808HeaderPackage)">
<summary> <summary>
多媒体事件信息上传 多媒体事件信息上传
</summary> </summary>
<param name="request"></param> <param name="request"></param>
<param name="session"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0801(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)">
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0801(JT808.Protocol.JT808HeaderPackage)">
<summary> <summary>
多媒体数据上传 多媒体数据上传
</summary> </summary>
<param name="request"></param> <param name="request"></param>
<param name="session"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x8801(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)">
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x8801(JT808.Protocol.JT808HeaderPackage)">
<summary> <summary>
摄像头立即拍摄命令 摄像头立即拍摄命令
</summary> </summary>
<param name="request"></param> <param name="request"></param>
<param name="session"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0900(JT808.Protocol.JT808HeaderPackage,JT808.Gateway.Abstractions.IJT808Session)">
<member name="M:JT808.Gateway.Abstractions.JT808MessageHandler.Msg0x0900(JT808.Protocol.JT808HeaderPackage)">
<summary> <summary>
数据上行透传 数据上行透传
</summary> </summary>
<param name="request"></param> <param name="request"></param>
<param name="session"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:JT808.Gateway.Abstractions.JT808MsgIdHttpHandlerBase.#ctor"> <member name="M:JT808.Gateway.Abstractions.JT808MsgIdHttpHandlerBase.#ctor">


+ 49
- 87
src/JT808.Gateway.Abstractions/JT808MessageHandler.cs View File

@@ -18,7 +18,7 @@ namespace JT808.Gateway.Abstractions
{ {
protected Dictionary<ushort, MsgIdMethodDelegate> HandlerDict { get; } protected Dictionary<ushort, MsgIdMethodDelegate> HandlerDict { get; }


protected delegate byte[] MsgIdMethodDelegate(JT808HeaderPackage package, IJT808Session session);
protected delegate byte[] MsgIdMethodDelegate(JT808HeaderPackage package);
protected JT808Serializer JT808Serializer { get; } protected JT808Serializer JT808Serializer { get; }


protected IJT808MsgProducer MsgProducer; protected IJT808MsgProducer MsgProducer;
@@ -66,44 +66,31 @@ namespace JT808.Gateway.Abstractions
/// 消息处理 /// 消息处理
/// </summary> /// </summary>
/// <param name="request">请求数据</param> /// <param name="request">请求数据</param>
/// <param name="session">当前会话</param>
/// <returns>应答消息数据</returns> /// <returns>应答消息数据</returns>
public virtual byte[] Processor(JT808HeaderPackage request, IJT808Session session)
public virtual byte[] Processor(JT808HeaderPackage request)
{ {
if (MsgProducer != null)
{
MsgProducer.ProduceAsync(request.Header.TerminalPhoneNo, request.OriginalData.ToArray());
}
if (HandlerDict.TryGetValue(request.Header.MsgId, out var func)) if (HandlerDict.TryGetValue(request.Header.MsgId, out var func))
{ {
if (JT808ConfigurationOptionsMonitor.CurrentValue.FilterMsgIdHandlerForQueue != null)
var data = func(request);
if (MsgReplyLoggingProducer != null)
{ {
// 网关不做消息业务处理,往队列发送
if (JT808ConfigurationOptionsMonitor.CurrentValue.FilterMsgIdHandlerForQueue.Contains(request.Header.MsgId))
MsgReplyLoggingProducer.ProduceAsync(request.Header.TerminalPhoneNo, data);
}
if (JT808ConfigurationOptionsMonitor.CurrentValue.IgnoreMsgIdReply != null && JT808ConfigurationOptionsMonitor.CurrentValue.IgnoreMsgIdReply.Count > 0)
{
if (JT808ConfigurationOptionsMonitor.CurrentValue.IgnoreMsgIdReply.Contains(request.Header.MsgId))
{ {
if (MsgProducer != null)
{
MsgProducer.ProduceAsync(request.Header.TerminalPhoneNo, request.OriginalData.ToArray());
}
return default; return default;
} }
else
{
var data=func(request, session);
MsgReplyLoggingProducer.ProduceAsync(request.Header.TerminalPhoneNo, data);
return data;
}
}
else
{
var data = func(request, session);
MsgReplyLoggingProducer.ProduceAsync(request.Header.TerminalPhoneNo, data);
return data;
} }
return data;
} }
else else
{ {
//处理不了的消息Id统一发队列
if (MsgProducer != null)
{
MsgProducer.ProduceAsync(request.Header.TerminalPhoneNo, request.OriginalData.ToArray());
}
return default; return default;
} }
} }
@@ -115,7 +102,7 @@ namespace JT808.Gateway.Abstractions
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <returns></returns> /// <returns></returns>
public virtual byte[] Msg0x0001(JT808HeaderPackage request, IJT808Session session)
public virtual byte[] Msg0x0001(JT808HeaderPackage request)
{ {
return default; return default;
} }
@@ -123,8 +110,7 @@ namespace JT808.Gateway.Abstractions
/// 平台通用应答 /// 平台通用应答
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="session"></param>
public virtual byte[] CommonReply(JT808HeaderPackage request, IJT808Session session)
public virtual byte[] CommonReply(JT808HeaderPackage request)
{ {
if (request.Version == JT808Version.JTT2019) if (request.Version == JT808Version.JTT2019)
{ {
@@ -134,7 +120,6 @@ namespace JT808.Gateway.Abstractions
JT808PlatformResult = JT808PlatformResult.成功, JT808PlatformResult = JT808PlatformResult.成功,
MsgNum = request.Header.MsgNum MsgNum = request.Header.MsgNum
})); }));
session.Send(data);
return data; return data;
} }
else else
@@ -145,7 +130,6 @@ namespace JT808.Gateway.Abstractions
JT808PlatformResult = JT808PlatformResult.成功, JT808PlatformResult = JT808PlatformResult.成功,
MsgNum = request.Header.MsgNum MsgNum = request.Header.MsgNum
})); }));
session.Send(data);
return data; return data;
} }
} }
@@ -154,33 +138,30 @@ namespace JT808.Gateway.Abstractions
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <returns></returns> /// <returns></returns>
public virtual byte[] Msg0x0002(JT808HeaderPackage request, IJT808Session session)
public virtual byte[] Msg0x0002(JT808HeaderPackage request)
{ {
return CommonReply(request, session);
return CommonReply(request);
} }
/// <summary> /// <summary>
/// 查询服务器时间 /// 查询服务器时间
/// 2019版本 /// 2019版本
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="session"></param>
/// <returns></returns> /// <returns></returns>
public virtual byte[] Msg0x0004(JT808HeaderPackage request, IJT808Session session)
public virtual byte[] Msg0x0004(JT808HeaderPackage request)
{ {
byte[] data = JT808Serializer.Serialize(JT808MsgId.查询服务器时间应答.Create(request.Header.TerminalPhoneNo, new JT808_0x8004() byte[] data = JT808Serializer.Serialize(JT808MsgId.查询服务器时间应答.Create(request.Header.TerminalPhoneNo, new JT808_0x8004()
{ {
Time = DateTime.Now Time = DateTime.Now
})); }));
session.Send(data);
return data; return data;
} }
/// <summary> /// <summary>
/// 服务器补传分包请求 /// 服务器补传分包请求
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="session"></param>
/// <returns></returns> /// <returns></returns>
public virtual byte[] Msg0x8003(JT808HeaderPackage request, IJT808Session session)
public virtual byte[] Msg0x8003(JT808HeaderPackage request)
{ {
throw new NotImplementedException("0x8003-服务器补传分包请求"); throw new NotImplementedException("0x8003-服务器补传分包请求");
} }
@@ -188,9 +169,8 @@ namespace JT808.Gateway.Abstractions
/// 终端补传分包请求 /// 终端补传分包请求
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="session"></param>
/// <returns></returns> /// <returns></returns>
public virtual byte[] Msg0x0005(JT808HeaderPackage request, IJT808Session session)
public virtual byte[] Msg0x0005(JT808HeaderPackage request)
{ {
throw new NotImplementedException("0x0005-终端补传分包请求"); throw new NotImplementedException("0x0005-终端补传分包请求");
} }
@@ -198,9 +178,8 @@ namespace JT808.Gateway.Abstractions
/// 终端注册 /// 终端注册
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="session"></param>
/// <returns></returns> /// <returns></returns>
public virtual byte[] Msg0x0100(JT808HeaderPackage request, IJT808Session session)
public virtual byte[] Msg0x0100(JT808HeaderPackage request)
{ {
if (request.Version == JT808Version.JTT2019) if (request.Version == JT808Version.JTT2019)
{ {
@@ -210,7 +189,6 @@ namespace JT808.Gateway.Abstractions
JT808TerminalRegisterResult = JT808TerminalRegisterResult.成功, JT808TerminalRegisterResult = JT808TerminalRegisterResult.成功,
AckMsgNum = request.Header.MsgNum AckMsgNum = request.Header.MsgNum
})); }));
session.Send(data);
return data; return data;
} }
else else
@@ -221,7 +199,6 @@ namespace JT808.Gateway.Abstractions
JT808TerminalRegisterResult = JT808TerminalRegisterResult.成功, JT808TerminalRegisterResult = JT808TerminalRegisterResult.成功,
AckMsgNum = request.Header.MsgNum AckMsgNum = request.Header.MsgNum
})); }));
session.Send(data);
return data; return data;
} }
} }
@@ -229,80 +206,72 @@ namespace JT808.Gateway.Abstractions
/// 终端注销 /// 终端注销
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="session"></param>
/// <returns></returns> /// <returns></returns>
public virtual byte[] Msg0x0003(JT808HeaderPackage request, IJT808Session session)
public virtual byte[] Msg0x0003(JT808HeaderPackage request)
{ {
return CommonReply(request, session);
return CommonReply(request);
} }
/// <summary> /// <summary>
/// 终端鉴权 /// 终端鉴权
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="session"></param>
/// <returns></returns> /// <returns></returns>
public virtual byte[] Msg0x0102(JT808HeaderPackage request, IJT808Session session)
public virtual byte[] Msg0x0102(JT808HeaderPackage request)
{ {
return CommonReply(request, session);
return CommonReply(request);
} }
/// <summary> /// <summary>
/// 查询终端参数应答 /// 查询终端参数应答
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="session"></param>
/// <returns></returns> /// <returns></returns>
public virtual byte[] Msg0x0104(JT808HeaderPackage request, IJT808Session session)
public virtual byte[] Msg0x0104(JT808HeaderPackage request)
{ {
return CommonReply(request, session);
return CommonReply(request);
} }
/// <summary> /// <summary>
/// 查询终端属性应答 /// 查询终端属性应答
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="session"></param>
/// <returns></returns> /// <returns></returns>
public virtual byte[] Msg0x0107(JT808HeaderPackage request, IJT808Session session)
public virtual byte[] Msg0x0107(JT808HeaderPackage request)
{ {
return CommonReply(request, session);
return CommonReply(request);
} }
/// <summary> /// <summary>
/// 终端升级结果应答 /// 终端升级结果应答
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="session"></param>
/// <returns></returns> /// <returns></returns>
public virtual byte[] Msg0x0108(JT808HeaderPackage request, IJT808Session session)
public virtual byte[] Msg0x0108(JT808HeaderPackage request)
{ {
return CommonReply(request, session);
return CommonReply(request);
} }
/// <summary> /// <summary>
/// 位置信息汇报 /// 位置信息汇报
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="session"></param>
/// <returns></returns> /// <returns></returns>
public virtual byte[] Msg0x0200(JT808HeaderPackage request, IJT808Session session)
public virtual byte[] Msg0x0200(JT808HeaderPackage request)
{ {
return CommonReply(request, session);
return CommonReply(request);
} }
/// <summary> /// <summary>
/// 位置信息查询应答 /// 位置信息查询应答
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="session"></param>
/// <returns></returns> /// <returns></returns>
public virtual byte[] Msg0x0201(JT808HeaderPackage request, IJT808Session session)
public virtual byte[] Msg0x0201(JT808HeaderPackage request)
{ {
return CommonReply(request, session);
return CommonReply(request);
} }
/// <summary> /// <summary>
/// 链路检测 /// 链路检测
/// 2019版本 /// 2019版本
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="session"></param>
/// <returns></returns> /// <returns></returns>
public virtual byte[] Msg0x8204(JT808HeaderPackage request, IJT808Session session)
public virtual byte[] Msg0x8204(JT808HeaderPackage request)
{ {
return default; return default;
} }
@@ -310,49 +279,44 @@ namespace JT808.Gateway.Abstractions
/// 车辆控制应答 /// 车辆控制应答
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="session"></param>
/// <returns></returns> /// <returns></returns>
public virtual byte[] Msg0x0500(JT808HeaderPackage request, IJT808Session session)
public virtual byte[] Msg0x0500(JT808HeaderPackage request)
{ {
return CommonReply(request, session);
return CommonReply(request);
} }
/// <summary> /// <summary>
/// 定位数据批量上传 /// 定位数据批量上传
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="session"></param>
/// <returns></returns> /// <returns></returns>
public virtual byte[] Msg0x0704(JT808HeaderPackage request, IJT808Session session)
public virtual byte[] Msg0x0704(JT808HeaderPackage request)
{ {
return CommonReply(request, session);
return CommonReply(request);
} }
/// <summary> /// <summary>
/// CAN总线数据上传 /// CAN总线数据上传
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="session"></param>
/// <returns></returns> /// <returns></returns>
public virtual byte[] Msg0x0705(JT808HeaderPackage request, IJT808Session session)
public virtual byte[] Msg0x0705(JT808HeaderPackage request)
{ {
return CommonReply(request, session);
return CommonReply(request);
} }
/// <summary> /// <summary>
/// 多媒体事件信息上传 /// 多媒体事件信息上传
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="session"></param>
/// <returns></returns> /// <returns></returns>
public virtual byte[] Msg0x0800(JT808HeaderPackage request, IJT808Session session)
public virtual byte[] Msg0x0800(JT808HeaderPackage request)
{ {
return CommonReply(request, session);
return CommonReply(request);
} }
/// <summary> /// <summary>
/// 多媒体数据上传 /// 多媒体数据上传
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="session"></param>
/// <returns></returns> /// <returns></returns>
public virtual byte[] Msg0x0801(JT808HeaderPackage request, IJT808Session session)
public virtual byte[] Msg0x0801(JT808HeaderPackage request)
{ {
throw new NotImplementedException("0x8800多媒体数据上传应答"); throw new NotImplementedException("0x8800多媒体数据上传应答");
} }
@@ -360,9 +324,8 @@ namespace JT808.Gateway.Abstractions
/// 摄像头立即拍摄命令 /// 摄像头立即拍摄命令
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="session"></param>
/// <returns></returns> /// <returns></returns>
public virtual byte[] Msg0x8801(JT808HeaderPackage request, IJT808Session session)
public virtual byte[] Msg0x8801(JT808HeaderPackage request)
{ {
throw new NotImplementedException("0x0805摄像头立即拍摄命令应答"); throw new NotImplementedException("0x0805摄像头立即拍摄命令应答");
} }
@@ -370,11 +333,10 @@ namespace JT808.Gateway.Abstractions
/// 数据上行透传 /// 数据上行透传
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="session"></param>
/// <returns></returns> /// <returns></returns>
public virtual byte[] Msg0x0900(JT808HeaderPackage request, IJT808Session session)
public virtual byte[] Msg0x0900(JT808HeaderPackage request)
{ {
return CommonReply(request, session);
return CommonReply(request);
} }
} }
} }

+ 5
- 8
src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/Impl/JT808CustomMessageHandlerImpl.cs View File

@@ -46,10 +46,10 @@ namespace JT808.Gateway.NormalHosting.Impl
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="session"></param> /// <param name="session"></param>
public override byte[] Processor(JT808HeaderPackage request, IJT808Session session)
public override byte[] Processor(JT808HeaderPackage request)
{ {
//处理上行消息 //处理上行消息
var down = base.Processor(request, session);
var down = base.Processor(request);
try try
{ {
//AOP 可以自定义添加一些东西:上下行日志、 //AOP 可以自定义添加一些东西:上下行日志、
@@ -73,13 +73,10 @@ namespace JT808.Gateway.NormalHosting.Impl
/// 重写自带的消息 /// 重写自带的消息
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="session"></param>
public override byte[] Msg0x0200(JT808HeaderPackage request, IJT808Session session)
public override byte[] Msg0x0200(JT808HeaderPackage request)
{ {
logger.LogDebug("重写自带Msg0x0200的消息"); logger.LogDebug("重写自带Msg0x0200的消息");
var data = base.Msg0x0200(request, session);
logger.LogDebug("往应答服务发送相同数据进行测试");
MsgReplyProducer.ProduceAsync(request.Header.TerminalPhoneNo, data).ConfigureAwait(false);
var data = base.Msg0x0200(request);
return data; return data;
} }


@@ -88,7 +85,7 @@ namespace JT808.Gateway.NormalHosting.Impl
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <returns></returns> /// <returns></returns>
public byte[] Msg0x9999(JT808HeaderPackage request, IJT808Session session)
public byte[] Msg0x9999(JT808HeaderPackage request)
{ {
logger.LogDebug("自定义消息"); logger.LogDebug("自定义消息");
return default; return default;


+ 4
- 1
src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/Program.cs View File

@@ -51,6 +51,8 @@ namespace JT808.Gateway.NormalHosting
//添加客户端工具 //添加客户端工具
.AddClient() .AddClient()
.Builder() .Builder()
//方式1:客户端webapi调用
.AddWebApiClientTool(hostContext.Configuration)
.AddGateway(hostContext.Configuration) .AddGateway(hostContext.Configuration)
.AddMessageHandler<JT808CustomMessageHandlerImpl>() .AddMessageHandler<JT808CustomMessageHandlerImpl>()
.AddMsgReplyConsumer<JT808MsgReplyConsumer>() .AddMsgReplyConsumer<JT808MsgReplyConsumer>()
@@ -60,7 +62,8 @@ namespace JT808.Gateway.NormalHosting
.AddTcp() .AddTcp()
.AddUdp() .AddUdp()
.AddHttp(); .AddHttp();
services.AddJT808WebApiClientTool(hostContext.Configuration);
//方式2:客户端webapi调用
//services.AddJT808WebApiClientTool(hostContext.Configuration);
//httpclient客户端调用 //httpclient客户端调用
services.AddHostedService<CallHttpClientJob>(); services.AddHostedService<CallHttpClientJob>();
//客户端测试 依赖AddClient()服务 //客户端测试 依赖AddClient()服务


+ 7
- 8
src/JT808.Gateway.Tests/JT808.Gateway.QueueHosting/Impl/JT808CustomMessageHandlerImpl.cs View File

@@ -26,7 +26,7 @@ namespace JT808.Gateway.QueueHosting.Impl
{ {
logger = loggerFactory.CreateLogger<JT808CustomMessageHandlerImpl>(); logger = loggerFactory.CreateLogger<JT808CustomMessageHandlerImpl>();
//过滤掉0x0200消息,通过服务服务进行下发应答,可以通过配置文件的方式进行增加修改(支持热更新) //过滤掉0x0200消息,通过服务服务进行下发应答,可以通过配置文件的方式进行增加修改(支持热更新)
jT808ConfigurationOptionsMonitor.CurrentValue.FilterMsgIdHandlerForQueue.Add(0x0200);
//jT808ConfigurationOptionsMonitor.CurrentValue.IgnoreMsgIdReply.Add(0x0200);
//添加自定义消息 //添加自定义消息
HandlerDict.Add(0x9999, Msg0x9999); HandlerDict.Add(0x9999, Msg0x9999);
} }
@@ -37,11 +37,11 @@ namespace JT808.Gateway.QueueHosting.Impl
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="session"></param> /// <param name="session"></param>
public override byte[] Processor(JT808HeaderPackage request, IJT808Session session)
public override byte[] Processor(JT808HeaderPackage request)
{ {
try try
{ {
var down = base.Processor(request, session);
var down = base.Processor(request);
return down; return down;
} }
catch (Exception) catch (Exception)
@@ -54,11 +54,10 @@ namespace JT808.Gateway.QueueHosting.Impl
/// 重写自带的消息 /// 重写自带的消息
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="session"></param>
public override byte[] Msg0x0200(JT808HeaderPackage request, IJT808Session session)
public override byte[] Msg0x0200(JT808HeaderPackage request)
{ {
logger.LogDebug("由于过滤了0x0200,网关是不会处理0x0200消息的应答");
var data = base.Msg0x0200(request, session);
//logger.LogDebug("由于过滤了0x0200,网关是不会处理0x0200消息的应答");
var data = base.Msg0x0200(request);
return data; return data;
} }


@@ -67,7 +66,7 @@ namespace JT808.Gateway.QueueHosting.Impl
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <returns></returns> /// <returns></returns>
public byte[] Msg0x9999(JT808HeaderPackage request, IJT808Session session)
public byte[] Msg0x9999(JT808HeaderPackage request)
{ {
logger.LogDebug("自定义消息"); logger.LogDebug("自定义消息");
return default; return default;


+ 2
- 21
src/JT808.Gateway.Tests/JT808.Gateway.QueueHosting/Impl/JT808ReplyMessageHandlerImpl.cs View File

@@ -30,28 +30,9 @@ namespace JT808.Gateway.QueueHosting.Impl
logger.LogDebug($"实现消息应答处理,{TerminalNo},{Data.ToHexString()}"); logger.LogDebug($"实现消息应答处理,{TerminalNo},{Data.ToHexString()}");
} }
var package = Serializer.Deserialize(Data); var package = Serializer.Deserialize(Data);
if (package.Header.MsgId == 0x0200)
if (package.Header.MsgId == 0x09999)
{ {
if (package.Version == JT808Version.JTT2019)
{
byte[] data = Serializer.Serialize(JT808MsgId.平台通用应答.Create_平台通用应答_2019(package.Header.TerminalPhoneNo, new JT808_0x8001()
{
AckMsgId = package.Header.MsgId,
JT808PlatformResult = JT808PlatformResult.成功,
MsgNum = package.Header.MsgNum
}));
return data;
}
else
{
byte[] data = Serializer.Serialize(JT808MsgId.平台通用应答.Create(package.Header.TerminalPhoneNo, new JT808_0x8001()
{
AckMsgId = package.Header.MsgId,
JT808PlatformResult = JT808PlatformResult.成功,
MsgNum = package.Header.MsgNum
}));
return data;
}
logger.LogDebug("====实现自定义或内部消息应答处理====");
} }
return default; return default;
} }


+ 4
- 1
src/JT808.Gateway.Tests/JT808.Gateway.QueueHosting/Program.cs View File

@@ -46,6 +46,8 @@ namespace JT808.Gateway.QueueHosting
.AddClient() .AddClient()
.AddClientReport() .AddClientReport()
.Builder() .Builder()
//方式1:客户端webapi调用
.AddWebApiClientTool(hostContext.Configuration)
//添加客户端服务 //添加客户端服务
.AddClientKafka() .AddClientKafka()
.AddMsgConsumer(hostContext.Configuration) .AddMsgConsumer(hostContext.Configuration)
@@ -63,7 +65,8 @@ namespace JT808.Gateway.QueueHosting
.AddTcp() .AddTcp()
.AddUdp() .AddUdp()
.AddHttp(); .AddHttp();
services.AddJT808WebApiClientTool(hostContext.Configuration);
//方式2:客户端webapi调用
//services.AddJT808WebApiClientTool(hostContext.Configuration);
//httpclient客户端调用 //httpclient客户端调用
services.AddHostedService<CallHttpClientJob>(); services.AddHostedService<CallHttpClientJob>();
//客户端测试 //客户端测试


+ 17
- 0
src/JT808.Gateway.WebApiClientTool/JT808.Gateway.WebApiClientTool.xml View File

@@ -89,5 +89,22 @@
<param name="configuration"></param> <param name="configuration"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:JT808.Gateway.WebApiClientTool.JT808HttpClientExtensions.AddWebApiClientTool(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(JT808.Protocol.IJT808Builder,System.Uri,System.String)">
<summary>
</summary>
<param name="jT808Builder"></param>
<param name="webapiUri"></param>
<param name="token"></param>
<returns></returns>
</member>
</members> </members>
</doc> </doc>

+ 40
- 1
src/JT808.Gateway.WebApiClientTool/JT808HttpClientExtensions.cs View File

@@ -1,4 +1,6 @@
using Microsoft.Extensions.Configuration;
using JT808.Gateway.Abstractions;
using JT808.Protocol;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -47,5 +49,42 @@ namespace JT808.Gateway.WebApiClientTool
.AddTypedClient<JT808HttpClient>(); .AddTypedClient<JT808HttpClient>();
return serviceDescriptors; return serviceDescriptors;
} }

/// <summary>
///
/// </summary>
/// <param name="jT808Builder"></param>
/// <param name="configuration"></param>
/// <returns></returns>
public static IJT808Builder AddWebApiClientTool(this IJT808Builder jT808Builder, IConfiguration configuration)
{
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(3);
})
.AddTypedClient<JT808HttpClient>();
return jT808Builder;
}

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

+ 2
- 1
src/JT808.Gateway/JT808TcpServer.cs View File

@@ -196,7 +196,8 @@ 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);
MessageHandler.Processor(package, session);
var downData = MessageHandler.Processor(package);
session.SendAsync(downData);
} }
} }
catch (NotImplementedException ex) catch (NotImplementedException ex)


+ 2
- 1
src/JT808.Gateway/JT808UdpServer.cs View File

@@ -98,7 +98,8 @@ namespace JT808.Gateway
{ {
Logger.LogInformation($"[Connected]:{receiveMessageFromResult.RemoteEndPoint}"); Logger.LogInformation($"[Connected]:{receiveMessageFromResult.RemoteEndPoint}");
} }
MessageHandler.Processor(package, session);
var downData = MessageHandler.Processor(package);
session.SendAsync(downData);
} }
catch (NotImplementedException ex) catch (NotImplementedException ex)
{ {


+ 1
- 1
src/Version.props View File

@@ -1,6 +1,6 @@
<Project> <Project>
<PropertyGroup> <PropertyGroup>
<JT808DotNettyPackageVersion>2.3.2</JT808DotNettyPackageVersion> <JT808DotNettyPackageVersion>2.3.2</JT808DotNettyPackageVersion>
<JT808GatewayPackageVersion>1.1.0-preview1</JT808GatewayPackageVersion>
<JT808GatewayPackageVersion>1.1.0-preview2</JT808GatewayPackageVersion>
</PropertyGroup> </PropertyGroup>
</Project> </Project>

Loading…
Cancel
Save