using Edge.Core.Parser.BinaryParser.Attributes; using System; using System.Collections.Generic; namespace PetroChinaOnlineWatchPlugin.MessageEntity.Outgoing { public class AnswerWriteUnsolicitedMessageOut : MessageBase { //《加油站物联网设备集成规范》消息长度不应大于228字节 [Format(2, EncodingType.BIN, -9930)] public int MessageLength { get { int length = 1 + DatabaseAddress.Count; foreach (var dt in DataList) { length += 2 + dt.DataLength; } return length; } } [Format(1, EncodingType.BIN, -9920)] public int DatabaseAddressLength { get { return DatabaseAddress.Count; } } [EnumerableFormat("%cascade", -9910)] public List DatabaseAddress { get; set; } [EnumerableFormat("%cascade", -9900)] public List DataList { get; set; } public AnswerWriteUnsolicitedMessageOut(AppConfigV1 appConfig, byte dbAddress, List dataList) { RecipientSubnet = appConfig.RemoteSubnet; RecipientNode = appConfig.RemoteNode; OriginatorSubnet = appConfig.LocalSubnet; OriginatorNode = appConfig.LocalNode; MessageCode = MessageCode.IFSF_MESSAGE_CODE_APPLICATION; MessageType = MessageType.IFSF_MESSAGE_TYPE_UNSOLICITED_WITHOUT_ACK; MessageToken = (byte)(new Random().Next(0, 0x1F)); //ONLINE_MONITOR_DAT 07H DatabaseAddress = new List { 0x07, dbAddress }; DataList = dataList; } public AnswerWriteUnsolicitedMessageOut(AppConfigV1 appConfig, byte messageToken, List dbAddress, List dataList) { RecipientSubnet = appConfig.RemoteSubnet; RecipientNode = appConfig.RemoteNode; OriginatorSubnet = appConfig.LocalSubnet; OriginatorNode = appConfig.LocalNode; MessageCode = MessageCode.IFSF_MESSAGE_CODE_APPLICATION; MessageType = MessageType.IFSF_MESSAGE_TYPE_ANSWER; MessageToken = messageToken; DatabaseAddress = dbAddress; DataList = dataList; } public override string ToString() { string dbAddress = string.Empty; foreach (byte ad in DatabaseAddress) { dbAddress += " " + ad.ToString(); } string dtList = string.Empty; foreach (var ad in DataList) { dtList += " " + ad.ToString(); } return $"{MessageLength} {DatabaseAddressLength}{dbAddress} {dtList}"; } } }