AckMessageOut.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using Edge.Core.Parser.BinaryParser.Attributes;
  2. using System.Collections.Generic;
  3. namespace PetroChinaOnlineWatchPlugin.MessageEntity.Outgoing
  4. {
  5. public class IfsfMessageAckOut
  6. {
  7. [Format(1, EncodingType.BIN, -9890)]
  8. public byte DataIdentifier { get; set; }
  9. [Format(1, EncodingType.BIN, -9880)]
  10. [Range(0, 7, "Data ack must range in 0 to 7")]
  11. public byte DataAck { get; set; }
  12. public override string ToString()
  13. {
  14. return $"{DataIdentifier} {DataAck}";
  15. }
  16. }
  17. public class AckMessageOut : MessageBase
  18. {
  19. [Format(2, EncodingType.BIN, -9930)]
  20. public int MessageLength { get { return 1 + DatabaseAddress.Count + 1 + (AckList == null ? 0 : AckList.Count * 2); } }
  21. [Format(1, EncodingType.BIN, -9920)]
  22. public int DatabaseAddressLength { get { return DatabaseAddress.Count; } }
  23. [EnumerableFormat("%cascade", -9910)]
  24. public List<byte> DatabaseAddress { get; set; }
  25. [Format(1, EncodingType.BIN, -9900)]
  26. [Range(0, 9, "Message ack must range in 0 to 9")]
  27. public byte MessageAck { get; set; }
  28. [EnumerableFormat("%cascade", -9890)]
  29. public List<IfsfMessageAckOut> AckList { get; set; }
  30. public AckMessageOut()
  31. {
  32. base.MessageCode = MessageCode.IFSF_MESSAGE_CODE_APPLICATION;
  33. base.MessageType = MessageType.IFSF_MESSAGE_TYPE_ACK;
  34. }
  35. public override string ToString()
  36. {
  37. string dbAddress = string.Empty;
  38. foreach (byte ad in DatabaseAddress)
  39. { dbAddress += " " + ad.ToString(); }
  40. string akList = string.Empty;
  41. foreach (var ak in AckList)
  42. { akList += " " + ak.ToString(); }
  43. return $"{MessageLength} {DatabaseAddressLength} {dbAddress} {akList}";
  44. }
  45. }
  46. }