aop_suback.hpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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. #ifndef __ASIO2_MQTT_AOP_SUBACK_HPP__
  11. #define __ASIO2_MQTT_AOP_SUBACK_HPP__
  12. #if defined(_MSC_VER) && (_MSC_VER >= 1200)
  13. #pragma once
  14. #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
  15. #include <asio2/base/iopool.hpp>
  16. #include <asio2/base/detail/function_traits.hpp>
  17. #include <asio2/base/detail/util.hpp>
  18. #include <asio2/mqtt/message.hpp>
  19. namespace asio2::detail
  20. {
  21. template<class caller_t, class args_t>
  22. class mqtt_aop_suback
  23. {
  24. friend caller_t;
  25. protected:
  26. // server or client
  27. template<class Message>
  28. inline void _before_suback_callback(
  29. error_code& ec, std::shared_ptr<caller_t>& caller_ptr, caller_t* caller, mqtt::message& om,
  30. Message& msg)
  31. {
  32. detail::ignore_unused(ec, caller_ptr, caller, om, msg);
  33. using message_type [[maybe_unused]] = typename detail::remove_cvref_t<Message>;
  34. if (msg.reason_codes().count() == 0)
  35. {
  36. ec = mqtt::make_error_code(mqtt::error::malformed_packet);
  37. }
  38. }
  39. // must be client
  40. inline void _before_user_callback_impl(
  41. error_code& ec, std::shared_ptr<caller_t>& caller_ptr, caller_t* caller, mqtt::message& om,
  42. mqtt::v3::suback& msg)
  43. {
  44. if (_before_suback_callback(ec, caller_ptr, caller, om, msg); ec)
  45. return;
  46. }
  47. // must be client
  48. inline void _before_user_callback_impl(
  49. error_code& ec, std::shared_ptr<caller_t>& caller_ptr, caller_t* caller, mqtt::message& om,
  50. mqtt::v4::suback& msg)
  51. {
  52. if (_before_suback_callback(ec, caller_ptr, caller, om, msg); ec)
  53. return;
  54. }
  55. // must be client
  56. inline void _before_user_callback_impl(
  57. error_code& ec, std::shared_ptr<caller_t>& caller_ptr, caller_t* caller, mqtt::message& om,
  58. mqtt::v5::suback& msg)
  59. {
  60. if (_before_suback_callback(ec, caller_ptr, caller, om, msg); ec)
  61. return;
  62. }
  63. inline void _after_user_callback_impl(
  64. error_code& ec, std::shared_ptr<caller_t>& caller_ptr, caller_t* caller, mqtt::message& om,
  65. mqtt::v3::suback& msg)
  66. {
  67. detail::ignore_unused(ec, caller_ptr, caller, om, msg);
  68. }
  69. inline void _after_user_callback_impl(
  70. error_code& ec, std::shared_ptr<caller_t>& caller_ptr, caller_t* caller, mqtt::message& om,
  71. mqtt::v4::suback& msg)
  72. {
  73. detail::ignore_unused(ec, caller_ptr, caller, om, msg);
  74. }
  75. inline void _after_user_callback_impl(
  76. error_code& ec, std::shared_ptr<caller_t>& caller_ptr, caller_t* caller, mqtt::message& om,
  77. mqtt::v5::suback& msg)
  78. {
  79. detail::ignore_unused(ec, caller_ptr, caller, om, msg);
  80. }
  81. };
  82. }
  83. #endif // !__ASIO2_MQTT_AOP_SUBACK_HPP__