Files
Web_CRICS_Server_VS2010_Prod/RCUHost/Implement/EnergySavingModeReceiver.cs
2025-12-11 09:17:16 +08:00

98 lines
2.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using Common;
using Dao;
using Domain;
using RCUHost.Protocols;
namespace RCUHost.Implement
{
public class EnergySavingModeReceiver : GenericReceiverBase, IEnergySavingModeReceiver
{
public void ApplyEnergySavingMode(Model model, Host host)
{
byte[] data = CreateEnergySavingModeRequestPacket(model);
Send(data, host.HostNumber, host.MAC);// host.IP, host.Port);
}
public override CommandType CommandType
{
get { return CommandType.EnergySavingMode; }
}
#region Private Methods
private byte[] CreateEnergySavingModeRequestPacket(Model model)
{
SystemHeader systemHeader = CreateSystemHeader();
EnergySavingModePacket energySavingModePacket = CreateEnergySavingModePacket(model);
int size = StructConverter.SizeOf(systemHeader) + StructConverter.SizeOf(energySavingModePacket);
systemHeader.FrameLength = (ushort)size;
byte[] buffer = new byte[size];
byte[] src1 = StructConverter.StructToBytes(systemHeader);
Array.Copy(src1, 0, buffer, 0, src1.Length);
byte[] src3 = StructConverter.StructToBytes(energySavingModePacket);
Array.Copy(src3, 0, buffer, src1.Length, src3.Length);
return buffer;
}
private EnergySavingModePacket CreateEnergySavingModePacket(Model model)
{
EnergySavingModePacket packet = new EnergySavingModePacket();
packet.CorrectedTemp = Convert.ToByte(model.CorrectedTemp);
packet.FanRunStatus = Convert.ToByte(model.FanRunStatus ? 1 : 0);
packet.ExhaustFanStatus = Convert.ToByte(model.ExhaustFanStatus);
packet.ExhaustFanTime = Convert.ToByte(model.ExhausFanTime);
packet.InfraredDelayPO = Convert.ToByte(model.InfraredDelayPO);
packet.DoorDelayPO = Convert.ToByte(model.DoorDelayPO);
packet.PullCardDelayPO = Convert.ToByte(model.PullCardDelayPO);
ModelDetail detail1 = model.Details.FirstOrDefault(r => r.ModelStatus == "插卡时");
ModelDetail detail2 = model.Details.FirstOrDefault(r => r.ModelStatus == "拔卡时");
ModelDetail detail3 = model.Details.FirstOrDefault(r => r.ModelStatus == "待租时");
ModelDetail detail4 = model.Details.FirstOrDefault(r => r.ModelStatus == "停租时");
packet.FengJiStatus = new FengJiStatus[4]
{
CreateFengJiStatus(detail1),
CreateFengJiStatus(detail2),
CreateFengJiStatus(detail3),
CreateFengJiStatus(detail4)
};
return packet;
}
private FengJiStatus CreateFengJiStatus(ModelDetail detail)
{
return new FengJiStatus
{
OnOff = detail.OnOff,
Type = Convert.ToByte(detail.ModelType),
Speed = Convert.ToByte(detail.Speed),
SummerTemp = Convert.ToByte(detail.SummerTemp),
WinterTemp = Convert.ToByte(detail.WinterTemp),
TimingControl = Convert.ToByte(detail.TimingControl ? 1 : 0),
Timer = Convert.ToByte(detail.Timer),
AllowElectric = Convert.ToByte(detail.AllowElectric ? 1 : 0),
};
}
#endregion
}
}