using CommonExtend; using CommonModel; using DotNetty.Buffers; using DotNetty.Codecs; using DotNetty.Transport.Channels; using LanShengModel; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LanShengService.Tcp { public class EncoderHandler : MessageToByteEncoder> { protected override void Encode(IChannelHandlerContext context, TcpDataLog message, IByteBuffer output) { List Temp = new List(); Temp.AddRange(message.Frame_START!.HexString2Byte().BytePadLeft(2)); Temp.AddRange(((int)message.Frame_number!).Int2Byte().BytePadLeft(2)); Temp.AddRange(Encoding.ASCII.GetBytes(message.DTU_ID!).BytePadLeft(17)); Temp.AddRange(message.Msg_ID!.HexString2Byte().BytePadLeft(2)); switch (message.Msg_ID) { case "1104": Temp.AddRange(((int)message.Content!.Version!).Int2Byte().BytePadLeft(1)); Temp.AddRange(((int)message.Content!.DataTick!).Int2Byte().BytePadLeft(2)); int[] Data1 = new int[] { (int)message.Content!.Data27_B7!, (int)message.Content!.Data27_B6!, (int)message.Content!.Data27_B5!, (int)message.Content!.Data27_B4!, (int)message.Content!.Data27_B3!, 0, 0, (int)message.Content!.Data27_B0!, }; Temp.AddRange(Data1.BitArray2Byte()); int[] Data2 = new int[] { (int)message.Content!.Data23!, (int)message.Content!.Data20!, (int)message.Content!.Data19!, (int)message.Content!.Data18!, ((int)message.Content!.Data16_B2!).Int2Bit(2)[1], ((int)message.Content!.Data16_B2!).Int2Bit(2)[0], 0, 0 }; Temp.AddRange(Data2.BitArray2Byte()); Temp.AddRange(((int)message.Content.Data25_B4!).Int2Byte().BytePadLeft(1)); Temp.AddRange(((int)message.Content.Data25_B0!).Int2Byte().BytePadLeft(1)); Temp.AddRange(((int)message.Content.Data26_B4!).Int2Byte().BytePadLeft(1)); Temp.AddRange(((int)message.Content.Data26_B0!).Int2Byte().BytePadLeft(1)); Temp.AddRange(((int)message.Content.UpdateTag!).Int2Byte().BytePadLeft(1)); var ConnectByte = Encoding.ASCII.GetBytes(message.Content.ConnectString!); message.Content.ConnectStrLength = message.Content.ConnectString!.Length; Temp.AddRange(((int)message.Content.ConnectStrLength!).Int2Byte().BytePadLeft(1)); Temp.AddRange(ConnectByte); break; case "1107": Temp.AddRange(((int)message.Content!.UVersion!).Int2Byte().BytePadLeft(2)); var FtpUrlByte = Encoding.ASCII.GetBytes(message.Content.FtpUrl!); message.Content.FtpLength = message.Content.FtpUrl!.Length; Temp.AddRange(((int)message.Content.FtpLength!).Int2Byte().BytePadLeft(1)); Temp.AddRange(FtpUrlByte); var FtpUserByte = Encoding.ASCII.GetBytes(message.Content.UserPwd!); message.Content.UserLength = message.Content.UserPwd!.Length; Temp.AddRange(((int)message.Content.UserLength!).Int2Byte().BytePadLeft(1)); Temp.AddRange(FtpUserByte); var BinUrlByte = Encoding.ASCII.GetBytes(message.Content.BinUrl!); message.Content.BinLength = message.Content.BinUrl!.Length; Temp.AddRange(((int)message.Content.BinLength!).Int2Byte().BytePadLeft(1)); Temp.AddRange(BinUrlByte); Temp.AddRange(((int)message.Content!.BinSize!).Int2Byte().BytePadLeft(3)); Temp.AddRange(((int)message.Content!.UpdateSpan!).Int2Byte().BytePadLeft(1)); break; default: break; } message.Frame_Length = Temp.Count + 6; Temp.InsertRange(2, ((int)message.Frame_Length!).Int2Byte().BytePadLeft(2)); message.Checksum = Temp.ToArray().Byte2HexSum(); Temp.AddRange(((int)message.Checksum!).Int2Byte().BytePadLeft(2)); Temp.AddRange(message.Frame_END!.HexString2Byte().BytePadLeft(2)); output.WriteBytes(Temp.ToArray()); } } }