1 #ifndef LIBJMMCG_CORE_SERVER_MANAGER_ASIO_HPP
2 #define LIBJMMCG_CORE_SERVER_MANAGER_ASIO_HPP
28 # pragma GCC diagnostic push
29 # pragma GCC diagnostic ignored "-Wsuggest-final-methods"
30 # pragma GCC diagnostic ignored "-Wsuggest-final-types"
47 using socket_priority=
typename socket_t::socket_priority;
48 using thread_traits=
ppd::api_threading_traits<
ppd::platform_api,
ppd::heavyweight_threading>;
63 template<
class RecvProcMsgs>
64 bool process(RecvProcMsgs proc_fn)
noexcept(
false) {
65 return proc_fn(*
this, *
this);
69 template<
class RecvProcMsgs>
70 bool process(RecvProcMsgs proc_fn, socket_t &dest_socket)
noexcept(
false) {
71 return proc_fn(*
this, dest_socket);
88 return std::make_shared<
typename ptr_type::element_type>(
std::move(socket));
94 using server_to_client_flow_t=
std::function<
void (
typename session::ptr_type)>;
101 manager(
boost::
asio::
ip::address
const &addr,
unsigned short port_num,
std::size_t min_message_size,
std::size_t max_message_size,
unsigned short timeout, socket_priority priority,
std::size_t incoming_cpu, server_to_client_flow_t &&server_to_client_flow);
108 static void set_options(acceptor_t &acceptor, socket_t &skt);
124 operator<<(
std::ostream &os,
typename manager<LkT>::tcp_connection
const &ec)
noexcept(
false);
127 inline std::ostream &
128 operator<<(
std::ostream &os,
manager<LkT>
const &ec)
noexcept(
false);
131 template<
class SvrHBs,
class LkT>
136 using heartbeats_t=SvrHBs;
137 using socket_t=
typename base_t::socket_t;
138 using socket_priority=
typename base_t::socket_priority;
139 using server_to_client_flow_t=
typename base_t::server_to_client_flow_t;
140 using base_t::base_t;
145 loopback(
boost::
asio::
ip::address
const &addr,
unsigned short port_num,
std::size_t,
std::size_t max_message_size,
unsigned short timeout, socket_priority priority,
std::size_t incoming_cpu, server_to_client_flow_t &&server_to_client_flow);
151 template<
class RecvProcMsgs>
152 void start_accept(RecvProcMsgs proc_fn)
noexcept(
false);
155 class send_heartbeats;
163 using socket_t=
typename base_t::socket_t;
164 using socket_priority=
typename base_t::socket_priority;
165 using server_to_client_flow_t=
typename base_t::server_to_client_flow_t;
170 forwarding(
boost::
asio::
ip::address
const &addr,
unsigned short port_num,
std::size_t min_message_size,
std::size_t max_message_size,
unsigned short timeout, socket_priority priority,
std::size_t incoming_cpu, server_to_client_flow_t &&server_to_client_flow, socket_t &dest);
176 template<
class RecvProcMsgs>
177 void start_accept(RecvProcMsgs proc_fn)
noexcept(
false);
180 socket_t &dest_socket_;
188 # pragma GCC diagnostic pop