AnswerWriteUnsolicitedMessageOut.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using Edge.Core.Parser.BinaryParser.Attributes;
  2. using System;
  3. using System.Collections.Generic;
  4. namespace PetroChinaOnlineWatchPlugin.MessageEntity.Outgoing
  5. {
  6. public class AnswerWriteUnsolicitedMessageOut : MessageBase
  7. {
  8. //《加油站物联网设备集成规范》消息长度不应大于228字节
  9. [Format(2, EncodingType.BIN, -9930)]
  10. public int MessageLength
  11. {
  12. get
  13. {
  14. int length = 1 + DatabaseAddress.Count;
  15. foreach (var dt in DataList)
  16. { length += 2 + dt.DataLength; }
  17. return length;
  18. }
  19. }
  20. [Format(1, EncodingType.BIN, -9920)]
  21. public int DatabaseAddressLength { get { return DatabaseAddress.Count; } }
  22. [EnumerableFormat("%cascade", -9910)]
  23. public List<byte> DatabaseAddress { get; set; }
  24. [EnumerableFormat("%cascade", -9900)]
  25. public List<IfsfMessageDataOut> DataList { get; set; }
  26. public AnswerWriteUnsolicitedMessageOut(AppConfigV1 appConfig, byte dbAddress, List<IfsfMessageDataOut> dataList)
  27. {
  28. RecipientSubnet = appConfig.RemoteSubnet;
  29. RecipientNode = appConfig.RemoteNode;
  30. OriginatorSubnet = appConfig.LocalSubnet;
  31. OriginatorNode = appConfig.LocalNode;
  32. MessageCode = MessageCode.IFSF_MESSAGE_CODE_APPLICATION;
  33. MessageType = MessageType.IFSF_MESSAGE_TYPE_UNSOLICITED_WITHOUT_ACK;
  34. MessageToken = (byte)(new Random().Next(0, 0x1F));
  35. //ONLINE_MONITOR_DAT 07H
  36. DatabaseAddress = new List<byte> { 0x07, dbAddress };
  37. DataList = dataList;
  38. }
  39. public AnswerWriteUnsolicitedMessageOut(AppConfigV1 appConfig, byte messageToken, List<byte> dbAddress, List<IfsfMessageDataOut> dataList)
  40. {
  41. RecipientSubnet = appConfig.RemoteSubnet;
  42. RecipientNode = appConfig.RemoteNode;
  43. OriginatorSubnet = appConfig.LocalSubnet;
  44. OriginatorNode = appConfig.LocalNode;
  45. MessageCode = MessageCode.IFSF_MESSAGE_CODE_APPLICATION;
  46. MessageType = MessageType.IFSF_MESSAGE_TYPE_ANSWER;
  47. MessageToken = messageToken;
  48. DatabaseAddress = dbAddress;
  49. DataList = dataList;
  50. }
  51. public override string ToString()
  52. {
  53. string dbAddress = string.Empty;
  54. foreach (byte ad in DatabaseAddress)
  55. { dbAddress += " " + ad.ToString(); }
  56. string dtList = string.Empty;
  57. foreach (var ad in DataList)
  58. { dtList += " " + ad.ToString(); }
  59. return $"{MessageLength} {DatabaseAddressLength}{dbAddress} {dtList}";
  60. }
  61. }
  62. }