Bläddra i källkod

1.增加统一的回复接口,比较好统计发送的消息及流量

2.增加tcp的编码器
3.修改tcp会话服务增加通过设备号下发信息
tags/v1.2.0
SmallChi 6 år sedan
förälder
incheckning
c7a5e955dd
18 ändrade filer med 195 tillägg och 75 borttagningar
  1. +7
    -6
      simples/JT808.DotNetty.SimpleServer/Handlers/JT808MsgIdTcpSimpleHandler.cs
  2. +0
    -2
      src/JT808.DotNetty.Client/JT808TcpClient.cs
  3. +52
    -0
      src/JT808.DotNetty.Core/Codecs/JT808TcpEncoder.cs
  4. +11
    -10
      src/JT808.DotNetty.Core/Handlers/JT808MsgIdTcpHandlerBase.cs
  5. +11
    -10
      src/JT808.DotNetty.Core/Handlers/JT808MsgIdUdpHandlerBase.cs
  6. +17
    -0
      src/JT808.DotNetty.Core/Interfaces/IJT808Reply.cs
  7. +1
    -1
      src/JT808.DotNetty.Core/JT808.DotNetty.Core.csproj
  8. +3
    -5
      src/JT808.DotNetty.Core/Metadata/JT808Response.cs
  9. +5
    -21
      src/JT808.DotNetty.Core/Services/JT808UnificationTcpSendService.cs
  10. +55
    -0
      src/JT808.DotNetty.Core/Session/JT808TcpSessionManager.cs
  11. +15
    -6
      src/JT808.DotNetty.Tcp/Handlers/JT808TcpServerHandler.cs
  12. +1
    -0
      src/JT808.DotNetty.Tcp/JT808TcpDotnettyExtensions.cs
  13. +5
    -4
      src/JT808.DotNetty.Tcp/JT808TcpServerHost.cs
  14. +2
    -1
      src/JT808.DotNetty.Tests/JT808.DotNetty.Hosting/Handlers/JT808MsgIdTcpCustomHandler.cs
  15. +2
    -1
      src/JT808.DotNetty.Tests/JT808.DotNetty.Hosting/Handlers/JT808MsgIdUdpCustomHandler.cs
  16. +3
    -3
      src/JT808.DotNetty.Udp/Handlers/JT808UdpServerHandler.cs
  17. +1
    -1
      src/JT808.DotNetty.WebApi/JT808WebAPIServerHost.cs
  18. +4
    -4
      src/JT808.DotNetty.sln

+ 7
- 6
simples/JT808.DotNetty.SimpleServer/Handlers/JT808MsgIdTcpSimpleHandler.cs Visa fil

@@ -1,5 +1,6 @@
using JT808.DotNetty.Core;
using JT808.DotNetty.Core.Handlers;
using JT808.DotNetty.Core.Interfaces;
using JT808.DotNetty.Core.Metadata;
using Microsoft.Extensions.Logging;
using System;
@@ -19,37 +20,37 @@ namespace JT808.DotNetty.SimpleServer.Handlers

private readonly ILogger<JT808MsgIdTcpSimpleHandler> logger;

public override JT808Response Msg0x0200(JT808Request request)
public override IJT808Reply Msg0x0200(JT808Request request)
{
logger.LogDebug("Tcp_Msg0x0200");
return base.Msg0x0200(request);
}

public override JT808Response Msg0x0001(JT808Request request)
public override IJT808Reply Msg0x0001(JT808Request request)
{
logger.LogDebug("Tcp_Msg0x0001");
return base.Msg0x0001(request);
}

public override JT808Response Msg0x0002(JT808Request request)
public override IJT808Reply Msg0x0002(JT808Request request)
{
logger.LogDebug("Tcp_Msg0x0002");
return base.Msg0x0002(request);
}

public override JT808Response Msg0x0003(JT808Request request)
public override IJT808Reply Msg0x0003(JT808Request request)
{
logger.LogDebug("Tcp_Msg0x0003");
return base.Msg0x0003(request);
}

public override JT808Response Msg0x0100(JT808Request request)
public override IJT808Reply Msg0x0100(JT808Request request)
{
logger.LogDebug("Tcp_Msg0x0100");
return base.Msg0x0100(request);
}

public override JT808Response Msg0x0102(JT808Request request)
public override IJT808Reply Msg0x0102(JT808Request request)
{
logger.LogDebug("Tcp_Msg0x0102");
return base.Msg0x0102(request);


+ 0
- 2
src/JT808.DotNetty.Client/JT808TcpClient.cs Visa fil

@@ -56,7 +56,6 @@ namespace JT808.DotNetty.Client
channel.Pipeline.AddLast("jt808TcpClientConnection", new JT808TcpClientConnectionHandler(this));
channel.Pipeline.AddLast("jt808TcpService", new JT808TcpClientHandler(this));
}));
clientChannel = bootstrap.ConnectAsync(IPAddress.Parse(DeviceConfig.TcpHost), DeviceConfig.TcpPort).Result;
}

@@ -79,7 +78,6 @@ namespace JT808.DotNetty.Client
}
if (disposing)
{

// 清理托管资源
group.ShutdownGracefullyAsync(TimeSpan.FromMilliseconds(100), TimeSpan.FromSeconds(1));
}


+ 52
- 0
src/JT808.DotNetty.Core/Codecs/JT808TcpEncoder.cs Visa fil

@@ -0,0 +1,52 @@
using DotNetty.Buffers;
using DotNetty.Codecs;
using JT808.Protocol;
using DotNetty.Transport.Channels;
using JT808.DotNetty.Core.Interfaces;
using Microsoft.Extensions.Logging;
using JT808.DotNetty.Core.Services;

namespace JT808.DotNetty.Core.Codecs
{
/// <summary>
/// tcp统一下发出口
/// </summary>
public class JT808TcpEncoder : MessageToByteEncoder<IJT808Reply>
{
private readonly ILogger<JT808TcpEncoder> logger;

private readonly JT808TrafficService jT808TrafficService;

public JT808TcpEncoder(ILoggerFactory loggerFactory, JT808TrafficServiceFactory jT808TrafficServiceFactory)
{
logger = loggerFactory.CreateLogger<JT808TcpEncoder>();
this.jT808TrafficService = jT808TrafficServiceFactory.Create(Core.Enums.JT808ModeType.Tcp);
}

protected override void Encode(IChannelHandlerContext context, IJT808Reply message, IByteBuffer output)
{
if (message.Package != null)
{
try
{
var sendData = JT808Serializer.Serialize(message.Package, message.MinBufferSize);
jT808TrafficService.SendSize(sendData.Length);
output.WriteBytes(Unpooled.WrappedBuffer(sendData));
}
catch (JT808.Protocol.Exceptions.JT808Exception ex)
{
logger.LogError(ex, context.Channel.Id.AsShortText());
}
catch (System.Exception ex)
{
logger.LogError(ex, context.Channel.Id.AsShortText());
}
}
else if (message.HexData != null)
{
jT808TrafficService.SendSize(message.HexData.Length);
output.WriteBytes(Unpooled.WrappedBuffer(message.HexData));
}
}
}
}

+ 11
- 10
src/JT808.DotNetty.Core/Handlers/JT808MsgIdTcpHandlerBase.cs Visa fil

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using JT808.DotNetty.Core.Interfaces;
using JT808.DotNetty.Core.Metadata;
using JT808.Protocol.Enums;
using JT808.Protocol.Extensions;
@@ -24,7 +25,7 @@ namespace JT808.DotNetty.Core.Handlers
protected JT808MsgIdTcpHandlerBase(JT808TcpSessionManager sessionManager)
{
this.sessionManager = sessionManager;
HandlerDict = new Dictionary<ushort, Func<JT808Request, JT808Response>>
HandlerDict = new Dictionary<ushort, Func<JT808Request, IJT808Reply>>
{
{JT808MsgId.终端通用应答.ToUInt16Value(), Msg0x0001},
{JT808MsgId.终端鉴权.ToUInt16Value(), Msg0x0102},
@@ -37,7 +38,7 @@ namespace JT808.DotNetty.Core.Handlers
};
}

public Dictionary<ushort, Func<JT808Request, JT808Response>> HandlerDict { get; protected set; }
public Dictionary<ushort, Func<JT808Request, IJT808Reply>> HandlerDict { get; protected set; }
/// <summary>
/// 终端通用应答
/// 平台无需回复
@@ -45,7 +46,7 @@ namespace JT808.DotNetty.Core.Handlers
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public virtual JT808Response Msg0x0001(JT808Request request)
public virtual IJT808Reply Msg0x0001(JT808Request request)
{
return null;
}
@@ -54,7 +55,7 @@ namespace JT808.DotNetty.Core.Handlers
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public virtual JT808Response Msg0x0002(JT808Request request)
public virtual IJT808Reply Msg0x0002(JT808Request request)
{
sessionManager.Heartbeat(request.Package.Header.TerminalPhoneNo);
return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001()
@@ -69,7 +70,7 @@ namespace JT808.DotNetty.Core.Handlers
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public virtual JT808Response Msg0x0003(JT808Request request)
public virtual IJT808Reply Msg0x0003(JT808Request request)
{
return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001()
{
@@ -83,7 +84,7 @@ namespace JT808.DotNetty.Core.Handlers
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public virtual JT808Response Msg0x0100(JT808Request request)
public virtual IJT808Reply Msg0x0100(JT808Request request)
{
return new JT808Response(JT808MsgId.终端注册应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8100()
{
@@ -97,7 +98,7 @@ namespace JT808.DotNetty.Core.Handlers
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public virtual JT808Response Msg0x0102(JT808Request request)
public virtual IJT808Reply Msg0x0102(JT808Request request)
{
return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001()
{
@@ -111,7 +112,7 @@ namespace JT808.DotNetty.Core.Handlers
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public virtual JT808Response Msg0x0200(JT808Request request)
public virtual IJT808Reply Msg0x0200(JT808Request request)
{
return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001()
{
@@ -125,7 +126,7 @@ namespace JT808.DotNetty.Core.Handlers
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public virtual JT808Response Msg0x0704(JT808Request request)
public virtual IJT808Reply Msg0x0704(JT808Request request)
{
return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001()
{
@@ -139,7 +140,7 @@ namespace JT808.DotNetty.Core.Handlers
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public virtual JT808Response Msg0x0900(JT808Request request)
public virtual IJT808Reply Msg0x0900(JT808Request request)
{
return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001()
{


+ 11
- 10
src/JT808.DotNetty.Core/Handlers/JT808MsgIdUdpHandlerBase.cs Visa fil

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using JT808.DotNetty.Core.Interfaces;
using JT808.DotNetty.Core.Metadata;
using JT808.Protocol.Enums;
using JT808.Protocol.Extensions;
@@ -24,7 +25,7 @@ namespace JT808.DotNetty.Core.Handlers
protected JT808MsgIdUdpHandlerBase(JT808UdpSessionManager sessionManager)
{
this.sessionManager = sessionManager;
HandlerDict = new Dictionary<ushort, Func<JT808Request, JT808Response>>
HandlerDict = new Dictionary<ushort, Func<JT808Request, IJT808Reply>>
{
{JT808MsgId.终端通用应答.ToUInt16Value(), Msg0x0001},
{JT808MsgId.终端鉴权.ToUInt16Value(), Msg0x0102},
@@ -37,7 +38,7 @@ namespace JT808.DotNetty.Core.Handlers
};
}

public Dictionary<ushort, Func<JT808Request, JT808Response>> HandlerDict { get; protected set; }
public Dictionary<ushort, Func<JT808Request, IJT808Reply>> HandlerDict { get; protected set; }
/// <summary>
/// 终端通用应答
/// 平台无需回复
@@ -45,7 +46,7 @@ namespace JT808.DotNetty.Core.Handlers
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public virtual JT808Response Msg0x0001(JT808Request request)
public virtual IJT808Reply Msg0x0001(JT808Request request)
{
return null;
}
@@ -54,7 +55,7 @@ namespace JT808.DotNetty.Core.Handlers
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public virtual JT808Response Msg0x0002(JT808Request request)
public virtual IJT808Reply Msg0x0002(JT808Request request)
{
sessionManager.Heartbeat(request.Package.Header.TerminalPhoneNo);
return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001()
@@ -69,7 +70,7 @@ namespace JT808.DotNetty.Core.Handlers
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public virtual JT808Response Msg0x0003(JT808Request request)
public virtual IJT808Reply Msg0x0003(JT808Request request)
{
return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001()
{
@@ -83,7 +84,7 @@ namespace JT808.DotNetty.Core.Handlers
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public virtual JT808Response Msg0x0100(JT808Request request)
public virtual IJT808Reply Msg0x0100(JT808Request request)
{
return new JT808Response(JT808MsgId.终端注册应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8100()
{
@@ -97,7 +98,7 @@ namespace JT808.DotNetty.Core.Handlers
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public virtual JT808Response Msg0x0102(JT808Request request)
public virtual IJT808Reply Msg0x0102(JT808Request request)
{
return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001()
{
@@ -112,7 +113,7 @@ namespace JT808.DotNetty.Core.Handlers
/// <param name="reqJT808Package"></param>
/// <param name="ctx"></param>
/// <returns></returns>
public virtual JT808Response Msg0x0200(JT808Request request)
public virtual IJT808Reply Msg0x0200(JT808Request request)
{
return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001()
{
@@ -126,7 +127,7 @@ namespace JT808.DotNetty.Core.Handlers
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public virtual JT808Response Msg0x0704(JT808Request request)
public virtual IJT808Reply Msg0x0704(JT808Request request)
{
return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001()
{
@@ -140,7 +141,7 @@ namespace JT808.DotNetty.Core.Handlers
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public virtual JT808Response Msg0x0900(JT808Request request)
public virtual IJT808Reply Msg0x0900(JT808Request request)
{
return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001()
{


+ 17
- 0
src/JT808.DotNetty.Core/Interfaces/IJT808Reply.cs Visa fil

@@ -0,0 +1,17 @@
using JT808.Protocol;
using System;
using System.Collections.Generic;
using System.Text;

namespace JT808.DotNetty.Core.Interfaces
{
public interface IJT808Reply
{
JT808Package Package { get; set; }
byte[] HexData { get; set; }
/// <summary>
/// 根据实际情况适当调整包的大小
/// </summary>
int MinBufferSize { get; set; }
}
}

+ 1
- 1
src/JT808.DotNetty.Core/JT808.DotNetty.Core.csproj Visa fil

@@ -27,7 +27,7 @@
<PackageReference Include="DotNetty.Codecs" Version="0.6.0" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="2.2.0" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.2" />
<PackageReference Include="Microsoft.Extensions.Options" Version="2.2.0" />
</ItemGroup>



+ 3
- 5
src/JT808.DotNetty.Core/Metadata/JT808Response.cs Visa fil

@@ -1,17 +1,15 @@
using JT808.Protocol;
using JT808.DotNetty.Core.Interfaces;
using JT808.Protocol;
using System;
using System.Collections.Generic;
using System.Reflection;

namespace JT808.DotNetty.Core.Metadata
{
public class JT808Response
public class JT808Response: IJT808Reply
{
public JT808Package Package { get; set; }
public byte[] HexData { get; set; }
/// <summary>
/// 根据实际情况适当调整包的大小
/// </summary>
public int MinBufferSize { get; set; }

public JT808Response()


+ 5
- 21
src/JT808.DotNetty.Core/Services/JT808UnificationTcpSendService.cs Visa fil

@@ -2,6 +2,7 @@
using JT808.DotNetty.Abstractions.Dtos;
using JT808.DotNetty.Core;
using JT808.DotNetty.Core.Interfaces;
using JT808.DotNetty.Core.Metadata;
using JT808.DotNetty.Core.Services;
using System;
using System.Linq;
@@ -12,13 +13,9 @@ namespace JT808.DotNetty.Internal
{
private readonly JT808TcpSessionManager jT808SessionManager;

private readonly JT808TrafficService jT808TrafficService;

public JT808UnificationTcpSendService(
JT808TrafficServiceFactory jT808TrafficServiceFactory,
JT808TcpSessionManager jT808SessionManager)
{
this.jT808TrafficService = jT808TrafficServiceFactory.Create(Core.Enums.JT808ModeType.Tcp);
this.jT808SessionManager = jT808SessionManager;
}

@@ -27,29 +24,16 @@ namespace JT808.DotNetty.Internal
JT808ResultDto<bool> resultDto = new JT808ResultDto<bool>();
try
{
var session = jT808SessionManager.GetSession(terminalPhoneNo);
if (session != null)
if(jT808SessionManager.TrySend(terminalPhoneNo, data, out var message))
{
//判断转发数据是下发不了消息的
if (jT808SessionManager.GetAll().Count(c => c.Channel.Id == session.Channel.Id) > 1)
{
resultDto.Code = JT808ResultCode.Ok;
resultDto.Data = false;
resultDto.Message = "not support transmit data send.";
}
else
{
jT808TrafficService.SendSize(data.Length);
session.Channel.WriteAndFlushAsync(Unpooled.WrappedBuffer(data));
resultDto.Code = JT808ResultCode.Ok;
resultDto.Data = true;
}
resultDto.Code = JT808ResultCode.Ok;
resultDto.Data = false;
}
else
{
resultDto.Code = JT808ResultCode.Ok;
resultDto.Data = false;
resultDto.Message = "offline";
resultDto.Message = message;
}
}
catch (Exception ex)


+ 55
- 0
src/JT808.DotNetty.Core/Session/JT808TcpSessionManager.cs Visa fil

@@ -6,6 +6,7 @@ using System.Linq;
using DotNetty.Transport.Channels;
using JT808.DotNetty.Abstractions;
using JT808.DotNetty.Core.Metadata;
using JT808.DotNetty.Core.Interfaces;

namespace JT808.DotNetty.Core
{
@@ -60,6 +61,60 @@ namespace JT808.DotNetty.Core
}
}

public bool TrySend(string terminalPhoneNo, byte[] data, out string message)
{
bool isSuccessed;
var session = GetSession(terminalPhoneNo);
if (session != null)
{
//判断转发数据是下发不了消息的
if (SessionIdDict.Select(s=>s.Value).Count(c => c.Channel.Id == session.Channel.Id) > 1)
{
isSuccessed = false;
message = "not support transmit data send.";
}
else
{
session.Channel.WriteAndFlushAsync(new JT808Response(data));
isSuccessed = true;
message = "";
}
}
else
{
isSuccessed = false;
message = "offline";
}
return isSuccessed;
}

public bool TrySend(string terminalPhoneNo, IJT808Reply reply, out string message)
{
bool isSuccessed;
var session = GetSession(terminalPhoneNo);
if (session != null)
{
//判断转发数据是下发不了消息的
if (SessionIdDict.Select(s => s.Value).Count(c => c.Channel.Id == session.Channel.Id) > 1)
{
isSuccessed = false;
message = "not support transmit data send.";
}
else
{
session.Channel.WriteAndFlushAsync(reply);
isSuccessed = true;
message = "";
}
}
else
{
isSuccessed = false;
message = "offline";
}
return isSuccessed;
}

public void TryAdd(string terminalPhoneNo,IChannel channel)
{
// 解决了设备号跟通道绑定到一起,不需要用到通道本身的SessionId


+ 15
- 6
src/JT808.DotNetty.Tcp/Handlers/JT808TcpServerHandler.cs Visa fil

@@ -8,6 +8,7 @@ using Microsoft.Extensions.Logging;
using JT808.DotNetty.Core.Handlers;
using JT808.DotNetty.Core.Services;
using JT808.DotNetty.Core.Metadata;
using JT808.DotNetty.Core.Interfaces;

namespace JT808.DotNetty.Tcp.Handlers
{
@@ -30,6 +31,8 @@ namespace JT808.DotNetty.Tcp.Handlers

private readonly ILogger<JT808TcpServerHandler> logger;

private readonly ILogger unknownLogger;

public JT808TcpServerHandler(
JT808TrafficServiceFactory jT808TrafficServiceFactory,
ILoggerFactory loggerFactory,
@@ -46,6 +49,7 @@ namespace JT808.DotNetty.Tcp.Handlers
this.jT808SourcePackageDispatcher = jT808SourcePackageDispatcher;
this.jT808AtomicCounterService = jT808AtomicCounterServiceFactory.Create(Core.Enums.JT808ModeType.Tcp);
logger = loggerFactory.CreateLogger<JT808TcpServerHandler>();
unknownLogger = loggerFactory.CreateLogger("tcp_unknown_msgid");
}


@@ -65,20 +69,25 @@ namespace JT808.DotNetty.Tcp.Handlers
logger.LogDebug("accept package success count<<<" + jT808AtomicCounterService.MsgSuccessCount.ToString());
}
jT808SessionManager.TryAdd(jT808HeaderPackage.Header.TerminalPhoneNo,ctx.Channel);
Func<JT808Request, JT808Response> handlerFunc;
if (handler.HandlerDict.TryGetValue(jT808HeaderPackage.Header.MsgId, out handlerFunc))
if (handler.HandlerDict.TryGetValue(jT808HeaderPackage.Header.MsgId, out var handlerFunc))
{
JT808Response jT808Response = handlerFunc(new JT808Request(jT808HeaderPackage, msg));
IJT808Reply jT808Response = handlerFunc(new JT808Request(jT808HeaderPackage, msg));
if (jT808Response != null)
{
if (!jT808TransmitAddressFilterService.ContainsKey(ctx.Channel.RemoteAddress))
{
var sendData = JT808Serializer.Serialize(jT808Response.Package, jT808Response.MinBufferSize);
jT808TrafficService.SendSize(sendData.Length);
ctx.WriteAndFlushAsync(Unpooled.WrappedBuffer(sendData));
ctx.WriteAndFlushAsync(jT808Response);
}
}
}
else
{
//未知的消息类型已日志形式输出
if (unknownLogger.IsEnabled(LogLevel.Debug))
{
unknownLogger.LogDebug(ByteBufferUtil.HexDump(msg));
}
}
}
catch (JT808.Protocol.Exceptions.JT808Exception ex)
{


+ 1
- 0
src/JT808.DotNetty.Tcp/JT808TcpDotnettyExtensions.cs Visa fil

@@ -24,6 +24,7 @@ namespace JT808.DotNetty.Tcp
serviceDescriptors.TryAddSingleton<JT808TransmitAddressFilterService>();
serviceDescriptors.TryAddSingleton<JT808MsgIdTcpHandlerBase, JT808MsgIdDefaultTcpHandler>();
serviceDescriptors.TryAddScoped<JT808TcpConnectionHandler>();
serviceDescriptors.TryAddScoped<JT808TcpEncoder>();
serviceDescriptors.TryAddScoped<JT808TcpDecoder>();
serviceDescriptors.TryAddScoped<JT808TcpServerHandler>();
serviceDescriptors.AddHostedService<JT808TcpAtomicCouterResetDailyJob>();


+ 5
- 4
src/JT808.DotNetty.Tcp/JT808TcpServerHost.cs Visa fil

@@ -65,15 +65,16 @@ namespace JT808.DotNetty.Tcp
IChannelPipeline pipeline = channel.Pipeline;
using (var scope = serviceProvider.CreateScope())
{
channel.Pipeline.AddLast("jt808TcpBuffer", new DelimiterBasedFrameDecoder(int.MaxValue,
Unpooled.CopiedBuffer(new byte[] { JT808.Protocol.JT808Package.BeginFlag }),
Unpooled.CopiedBuffer(new byte[] { JT808.Protocol.JT808Package.EndFlag })));
channel.Pipeline.AddLast("jt808TcpDecode", scope.ServiceProvider.GetRequiredService<JT808TcpDecoder>());
channel.Pipeline.AddLast("jt808TcpEncode", scope.ServiceProvider.GetRequiredService<JT808TcpEncoder>());
channel.Pipeline.AddLast("systemIdleState", new IdleStateHandler(
configuration.ReaderIdleTimeSeconds,
configuration.WriterIdleTimeSeconds,
configuration.AllIdleTimeSeconds));
channel.Pipeline.AddLast("jt808TcpConnection", scope.ServiceProvider.GetRequiredService<JT808TcpConnectionHandler>());
channel.Pipeline.AddLast("jt808TcpBuffer", new DelimiterBasedFrameDecoder(int.MaxValue,
Unpooled.CopiedBuffer(new byte[] { JT808.Protocol.JT808Package.BeginFlag }),
Unpooled.CopiedBuffer(new byte[] { JT808.Protocol.JT808Package.EndFlag })));
channel.Pipeline.AddLast("jt808TcpDecode", scope.ServiceProvider.GetRequiredService<JT808TcpDecoder>());
channel.Pipeline.AddLast("jt808TcpService", scope.ServiceProvider.GetRequiredService<JT808TcpServerHandler>());
}
}));


+ 2
- 1
src/JT808.DotNetty.Tests/JT808.DotNetty.Hosting/Handlers/JT808MsgIdTcpCustomHandler.cs Visa fil

@@ -1,5 +1,6 @@
using JT808.DotNetty.Core;
using JT808.DotNetty.Core.Handlers;
using JT808.DotNetty.Core.Interfaces;
using JT808.DotNetty.Core.Metadata;
using Microsoft.Extensions.Logging;
using System;
@@ -19,7 +20,7 @@ namespace JT808.DotNetty.Hosting.Handlers

private readonly ILogger<JT808MsgIdTcpCustomHandler> logger;

public override JT808Response Msg0x0200(JT808Request request)
public override IJT808Reply Msg0x0200(JT808Request request)
{
logger.LogDebug("Tcp_Msg0x0200");
return base.Msg0x0200(request);


+ 2
- 1
src/JT808.DotNetty.Tests/JT808.DotNetty.Hosting/Handlers/JT808MsgIdUdpCustomHandler.cs Visa fil

@@ -1,5 +1,6 @@
using JT808.DotNetty.Core;
using JT808.DotNetty.Core.Handlers;
using JT808.DotNetty.Core.Interfaces;
using JT808.DotNetty.Core.Metadata;
using Microsoft.Extensions.Logging;
using System;
@@ -19,7 +20,7 @@ namespace JT808.DotNetty.Hosting.Handlers
private readonly ILogger<JT808MsgIdUdpCustomHandler> logger;

public override JT808Response Msg0x0200(JT808Request request)
public override IJT808Reply Msg0x0200(JT808Request request)
{
logger.LogDebug("Udp_Msg0x0200");
return base.Msg0x0200(request);


+ 3
- 3
src/JT808.DotNetty.Udp/Handlers/JT808UdpServerHandler.cs Visa fil

@@ -10,6 +10,7 @@ using JT808.DotNetty.Core.Services;
using JT808.DotNetty.Core;
using JT808.DotNetty.Core.Handlers;
using System.Threading.Tasks;
using JT808.DotNetty.Core.Interfaces;

namespace JT808.DotNetty.Udp.Handlers
{
@@ -62,10 +63,9 @@ namespace JT808.DotNetty.Udp.Handlers
{
logger.LogDebug("accept package success count<<<" + jT808AtomicCounterService.MsgSuccessCount.ToString());
}
Func<JT808Request, JT808Response> handlerFunc;
if (handler.HandlerDict.TryGetValue(jT808HeaderPackage.Header.MsgId, out handlerFunc))
if (handler.HandlerDict.TryGetValue(jT808HeaderPackage.Header.MsgId, out var handlerFunc))
{
JT808Response jT808Response = handlerFunc(new JT808Request(jT808HeaderPackage, msg.Buffer));
IJT808Reply jT808Response = handlerFunc(new JT808Request(jT808HeaderPackage, msg.Buffer));
if (jT808Response != null)
{
var sendData = JT808Serializer.Serialize(jT808Response.Package, jT808Response.MinBufferSize);


+ 1
- 1
src/JT808.DotNetty.WebApi/JT808WebAPIServerHost.cs Visa fil

@@ -62,7 +62,7 @@ namespace JT808.DotNetty.WebApi
pipeline.AddLast("http_encoder", new HttpResponseEncoder());
pipeline.AddLast("http_decoder", new HttpRequestDecoder(4096, 8192, 8192, false));
//将多个消息转换为单一的request或者response对象 =>IFullHttpRequest
pipeline.AddLast("http_aggregator", new HttpObjectAggregator(65536));
pipeline.AddLast("http_aggregator", new HttpObjectAggregator(int.MaxValue));
pipeline.AddLast("http_jt808webapihandler", scope.ServiceProvider.GetRequiredService<JT808WebAPIServerHandler>());
}
}));


+ 4
- 4
src/JT808.DotNetty.sln Visa fil

@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28307.168
# Visual Studio Version 16
VisualStudioVersion = 16.0.28922.388
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{B5A80356-5AF6-449F-9D8B-3C1BBB9D2443}"
EndProject
@@ -35,9 +35,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.Client", "JT
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "simples", "simples", "{2459FB59-8A33-49A4-ADBC-A0B12C5886A6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JT808.DotNetty.SimpleClient", "..\simples\JT808.DotNetty.SimpleClient\JT808.DotNetty.SimpleClient.csproj", "{E6F61CE8-BFB4-4946-A0D3-AECCE77824E5}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.SimpleClient", "..\simples\JT808.DotNetty.SimpleClient\JT808.DotNetty.SimpleClient.csproj", "{E6F61CE8-BFB4-4946-A0D3-AECCE77824E5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JT808.DotNetty.SimpleServer", "..\simples\JT808.DotNetty.SimpleServer\JT808.DotNetty.SimpleServer.csproj", "{CCE6AEFB-1AB0-4BD9-8EA2-8B4CDD097E88}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.SimpleServer", "..\simples\JT808.DotNetty.SimpleServer\JT808.DotNetty.SimpleServer.csproj", "{CCE6AEFB-1AB0-4BD9-8EA2-8B4CDD097E88}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution


Laddar…
Avbryt
Spara