rpcs_server.hpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  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_SERVER_HPP__
  12. #define __ASIO2_RPCS_SERVER_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_server.hpp>
  18. #include <asio2/rpc/rpcs_session.hpp>
  19. namespace asio2
  20. {
  21. template<class derived_t, class session_t, asio2::net_protocol np = session_t::net_protocol>
  22. class rpcs_server_impl_t;
  23. template<class derived_t, class session_t>
  24. class rpcs_server_impl_t<derived_t, session_t, asio2::net_protocol::tcps>
  25. : public detail::rpc_server_impl_t<derived_t, detail::tcps_server_impl_t<derived_t, session_t>>
  26. {
  27. public:
  28. using detail::rpc_server_impl_t<derived_t, detail::tcps_server_impl_t<derived_t, session_t>>::
  29. rpc_server_impl_t;
  30. };
  31. template<class derived_t, class session_t>
  32. class rpcs_server_impl_t<derived_t, session_t, asio2::net_protocol::wss>
  33. : public detail::rpc_server_impl_t<derived_t, detail::wss_server_impl_t<derived_t, session_t>>
  34. {
  35. public:
  36. using detail::rpc_server_impl_t<derived_t, detail::wss_server_impl_t<derived_t, session_t>>::
  37. rpc_server_impl_t;
  38. };
  39. template<class session_t>
  40. class rpcs_server_t : public rpcs_server_impl_t<rpcs_server_t<session_t>, session_t>
  41. {
  42. public:
  43. using rpcs_server_impl_t<rpcs_server_t<session_t>, session_t>::rpcs_server_impl_t;
  44. };
  45. template<asio2::net_protocol np>
  46. class rpcs_server_use : public rpcs_server_t<rpcs_session_use<np>>
  47. {
  48. public:
  49. using rpcs_server_t<rpcs_session_use<np>>::rpcs_server_t;
  50. };
  51. #if !defined(ASIO2_USE_WEBSOCKET_RPC)
  52. /// Using tcp dgram mode as the underlying communication support
  53. using rpcs_server = rpcs_server_use<asio2::net_protocol::tcps>;
  54. #else
  55. /// Using websocket as the underlying communication support
  56. using rpcs_server = rpcs_server_use<asio2::net_protocol::wss>;
  57. #endif
  58. }
  59. #if defined(ASIO2_INCLUDE_RATE_LIMIT)
  60. #include <asio2/tcp/tcp_stream.hpp>
  61. namespace asio2
  62. {
  63. template<class derived_t, class session_t, asio2::net_protocol np = session_t::net_protocol>
  64. class rpcs_rate_server_impl_t;
  65. template<class derived_t, class session_t>
  66. class rpcs_rate_server_impl_t<derived_t, session_t, asio2::net_protocol::tcps>
  67. : public detail::rpc_server_impl_t<derived_t, detail::tcps_server_impl_t<derived_t, session_t>>
  68. {
  69. public:
  70. using detail::rpc_server_impl_t<derived_t, detail::tcps_server_impl_t<derived_t, session_t>>::
  71. rpc_server_impl_t;
  72. };
  73. template<class derived_t, class session_t>
  74. class rpcs_rate_server_impl_t<derived_t, session_t, asio2::net_protocol::wss>
  75. : public detail::rpc_server_impl_t<derived_t, detail::wss_server_impl_t<derived_t, session_t>>
  76. {
  77. public:
  78. using detail::rpc_server_impl_t<derived_t, detail::wss_server_impl_t<derived_t, session_t>>::
  79. rpc_server_impl_t;
  80. };
  81. template<class session_t>
  82. class rpcs_rate_server_t : public rpcs_rate_server_impl_t<rpcs_rate_server_t<session_t>, session_t>
  83. {
  84. public:
  85. using rpcs_rate_server_impl_t<rpcs_rate_server_t<session_t>, session_t>::rpcs_rate_server_impl_t;
  86. };
  87. template<asio2::net_protocol np>
  88. class rpcs_rate_server_use : public rpcs_rate_server_t<rpcs_rate_session_use<np>>
  89. {
  90. public:
  91. using rpcs_rate_server_t<rpcs_rate_session_use<np>>::rpcs_rate_server_t;
  92. };
  93. #if !defined(ASIO2_USE_WEBSOCKET_RPC)
  94. /// Using tcp dgram mode as the underlying communication support
  95. using rpcs_rate_server = rpcs_rate_server_use<asio2::net_protocol::tcps>;
  96. #else
  97. /// Using websocket as the underlying communication support
  98. using rpcs_rate_server = rpcs_rate_server_use<asio2::net_protocol::wss>;
  99. #endif
  100. }
  101. #endif
  102. #endif
  103. #endif // !__ASIO2_RPCS_SERVER_HPP__
  104. #endif