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; using CommonExtend; using CommonModel; using static Google.Rpc.Context.AttributeContext.Types; namespace LanShengService.Tcp { public class DecoderHandler : ByteToMessageDecoder { protected override void Decode(IChannelHandlerContext context, IByteBuffer input, List output) { var request = new TcpDataLog(); if (!input.HasArray) { return; } while (input.ReadableBytes >= 2) { if (input.ReadHex(1) == "FA") { if (input.ReadHex(1) == "AA") { request.Frame_START = "FAAA"; break; } else { input.SetReaderIndex(input.ReaderIndex - 1); } } } if (request.Frame_START != "FAAA") { return; } int ReadableBytes = input.ReadableBytes + 2; if (ReadableBytes < 4) { input.SetReaderIndex(input.ReaderIndex - 2); return; } request.Frame_Length = input.ReadInt(2); if (ReadableBytes < request.Frame_Length) { input.ResetReaderIndex(); return; } request.Frame_number = input.ReadInt(2); request.DTU_ID = input.ReadString(17, Encoding.ASCII); request.Msg_ID = input.ReadHex(2); IByteBuffer Content = Unpooled.Buffer((int)request.Frame_Length - 25 - 4); input.ReadBytes(Content, (int)request.Frame_Length - 25 - 4); try { request.Content = new DeviceData(); request.Content.Id = request.DTU_ID; request.Content.Status = "online"; request.Content.UpdateDate = DateTime.Now; request.Content.MsgType = request.Msg_ID; switch (request.Msg_ID) { case "1001": case "9104": request.Content.AgreementVersion = Content.ReadInt(1); request.Content.DataTick = Content.ReadInt(2); request.Content.ICCID = Content.ReadString(20, Encoding.ASCII); Content.SkipBytes(4); request.Content.Longitude = Content.ReadString(9, Encoding.ASCII); request.Content.Latitude = Content.ReadString(8, Encoding.ASCII); request.Content.ConnectStrLength = Content.ReadInt(1); request.Content.ConnectString = Content.ReadString((int)request.Content.ConnectStrLength, Encoding.ASCII); break; case "1103": if (request.Content.Id.StartsWith("QC") || request.Content.Id.StartsWith("ZK")) { Decode1103ZK(request.Content, Content); } else { Decode1103RY(request.Content, Content); } break; default: break; } } catch { request.Content = null; } request.Checksum = input.ReadInt(2); request.Frame_END = input.ReadHex(2); request.CreateDate = DateTime.Now; if (request.Frame_END == "BBFB") { output.Add(request); Content.Clear(); input.Clear(); } else { return; } } private void Decode1103RY(DeviceData device, IByteBuffer content) { device.Version = content.ReadInt(1); var Data2 = content.ReadBitArray(); device.Data2_B7 = Data2[0]; device.Data2_B6 = Data2[1]; device.Data2_B5 = Data2[2]; device.Data2_B4 = Data2[3]; device.Data2_B3 = Data2[4]; device.Data2_B2 = Data2[5]; device.Data2_B1 = Data2[6]; device.Data2_B0 = Data2[7]; var Data3 = content.ReadBitArray(); device.Data3_B7 = Data3[0]; device.Data3_B6 = Data3[1]; device.Data3_B5 = Data3[2]; device.Data3_B4 = Data3[3]; device.Data3_B3 = Data3[4]; device.Data3_B2 = Data3[5]; device.Data3_B1 = Data3[6]; device.Data3_B0 = Data3[7]; device.Data4 = content.ReadInt(1); device.Data5 = content.ReadInt(1); device.Data6 = content.ReadInt(1); device.Data7 = content.ReadInt(1); device.Data8 = content.ReadInt(2); device.Data10 = content.ReadInt(1); device.Data11 = content.ReadInt(1); device.Data12 = content.ReadInt(1); device.Data13 = content.ReadInt(1); var Data14 = content.ReadBitArray(); device.Data14_B6 = Convert.ToInt32($"{Data14[1]}{Data14[0]}", 2); device.Data14_B5 = Data14[2]; device.Data14_B4 = Data14[3]; device.Data14_B3 = Data14[4]; device.Data14_B2 = Data14[5]; device.Data14_B1 = Data14[6]; device.Data14_B0 = Data14[7]; var Data15 = content.ReadBitArray(); device.Data15_B6 = Convert.ToInt32($"{Data15[1]}{Data15[0]}", 2); device.Data15_B4 = Convert.ToInt32($"{Data15[3]}{Data15[2]}", 2); device.Data15_B3 = Data15[4]; device.Data15_B2 = Data15[5]; device.Data15_B1 = Data15[6]; device.Data15_B0 = Data15[7]; var Data16 = content.ReadBitArray(); device.Data16_B7 = Data16[0]; device.Data16_B6 = Data16[1]; device.Data16_B5 = Data16[2]; device.Data16_B4 = Data16[3]; device.Data16_B2 = Convert.ToInt32($"{Data16[5]}{Data16[4]}", 2); device.Data16_B1 = Data16[6]; device.Data16_B0 = Data16[7]; device.Data17 = content.ReadInt(1); device.Data18 = content.ReadInt(1); device.Data19 = content.ReadInt(1); device.Data20 = content.ReadInt(1); device.Data21 = content.ReadInt(1); device.Data22 = content.ReadInt(1); device.Data23 = content.ReadInt(1); device.Data24 = content.ReadInt(1); var Data25 = content.ReadBitArray(); device.Data25_B4 = Convert.ToInt32($"{Data25[3]}{Data25[2]}{Data25[1]}{Data25[0]}", 2); device.Data25_B0 = Convert.ToInt32($"{Data25[7]}{Data25[6]}{Data25[5]}{Data25[4]}", 2); var Data26 = content.ReadBitArray(); device.Data26_B4 = Convert.ToInt32($"{Data26[3]}{Data26[2]}{Data26[1]}{Data26[0]}", 2); device.Data26_B0 = Convert.ToInt32($"{Data26[7]}{Data26[6]}{Data26[5]}{Data26[4]}", 2); var Data27 = content.ReadBitArray(); device.Data27_B7 = Data27[0]; device.Data27_B6 = Data27[1]; device.Data27_B5 = Data27[2]; device.Data27_B4 = Data27[3]; device.Data27_B3 = Data27[4]; device.Data27_B0 = Data27[7]; } private void Decode1103ZK(DeviceData device, IByteBuffer content) { device.Version = content.ReadInt(1); var Data2 = content.ReadBitArray(); device.Data2_B7 = Data2[0]; device.Data2_B6 = Data2[1]; device.Data2_B5 = Data2[2]; device.Data2_B4 = Data2[3]; device.Data2_B3 = Data2[4]; device.Data2_B2 = Data2[5]; device.Data2_B1 = Data2[6]; device.Data2_B0 = Data2[7]; var Data3 = content.ReadBitArray(); device.Data3_B7 = Data3[0]; device.Data3_B6 = Data3[1]; device.Data3_B5 = Data3[2]; device.Data3_B4 = Data3[3]; device.Data3_B3 = Data3[4]; device.Data3_B2 = Data3[5]; device.Data3_B1 = Data3[6]; device.Data3_B0 = Data3[7]; device.Data4 = content.ReadInt(1); device.Data5 = content.ReadInt(1); device.Data6 = content.ReadInt(1); device.Data7 = content.ReadInt(1); device.Data8 = content.ReadInt(2); device.Data10 = content.ReadInt(1); device.Data11 = content.ReadInt(1); device.Data12 = content.ReadInt(1); content.SkipBytes(1); var Data14 = content.ReadBitArray(); device.Data14_B6 = Convert.ToInt32($"{Data14[1]}{Data14[0]}", 2); device.Data14_B5 = Data14[2]; device.Data14_B4 = Data14[3]; device.Data14_B3 = Data14[4]; device.Data14_B2 = Data14[5]; device.Data14_B1 = Data14[6]; device.Data14_B0 = Data14[7]; var Data15 = content.ReadBitArray(); device.Data15_B6 = Convert.ToInt32($"{Data15[1]}{Data15[0]}", 2); device.Data15_B4 = Convert.ToInt32($"{Data15[3]}{Data15[2]}", 2); device.Data15_B3 = Data15[4]; device.Data15_B2 = Data15[5]; device.Data15_B1 = Data15[6]; device.Data15_B0 = Data15[7]; var Data16 = content.ReadBitArray(); device.Data16_B7 = Data16[0]; device.Data16_B6 = Data16[1]; device.Data16_B5_N = Data16[2]; device.Data16_B4 = Data16[3]; device.Data16_B2 = Convert.ToInt32($"{Data16[5]}{Data16[4]}", 2); device.Data16_B1 = Data16[6]; device.Data16_B0 = Data16[7]; device.Data17 = content.ReadInt(1); device.Data18 = content.ReadInt(1); var Data19 = content.ReadBitArray(); device.Data19_B7 = Data19[0]; device.Data19_B6 = Data19[1]; device.Data19_B5 = Data19[2]; device.Data19_B4 = Data19[3]; device.Data19_B3 = Data19[4]; device.Data19_B2 = Data19[5]; device.Data19_B1 = Data19[6]; device.Data20 = content.ReadInt(1); device.Data21 = content.ReadInt(1); device.Data22 = content.ReadInt(1); device.Data23 = content.ReadInt(1); device.Data24 = content.ReadInt(1); var Data25 = content.ReadBitArray(); device.Data25_B4 = Convert.ToInt32($"{Data25[3]}{Data25[2]}{Data25[1]}{Data25[0]}", 2); device.Data25_B0 = Convert.ToInt32($"{Data25[7]}{Data25[6]}{Data25[5]}{Data25[4]}", 2); var Data26 = content.ReadBitArray(); device.Data26_B4 = Convert.ToInt32($"{Data26[3]}{Data26[2]}{Data26[1]}{Data26[0]}", 2); device.Data26_B0 = Convert.ToInt32($"{Data26[7]}{Data26[6]}{Data26[5]}{Data26[4]}", 2); var Data27 = content.ReadBitArray(); device.Data27_B7 = Data27[0]; device.Data27_B6 = Data27[1]; device.Data27_B5 = Data27[2]; device.Data27_B4 = Data27[3]; device.Data27_B3 = Data27[4]; var Data28 = content.ReadBitArray(); device.Data28_B7 = Data28[0]; device.Data28_B6 = Data28[1]; device.Data28_B5 = Data28[2]; device.Data28_B4 = Data28[3]; device.Data28_B3 = Data28[4]; device.Data28_B2 = Data28[5]; device.Data28_B1 = Data28[6]; device.Data28_B0 = Data28[7]; var Data29 = content.ReadBitArray(); device.Data29_B6 = Data29[1]; device.Data29_B5 = Data29[2]; device.Data29_B4 = Data29[3]; device.Data29_B3 = Data29[4]; device.Data30 = content.ReadInt(1); device.Data31 = content.ReadInt(1); device.Data32_33 = content.ReadInt(2); device.Data34 = content.ReadInt(1); device.Data35 = content.ReadInt(1); device.Data36 = content.ReadInt(1); device.Data37 = content.ReadInt(1); device.Data38_39 = content.ReadInt(2); device.Data40 = content.ReadInt(1); device.Data41 = content.ReadInt(1); device.Data42_43 = content.ReadInt(2); device.Data44 = content.ReadInt(1); device.Data45_46 = content.ReadInt(2); device.Data47_48 = content.ReadInt(2); device.Data49_50 = content.ReadInt(2); device.Data51_52 = content.ReadInt(2); device.Data53_54 = content.ReadInt(2); device.Data55_56 = content.ReadInt(2); device.Data57_58 = content.ReadInt(2); device.Data59_60 = content.ReadInt(2); device.Data61_62 = content.ReadInt(2); device.Data63_64 = content.ReadInt(2); device.Data65_66 = content.ReadInt(2); var Data67 = content.ReadBitArray(); device.Data67_B7 = Data67[0]; device.Data67_B6 = Data67[1]; device.Data67_B5 = Data67[2]; device.Data67_B4 = Data67[3]; device.Data67_B3 = Data67[4]; device.Data67_B2 = Data67[5]; device.Data67_B1 = Data67[6]; device.Data67_B0 = Data67[7]; var Data68 = content.ReadBitArray(); device.Data68_B7 = Data68[0]; device.Data68_B6 = Data68[1]; device.Data68_B5 = Data68[2]; device.Data68_B4 = Data68[3]; device.Data68_B3 = Data68[4]; device.Data68_B2 = Data68[5]; device.Data68_B1 = Data68[6]; device.Data68_B0 = Data68[7]; var Data69 = content.ReadBitArray(); device.Data69_B7 = Data69[0]; device.Data69_B6 = Data69[1]; device.Data69_B5 = Data69[2]; device.Data69_B4 = Data69[3]; device.Data69_B3 = Data69[4]; device.Data69_B2 = Data69[5]; device.Data69_B1 = Data69[6]; device.Data69_B0 = Data69[7]; var Data70 = content.ReadBitArray(); device.Data70_B7 = Data70[0]; device.Data70_B6 = Data70[1]; device.Data70_B5 = Data70[2]; device.Data70_B4 = Data70[3]; device.Data70_B3 = Data70[4]; device.Data70_B2 = Data70[5]; device.Data70_B1 = Data70[6]; device.Data70_B0 = Data70[7]; var Data71 = content.ReadBitArray(); device.Data71_B7 = Data71[0]; device.Data71_B6 = Data71[1]; device.Data71_B5 = Data71[2]; device.Data71_B4 = Data71[3]; device.Data71_B3 = Data71[4]; device.Data71_B2 = Data71[5]; device.Data71_B1 = Data71[6]; device.Data71_B0 = Data71[7]; var Data72 = content.ReadBitArray(); device.Data72_B7 = Data72[0]; device.Data72_B6 = Data72[1]; device.Data72_B5 = Data72[2]; device.Data72_B4 = Data72[3]; } } }