using Edge.Core.Parser.BinaryParser.Attributes; using System.Collections.Generic; namespace PetroChinaOnlineWatchPlugin.MessageEntity.Outgoing { public class IfsfMessageAckOut { [Format(1, EncodingType.BIN, -9890)] public byte DataIdentifier { get; set; } [Format(1, EncodingType.BIN, -9880)] [Range(0, 7, "Data ack must range in 0 to 7")] public byte DataAck { get; set; } public override string ToString() { return $"{DataIdentifier} {DataAck}"; } } public class AckMessageOut : MessageBase { [Format(2, EncodingType.BIN, -9930)] public int MessageLength { get { return 1 + DatabaseAddress.Count + 1 + (AckList == null ? 0 : AckList.Count * 2); } } [Format(1, EncodingType.BIN, -9920)] public int DatabaseAddressLength { get { return DatabaseAddress.Count; } } [EnumerableFormat("%cascade", -9910)] public List DatabaseAddress { get; set; } [Format(1, EncodingType.BIN, -9900)] [Range(0, 9, "Message ack must range in 0 to 9")] public byte MessageAck { get; set; } [EnumerableFormat("%cascade", -9890)] public List AckList { get; set; } public AckMessageOut() { base.MessageCode = MessageCode.IFSF_MESSAGE_CODE_APPLICATION; base.MessageType = MessageType.IFSF_MESSAGE_TYPE_ACK; } public override string ToString() { string dbAddress = string.Empty; foreach (byte ad in DatabaseAddress) { dbAddress += " " + ad.ToString(); } string akList = string.Empty; foreach (var ak in AckList) { akList += " " + ak.ToString(); } return $"{MessageLength} {DatabaseAddressLength} {dbAddress} {akList}"; } } }