using DotNetty.Buffers;
using DotNetty.Transport.Channels;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using DotNetty.Common.Utilities;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System.Threading;
using JT809Netty.Core.ServiceHandlers;
using JT809.Protocol;
using JT809.Protocol.JT809Exceptions;
namespace JT809Netty.Core.Handlers
{
///
/// 下级平台主链路
///
public class JT809DownMasterLinkServiceHandler : ChannelHandlerAdapter
{
private readonly ILogger logger;
private readonly JT809DownMasterLinkBusinessTypeHandler jT809DownMasterLinkBusinessTypeHandler;
public JT809DownMasterLinkServiceHandler(
JT809DownMasterLinkBusinessTypeHandler jT809DownMasterLinkBusinessTypeHandler,
ILoggerFactory loggerFactory)
{
this.jT809DownMasterLinkBusinessTypeHandler = jT809DownMasterLinkBusinessTypeHandler;
logger = loggerFactory.CreateLogger();
}
public override void ChannelRead(IChannelHandlerContext context, object message)
{
var jT809Package = (JT809Package)message;
string receive = string.Empty;
try
{
if (logger.IsEnabled(LogLevel.Debug))
logger.LogDebug(JsonConvert.SerializeObject(jT809Package));
if (jT809DownMasterLinkBusinessTypeHandler.ResponseHandlerDict.TryGetValue(jT809Package.Header.BusinessType,out var action))
{
action(jT809Package, context);
}
}
catch (JT809Exception ex)
{
if (logger.IsEnabled(LogLevel.Error))
logger.LogError(ex, "JT809Exception receive<<<" + receive);
}
catch (Exception ex)
{
if (logger.IsEnabled(LogLevel.Error))
logger.LogError(ex, "Exception receive<<<" + receive);
}
}
public override void ChannelReadComplete(IChannelHandlerContext context) => context.Flush();
}
}