MqttMsgContext.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. /*
  2. Copyright (c) 2013, 2014 Paolo Patierno
  3. All rights reserved. This program and the accompanying materials
  4. are made available under the terms of the Eclipse Public License v1.0
  5. and Eclipse Distribution License v1.0 which accompany this distribution.
  6. The Eclipse Public License is available at
  7. http://www.eclipse.org/legal/epl-v10.html
  8. and the Eclipse Distribution License is available at
  9. http://www.eclipse.org/org/documents/edl-v10.php.
  10. Contributors:
  11. Paolo Patierno - initial API and implementation and/or initial documentation
  12. */
  13. namespace M2Mqtt.Messages
  14. {
  15. /// <summary>
  16. /// Context for MQTT message
  17. /// </summary>
  18. public class MqttMsgContext
  19. {
  20. /// <summary>
  21. /// MQTT message
  22. /// </summary>
  23. public MqttMsgBase Message { get; set; }
  24. /// <summary>
  25. /// MQTT message state
  26. /// </summary>
  27. public MqttMsgState State { get; set; }
  28. /// <summary>
  29. /// Flow of the message
  30. /// </summary>
  31. public MqttMsgFlow Flow { get; set; }
  32. /// <summary>
  33. /// Timestamp in ticks (for retry)
  34. /// </summary>
  35. public int Timestamp { get; set; }
  36. /// <summary>
  37. /// Attempt (for retry)
  38. /// </summary>
  39. public int Attempt { get; set; }
  40. /// <summary>
  41. /// Unique key
  42. /// </summary>
  43. public string Key
  44. {
  45. get { return Flow + "_" + Message.MessageId; }
  46. }
  47. }
  48. /// <summary>
  49. /// Flow of the message
  50. /// </summary>
  51. public enum MqttMsgFlow
  52. {
  53. /// <summary>
  54. /// To publish to subscribers
  55. /// </summary>
  56. ToPublish,
  57. /// <summary>
  58. /// To acknowledge to publisher
  59. /// </summary>
  60. ToAcknowledge
  61. }
  62. /// <summary>
  63. /// MQTT message state
  64. /// </summary>
  65. public enum MqttMsgState
  66. {
  67. /// <summary>
  68. /// QOS = 0, Message queued
  69. /// </summary>
  70. QueuedQos0,
  71. /// <summary>
  72. /// QOS = 1, Message queued
  73. /// </summary>
  74. QueuedQos1,
  75. /// <summary>
  76. /// QOS = 2, Message queued
  77. /// </summary>
  78. QueuedQos2,
  79. /// <summary>
  80. /// QOS = 1, PUBLISH sent, wait for PUBACK
  81. /// </summary>
  82. WaitForPuback,
  83. /// <summary>
  84. /// QOS = 2, PUBLISH sent, wait for PUBREC
  85. /// </summary>
  86. WaitForPubrec,
  87. /// <summary>
  88. /// QOS = 2, PUBREC sent, wait for PUBREL
  89. /// </summary>
  90. WaitForPubrel,
  91. /// <summary>
  92. /// QOS = 2, PUBREL sent, wait for PUBCOMP
  93. /// </summary>
  94. WaitForPubcomp,
  95. /// <summary>
  96. /// QOS = 2, start first phase handshake send PUBREC
  97. /// </summary>
  98. SendPubrec,
  99. /// <summary>
  100. /// QOS = 2, start second phase handshake send PUBREL
  101. /// </summary>
  102. SendPubrel,
  103. /// <summary>
  104. /// QOS = 2, end second phase handshake send PUBCOMP
  105. /// </summary>
  106. SendPubcomp,
  107. /// <summary>
  108. /// QOS = 1, PUBLISH received, send PUBACK
  109. /// </summary>
  110. SendPuback,
  111. // [v3.1.1] SUBSCRIBE isn't "officially" QOS = 1
  112. /// <summary>
  113. /// Send SUBSCRIBE message
  114. /// </summary>
  115. SendSubscribe,
  116. // [v3.1.1] UNSUBSCRIBE isn't "officially" QOS = 1
  117. /// <summary>
  118. /// Send UNSUBSCRIBE message
  119. /// </summary>
  120. SendUnsubscribe,
  121. /// <summary>
  122. /// (QOS = 1), SUBSCRIBE sent, wait for SUBACK
  123. /// </summary>
  124. WaitForSuback,
  125. /// <summary>
  126. /// (QOS = 1), UNSUBSCRIBE sent, wait for UNSUBACK
  127. /// </summary>
  128. WaitForUnsuback
  129. }
  130. }