mqtt_session_state.hpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /*
  2. * Copyright (c) 2017-2023 zhllxt
  3. *
  4. * author : zhllxt
  5. * email : 37792738@qq.com
  6. *
  7. * Distributed under the Boost Software License, Version 1.0. (See accompanying
  8. * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  9. *
  10. * refrenced from : mqtt_cpp/include/mqtt/broker/session_state.hpp
  11. */
  12. #ifndef __ASIO2_MQTT_SESSION_STATE_HPP__
  13. #define __ASIO2_MQTT_SESSION_STATE_HPP__
  14. #if defined(_MSC_VER) && (_MSC_VER >= 1200)
  15. #pragma once
  16. #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
  17. #include <cstdint>
  18. #include <string>
  19. #include <string_view>
  20. #include <type_traits>
  21. #include <unordered_map>
  22. #include <algorithm>
  23. #include <set>
  24. #include <optional>
  25. #include <chrono>
  26. #include <asio2/base/detail/util.hpp>
  27. #include <asio2/mqtt/detail/mqtt_inflight_message.hpp>
  28. #include <asio2/mqtt/detail/mqtt_offline_message.hpp>
  29. #include <asio2/mqtt/detail/mqtt_shared_target.hpp>
  30. namespace asio2::mqtt
  31. {
  32. class session_state
  33. {
  34. public:
  35. session_state()
  36. {
  37. }
  38. ~session_state()
  39. {
  40. }
  41. void clean()
  42. {
  43. //inflight_messages_.clear();
  44. offline_messages_.clear();
  45. qos2_publish_processed_.clear();
  46. //shared_targets_.erase(*this);
  47. //unsubscribe_all();
  48. }
  49. void exactly_once_start(mqtt::two_byte_integer::value_type packet_id)
  50. {
  51. qos2_publish_processed_.insert(packet_id);
  52. }
  53. bool exactly_once_processing(mqtt::two_byte_integer::value_type packet_id) const
  54. {
  55. return qos2_publish_processed_.find(packet_id) != qos2_publish_processed_.end();
  56. }
  57. void exactly_once_finish(mqtt::two_byte_integer::value_type packet_id)
  58. {
  59. qos2_publish_processed_.erase(packet_id);
  60. }
  61. protected:
  62. //std::shared_ptr<asio::steady_timer> will_expiry_timer_;
  63. //std::optional<MQTT_NS::will> will_value_;
  64. //sub_con_map& subs_map_;
  65. //shared_target& shared_targets_;
  66. //con_sp_t con_;
  67. std::string_view client_id_;
  68. std::optional<std::chrono::steady_clock::duration> will_delay_;
  69. std::optional<std::chrono::steady_clock::duration> session_expiry_interval_;
  70. std::shared_ptr<asio::steady_timer> session_expiry_timer_;
  71. //inflight_messages inflight_messages_;
  72. std::set<mqtt::two_byte_integer::value_type> qos2_publish_processed_;
  73. offline_messages<omnode> offline_messages_;
  74. //std::set<sub_con_map::handle> handles_; // to efficient remove
  75. };
  76. }
  77. #endif // !__ASIO2_MQTT_SESSION_STATE_HPP__