rpcs_session.hpp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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. #if defined(ASIO2_ENABLE_SSL) || defined(ASIO2_USE_SSL)
  11. #ifndef __ASIO2_RPCS_SESSION_HPP__
  12. #define __ASIO2_RPCS_SESSION_HPP__
  13. #if defined(_MSC_VER) && (_MSC_VER >= 1200)
  14. #pragma once
  15. #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
  16. #if __has_include(<cereal/cereal.hpp>)
  17. #include <asio2/rpc/rpc_session.hpp>
  18. namespace asio2
  19. {
  20. namespace detail
  21. {
  22. template<asio2::net_protocol np> struct template_args_rpcs_session;
  23. template<>
  24. struct template_args_rpcs_session<asio2::net_protocol::tcps> : public template_args_tcp_session
  25. {
  26. static constexpr asio2::net_protocol net_protocol = asio2::net_protocol::tcps;
  27. static constexpr bool rdc_call_cp_enabled = false;
  28. static constexpr std::size_t function_storage_size = 72;
  29. };
  30. template<>
  31. struct template_args_rpcs_session<asio2::net_protocol::wss> : public template_args_wss_session
  32. {
  33. static constexpr asio2::net_protocol net_protocol = asio2::net_protocol::wss;
  34. static constexpr bool rdc_call_cp_enabled = false;
  35. static constexpr std::size_t function_storage_size = 72;
  36. };
  37. }
  38. using rpcs_session_args_tcp = detail::template_args_rpcs_session<asio2::net_protocol::tcps>;
  39. using rpcs_session_args_ws = detail::template_args_rpcs_session<asio2::net_protocol::wss >;
  40. template<class derived_t, asio2::net_protocol np> class rpcs_session_t;
  41. template<class derived_t>
  42. class rpcs_session_t<derived_t, asio2::net_protocol::tcps> : public detail::rpc_session_impl_t<derived_t,
  43. detail::tcps_session_impl_t<derived_t, detail::template_args_rpcs_session<asio2::net_protocol::tcps>>>
  44. {
  45. public:
  46. using detail::rpc_session_impl_t<derived_t, detail::tcps_session_impl_t<
  47. derived_t, detail::template_args_rpcs_session<asio2::net_protocol::tcps>>>::rpc_session_impl_t;
  48. };
  49. template<class derived_t>
  50. class rpcs_session_t<derived_t, asio2::net_protocol::wss> : public detail::rpc_session_impl_t<derived_t,
  51. detail::wss_session_impl_t<derived_t, detail::template_args_rpcs_session<asio2::net_protocol::wss>>>
  52. {
  53. public:
  54. using detail::rpc_session_impl_t<derived_t, detail::wss_session_impl_t<
  55. derived_t, detail::template_args_rpcs_session<asio2::net_protocol::wss>>>::rpc_session_impl_t;
  56. };
  57. template<asio2::net_protocol np>
  58. class rpcs_session_use : public rpcs_session_t<rpcs_session_use<np>, np>
  59. {
  60. public:
  61. using rpcs_session_t<rpcs_session_use<np>, np>::rpcs_session_t;
  62. };
  63. #if !defined(ASIO2_USE_WEBSOCKET_RPC)
  64. /// Using tcp dgram mode as the underlying communication support
  65. using rpcs_session = rpcs_session_use<asio2::net_protocol::tcps>;
  66. #else
  67. /// Using websocket as the underlying communication support
  68. using rpcs_session = rpcs_session_use<asio2::net_protocol::wss>;
  69. #endif
  70. }
  71. #if defined(ASIO2_INCLUDE_RATE_LIMIT)
  72. #include <asio2/tcp/tcp_stream.hpp>
  73. namespace asio2
  74. {
  75. struct rpcs_rate_session_args_tcp : public rpcs_session_args_tcp
  76. {
  77. using socket_t = asio2::tcp_stream<asio2::simple_rate_policy>;
  78. };
  79. struct rpcs_rate_session_args_ws : public rpcs_session_args_ws
  80. {
  81. using socket_t = asio2::tcp_stream<asio2::simple_rate_policy>;
  82. using stream_t = websocket::stream<asio::ssl::stream<socket_t&>&>;
  83. };
  84. template<class derived_t, asio2::net_protocol np> class rpcs_rate_session_t;
  85. template<class derived_t>
  86. class rpcs_rate_session_t<derived_t, asio2::net_protocol::tcps> : public detail::rpc_session_impl_t<derived_t,
  87. detail::tcps_session_impl_t<derived_t, rpcs_rate_session_args_tcp>>
  88. {
  89. public:
  90. using detail::rpc_session_impl_t<derived_t,
  91. detail::tcps_session_impl_t<derived_t, rpcs_rate_session_args_tcp>>::rpc_session_impl_t;
  92. };
  93. template<class derived_t>
  94. class rpcs_rate_session_t<derived_t, asio2::net_protocol::wss> : public detail::rpc_session_impl_t<derived_t,
  95. detail::wss_session_impl_t<derived_t, rpcs_rate_session_args_ws>>
  96. {
  97. public:
  98. using detail::rpc_session_impl_t<derived_t,
  99. detail::wss_session_impl_t<derived_t, rpcs_rate_session_args_ws>>::rpc_session_impl_t;
  100. };
  101. template<asio2::net_protocol np>
  102. class rpcs_rate_session_use : public rpcs_rate_session_t<rpcs_rate_session_use<np>, np>
  103. {
  104. public:
  105. using rpcs_rate_session_t<rpcs_rate_session_use<np>, np>::rpcs_rate_session_t;
  106. };
  107. #if !defined(ASIO2_USE_WEBSOCKET_RPC)
  108. /// Using tcp dgram mode as the underlying communication support
  109. using rpcs_rate_session = rpcs_rate_session_use<asio2::net_protocol::tcps>;
  110. #else
  111. /// Using websocket as the underlying communication support
  112. using rpcs_rate_session = rpcs_rate_session_use<asio2::net_protocol::wss>;
  113. #endif
  114. }
  115. #endif
  116. #endif
  117. #endif // !__ASIO2_RPCS_SESSION_HPP__
  118. #endif