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.
73 lines
3.5 KiB
C#
73 lines
3.5 KiB
C#
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;
|
|
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());
|
|
}
|
|
}
|
|
}
|