| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace HengShan_Pump_TQC_IFSF.MessageEntity
- {
- /// <summary>
- /// overall ack for a message.
- /// </summary>
- public enum MessageAcknowledgeStatus
- {
- ACK_PositiveAcknowledgeDataReceived = 0x00,
- NAK_RecipientNodeNotReachable = 0x01,
- NAK_ApplicationOutOfOrderOrNonExistentOnTheRecipientNode = 0x02,
- NAK_InconsistentMessage_BlockMissing = 0x03,
- NAK_MessageRefused_SomeOfTheDataIsNotAcceptable_DetailedInformationFollows = 0x05,
- NAK_MessageRrefused_UnknownDatabaseAddress_OrIllegalWriteToMultipleDatabaseAddress = 0x06,
- NAK_MessageRefusedReceivingDeviceIsBusy = 0x07,
- NAK_MessageRefusedMessageUnexpected = 0x08,
- NAK_DeviceAlreadyLocked = 0x09
- }
- /// <summary>
- /// specific ack for a dataId within a msg.
- /// </summary>
- public enum MessageDataAcknowledgeStatus
- {
- ACK_PositiveAcknowledgeDataReceived = 0x00,
- NAK_InvalidValue = 0x01,
- NAK_NotWritable = 0x02,
- NAK_CommandRefusedInThatState = 0x03,
- NAK_DataDoesNotExistInThisDevice = 0x04,
- NAK_CommandNotUnderstood = 0x05,
- NAK_CommandNotAccepted = 0x06,
- }
- public class AcknowledgeMessage : IfsfMessage
- {
- public AcknowledgeMessage() { }
- public AcknowledgeMessage(byte recipientSubnet, byte recipientNode,
- byte originatorSubnet, byte originatorNode,
- byte ackForWhichMessageToken,
- byte[] databaseId, MessageAcknowledgeStatus acknowledgeOverallStatus)
- {
- base.RecipientSubnet = recipientSubnet;
- base.RecipientNode = recipientNode;
- base.OriginatorSubnet = originatorSubnet;
- base.OriginatorNode = originatorNode;
- base.MessageCode = MessageCode.IFSF_MESSAGE_CODE_APPLICATION;
- base.MessageType = MessageType.IFSF_MESSAGE_TYPE_ACK;
- base.MessageToken = ackForWhichMessageToken;
- base.DatabaseId = databaseId;
- this.OverallStatus = acknowledgeOverallStatus;
- }
- //public byte[] DatabaseId => base.RawDatabaseData.Skip(base.RawDatabaseData[0]).Take(base.RawDatabaseData[0]).ToArray();
- public MessageAcknowledgeStatus OverallStatus
- {
- get
- {
- var r = Enum.ToObject(typeof(MessageAcknowledgeStatus),
- base.RawDatabaseData.Skip(base.RawDatabaseData[0] + 1).First());
- return (MessageAcknowledgeStatus)r;
- }
- set
- {
- base.RawDatabaseData.Add((byte)value);
- }
- }
- public IEnumerable<Tuple<byte, MessageDataAcknowledgeStatus>> DataIdAcks
- {
- get
- {
- var dataIdsPart = base.RawDatabaseData.Skip(base.RawDatabaseData[0] + 2);
- var results = new List<Tuple<byte, MessageDataAcknowledgeStatus>>();
- int passedPair = 0;
- while (true)
- {
- if (!dataIdsPart.Skip(passedPair * 2).Any()) break;
- byte[] nextPair = dataIdsPart.Skip(passedPair * 2).Take(2).ToArray();
- var r = Enum.ToObject(typeof(MessageDataAcknowledgeStatus),
- nextPair[1]);
- results.Add(
- new Tuple<byte, MessageDataAcknowledgeStatus>(nextPair[0], (MessageDataAcknowledgeStatus)r));
- passedPair++;
- }
- return results;
- }
- }
- public override string ToLogString()
- {
- return base.ToLogString() + ", OverallStatus: " + this.OverallStatus
- + ", detail: "
- + (this.DataIdAcks.Any() ? this.DataIdAcks.Select(d => d.Item1.ToString("X").PadLeft(2, '0') + "-" + d.Item2).Aggregate((acc, n) => acc + "; " + n) : "");
- }
- }
- }
|