You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
4.7 KiB
C#

9 months ago
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<TcpDataLog<DeviceData>>
{
protected override void Encode(IChannelHandlerContext context, TcpDataLog<DeviceData> message, IByteBuffer output)
{
List<byte> Temp = new List<byte>();
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;
9 months ago
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());
}
}
}