using DotNetty.Buffers; using DotNetty.Codecs; using JT808.Protocol; using DotNetty.Transport.Channels; using JT808.DotNetty.Core.Interfaces; using Microsoft.Extensions.Logging; using JT808.Protocol.Interfaces; namespace JT808.DotNetty.Core.Codecs { /// /// tcp统一下发出口 /// public class JT808TcpEncoder : MessageToByteEncoder { private readonly ILogger logger; private readonly JT808Serializer JT808Serializer; public JT808TcpEncoder( IJT808Config jT808Config, ILoggerFactory loggerFactory) { logger = loggerFactory.CreateLogger(); this.JT808Serializer = jT808Config.GetSerializer(); } protected override void Encode(IChannelHandlerContext context, IJT808Reply message, IByteBuffer output) { if (message.Package != null) { try { var sendData = JT808Serializer.Serialize(message.Package, minBufferSize: message.MinBufferSize); 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) { output.WriteBytes(Unpooled.WrappedBuffer(message.HexData)); } } } }