define.hpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  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_DEFINE_HPP__
  11. #define __ASIO2_DEFINE_HPP__
  12. #if defined(_MSC_VER) && (_MSC_VER >= 1200)
  13. #pragma once
  14. #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
  15. // use this method to disable the compile warning under mingw.
  16. // note : the tail of "disable_warning_pedantic" don't has the char ';'
  17. // warning: extra ';' [-Wpedantic]
  18. namespace asio2::detail
  19. {
  20. template<class T, class U> class [[maybe_unused]] disable_warning_pedantic {};
  21. }
  22. // Note :
  23. // All the following classes must be in the namespace asio2::detail
  24. // All code that uses the following macros must also be in the namespace asio2::detail
  25. #define ASIO2_CLASS_DECLARE_BASE(KEYWORD) \
  26. KEYWORD io_t; \
  27. KEYWORD iopool; \
  28. KEYWORD data_filter_before_helper; \
  29. template <class, class> KEYWORD iopool_cp; \
  30. template <class, class> KEYWORD alive_time_cp; \
  31. template <class, class> KEYWORD condition_event_cp; \
  32. template <class, class> KEYWORD connect_cp; \
  33. template <class, class> KEYWORD connect_time_cp; \
  34. template <class, class> KEYWORD connect_timeout_cp; \
  35. template <class, class> KEYWORD data_persistence_cp; \
  36. template <class, class> KEYWORD shutdown_cp; \
  37. template <class, class> KEYWORD close_cp; \
  38. template <class, class> KEYWORD disconnect_cp; \
  39. template <class, class> KEYWORD event_queue_cp; \
  40. template <class > KEYWORD event_queue_guard; \
  41. template <class, class> KEYWORD post_cp; \
  42. template <class, class> KEYWORD rdc_call_cp; \
  43. template <class, class> KEYWORD rdc_call_cp_impl; \
  44. template <class, class> KEYWORD reconnect_timer_cp; \
  45. template <class, class> KEYWORD send_cp; \
  46. template <class, class> KEYWORD silence_timer_cp; \
  47. template <class, class> KEYWORD socket_cp; \
  48. template <class, class> KEYWORD user_data_cp; \
  49. template <class, class> KEYWORD user_timer_cp; \
  50. template <class > KEYWORD session_mgr_t; \
  51. template <class, class> KEYWORD socks5_client_cp; \
  52. template <class, class> KEYWORD socks5_client_handshake_op;\
  53. template <class, class> KEYWORD thread_id_cp; \
  54. template <class, class> KEYWORD disable_warning_pedantic
  55. #define ASIO2_CLASS_DECLARE_TCP_BASE(KEYWORD) \
  56. template <class, class> KEYWORD ssl_context_cp; \
  57. template <class, class> KEYWORD ssl_stream_cp; \
  58. template <class, class> KEYWORD tcp_keepalive_cp; \
  59. template <class, class> KEYWORD tcp_recv_op; \
  60. template <class, class> KEYWORD tcp_send_op; \
  61. template <class, class> KEYWORD ws_stream_cp; \
  62. template <class, class> KEYWORD http_recv_op; \
  63. template <class, class> KEYWORD http_send_op; \
  64. template <class, class> KEYWORD ws_send_op; \
  65. template <class, class> KEYWORD rpc_call_cp; \
  66. template <class, class> KEYWORD rpc_recv_op; \
  67. template <class, class> KEYWORD http_router_t; \
  68. template <class, class> KEYWORD rpc_invoker_t; \
  69. template <class, class> KEYWORD mqtt_send_op; \
  70. template <class, class> KEYWORD mqtt_handler_t; \
  71. template <class, class> KEYWORD mqtt_aop_auth ; \
  72. template <class, class> KEYWORD mqtt_aop_connack ; \
  73. template <class, class> KEYWORD mqtt_aop_connect ; \
  74. template <class, class> KEYWORD mqtt_aop_disconnect ; \
  75. template <class, class> KEYWORD mqtt_aop_pingreq ; \
  76. template <class, class> KEYWORD mqtt_aop_pingresp ; \
  77. template <class, class> KEYWORD mqtt_aop_puback ; \
  78. template <class, class> KEYWORD mqtt_aop_pubcomp ; \
  79. template <class, class> KEYWORD mqtt_aop_publish ; \
  80. template <class, class> KEYWORD mqtt_aop_pubrec ; \
  81. template <class, class> KEYWORD mqtt_aop_pubrel ; \
  82. template <class, class> KEYWORD mqtt_aop_suback ; \
  83. template <class, class> KEYWORD mqtt_aop_subscribe ; \
  84. template <class, class> KEYWORD mqtt_aop_unsuback ; \
  85. template <class, class> KEYWORD mqtt_aop_unsubscribe; \
  86. template <class, class> KEYWORD mqtt_invoker_t; \
  87. template <class, class> KEYWORD mqtt_subscribe_router_t; \
  88. template <class, class> KEYWORD mqtt_message_router_t; \
  89. template <class, class> KEYWORD mqtt_topic_alias_t; \
  90. template <class, class> KEYWORD mqtt_session_persistence; \
  91. template <class, class> KEYWORD disable_warning_pedantic
  92. #define ASIO2_CLASS_DECLARE_TCP_CLIENT(KEYWORD) \
  93. template <class, class> KEYWORD client_impl_t; \
  94. template <class, class> KEYWORD tcp_client_impl_t; \
  95. template <class, class> KEYWORD tcps_client_impl_t; \
  96. template <class, class> KEYWORD http_client_impl_t; \
  97. template <class, class> KEYWORD https_client_impl_t; \
  98. template <class, class> KEYWORD ws_client_impl_t; \
  99. template <class, class> KEYWORD wss_client_impl_t; \
  100. template <class, class> KEYWORD rpc_client_impl_t; \
  101. template <class, class> KEYWORD mqtt_client_impl_t; \
  102. template <class, class> KEYWORD mqtts_client_impl_t; \
  103. template <class, class> KEYWORD socks5_client_impl_t; \
  104. template <class, class> KEYWORD socks5_client_cp; \
  105. template <class, class> KEYWORD socks5_client_cp_impl; \
  106. template <class, class, class> KEYWORD socks5_client_cp_bridge; \
  107. template <class, class> KEYWORD disable_warning_pedantic
  108. #define ASIO2_CLASS_DECLARE_TCP_SERVER(KEYWORD) \
  109. template <class, class> KEYWORD server_impl_t; \
  110. template <class, class> KEYWORD tcp_server_impl_t; \
  111. template <class, class> KEYWORD tcps_server_impl_t; \
  112. template <class, class> KEYWORD http_server_impl_t; \
  113. template <class, class> KEYWORD https_server_impl_t; \
  114. template <class, class> KEYWORD ws_server_impl_t; \
  115. template <class, class> KEYWORD wss_server_impl_t; \
  116. template <class, class> KEYWORD rpc_server_impl_t; \
  117. template <class, class> KEYWORD mqtt_server_impl_t; \
  118. template <class, class> KEYWORD mqtts_server_impl_t; \
  119. template <class, class> KEYWORD socks5_server_impl_t; \
  120. template <class, class> KEYWORD disable_warning_pedantic
  121. #define ASIO2_CLASS_DECLARE_TCP_SESSION(KEYWORD) \
  122. template <class, class> KEYWORD session_impl_t; \
  123. template <class, class> KEYWORD tcp_session_impl_t; \
  124. template <class, class> KEYWORD tcps_session_impl_t; \
  125. template <class, class> KEYWORD http_session_impl_t; \
  126. template <class, class> KEYWORD https_session_impl_t; \
  127. template <class, class> KEYWORD ws_session_impl_t; \
  128. template <class, class> KEYWORD wss_session_impl_t; \
  129. template <class, class> KEYWORD rpc_session_impl_t; \
  130. template <class, class> KEYWORD mqtt_session_impl_t; \
  131. template <class, class> KEYWORD mqtts_session_impl_t; \
  132. template <class, class> KEYWORD socks5_session_impl_t; \
  133. template <class, class> KEYWORD disable_warning_pedantic
  134. #define ASIO2_CLASS_DECLARE_UDP_BASE(KEYWORD) \
  135. template <class, class> KEYWORD kcp_stream_cp; \
  136. template <class, class> KEYWORD udp_send_cp; \
  137. template <class, class> KEYWORD udp_send_op; \
  138. template <class, class> KEYWORD udp_recv_op; \
  139. template <class, class> KEYWORD disable_warning_pedantic
  140. #define ASIO2_CLASS_DECLARE_UDP_CLIENT(KEYWORD) \
  141. template <class, class> KEYWORD client_impl_t; \
  142. template <class, class> KEYWORD udp_client_impl_t; \
  143. template <class, class> KEYWORD udp_cast_impl_t; \
  144. template <class, class> KEYWORD socks5_client_impl_t; \
  145. template <class, class> KEYWORD socks5_client_cp; \
  146. template <class, class> KEYWORD socks5_client_cp_impl; \
  147. template <class, class, class> KEYWORD socks5_client_cp_bridge; \
  148. template <class, class> KEYWORD disable_warning_pedantic
  149. #define ASIO2_CLASS_DECLARE_UDP_SERVER(KEYWORD) \
  150. template <class, class> KEYWORD server_impl_t; \
  151. template <class, class> KEYWORD udp_server_impl_t; \
  152. template <class, class> KEYWORD disable_warning_pedantic
  153. #define ASIO2_CLASS_DECLARE_UDP_SESSION(KEYWORD) \
  154. template <class, class> KEYWORD session_impl_t; \
  155. template <class, class> KEYWORD udp_session_impl_t; \
  156. template <class, class> KEYWORD disable_warning_pedantic
  157. //-------------------------------------------------------------------------------------------------
  158. #define ASIO2_CLASS_FORWARD_DECLARE_BASE ASIO2_CLASS_DECLARE_BASE (class)
  159. #define ASIO2_CLASS_FRIEND_DECLARE_BASE ASIO2_CLASS_DECLARE_BASE (friend class)
  160. //-------------------------------------------------------------------------------------------------
  161. #define ASIO2_CLASS_FORWARD_DECLARE_TCP_BASE ASIO2_CLASS_DECLARE_TCP_BASE (class)
  162. #define ASIO2_CLASS_FORWARD_DECLARE_TCP_CLIENT ASIO2_CLASS_DECLARE_TCP_CLIENT (class)
  163. #define ASIO2_CLASS_FORWARD_DECLARE_TCP_SERVER ASIO2_CLASS_DECLARE_TCP_SERVER (class)
  164. #define ASIO2_CLASS_FORWARD_DECLARE_TCP_SESSION ASIO2_CLASS_DECLARE_TCP_SESSION(class)
  165. #define ASIO2_CLASS_FRIEND_DECLARE_TCP_BASE ASIO2_CLASS_DECLARE_TCP_BASE (friend class)
  166. #define ASIO2_CLASS_FRIEND_DECLARE_TCP_CLIENT ASIO2_CLASS_DECLARE_TCP_CLIENT (friend class)
  167. #define ASIO2_CLASS_FRIEND_DECLARE_TCP_SERVER ASIO2_CLASS_DECLARE_TCP_SERVER (friend class)
  168. #define ASIO2_CLASS_FRIEND_DECLARE_TCP_SESSION ASIO2_CLASS_DECLARE_TCP_SESSION(friend class)
  169. //-------------------------------------------------------------------------------------------------
  170. #define ASIO2_CLASS_FORWARD_DECLARE_UDP_BASE ASIO2_CLASS_DECLARE_UDP_BASE (class)
  171. #define ASIO2_CLASS_FORWARD_DECLARE_UDP_CLIENT ASIO2_CLASS_DECLARE_UDP_CLIENT (class)
  172. #define ASIO2_CLASS_FORWARD_DECLARE_UDP_SERVER ASIO2_CLASS_DECLARE_UDP_SERVER (class)
  173. #define ASIO2_CLASS_FORWARD_DECLARE_UDP_SESSION ASIO2_CLASS_DECLARE_UDP_SESSION(class)
  174. #define ASIO2_CLASS_FRIEND_DECLARE_UDP_BASE ASIO2_CLASS_DECLARE_UDP_BASE (friend class)
  175. #define ASIO2_CLASS_FRIEND_DECLARE_UDP_CLIENT ASIO2_CLASS_DECLARE_UDP_CLIENT (friend class)
  176. #define ASIO2_CLASS_FRIEND_DECLARE_UDP_SERVER ASIO2_CLASS_DECLARE_UDP_SERVER (friend class)
  177. #define ASIO2_CLASS_FRIEND_DECLARE_UDP_SESSION ASIO2_CLASS_DECLARE_UDP_SESSION(friend class)
  178. #endif // !__ASIO2_DEFINE_HPP__