1 #ifndef LIBJMMCG_CORE_SOCKET_SERVER_HPP
2 #define LIBJMMCG_CORE_SOCKET_SERVER_HPP
31 #include <boost/exception/diagnostic_information.hpp>
32 #include <boost/exception_ptr.hpp>
33 #include <boost/program_options.hpp>
45 class ProcessingRules,
52 using svr_mgr_t=SvrMgr;
53 using server_to_client_flow_t=
typename svr_mgr_t::server_to_client_flow_t;
54 using socket_t=
typename svr_mgr_t::socket_t;
55 using socket_priority=
typename svr_mgr_t::socket_priority;
57 using proc_rules_t=
typename msg_processor_t::proc_rules_t;
58 using thread_t=
ppd::jthread;
62 using port_t=
unsigned short;
63 using pr_t=proc_rules_t;
80 svr(
boost::
asio::
ip::address
const &addr,
unsigned short port_num,
unsigned short timeout, socket_priority priority, thread_t::thread_traits::api_params_type::processor_mask_type mask,
const thread_t::thread_traits::api_params_type::priority_type cpu_priority, proc_rules_t
const &proc_ops, LatencyTimestamps &ts,
char const *svr_name, server_to_client_flow_t &&server_to_client_flow=[](
auto const &) {})
noexcept(
false);
82 svr(
boost::
asio::
ip::address
const &addr,
unsigned short port_num, socket_priority priority, thread_t::thread_traits::api_params_type::processor_mask_type mask,
const thread_t::thread_traits::api_params_type::priority_type cpu_priority, proc_rules_t
const &proc_ops, LatencyTimestamps &ts,
char const *svr_name, server_to_client_flow_t &&server_to_client_flow=[](
auto const &) {})
noexcept(
false);
94 svr(
boost::
asio::
ip::address
const &addr,
unsigned short port_num,
unsigned short timeout, socket_priority priority, thread_t::thread_traits::api_params_type::processor_mask_type mask,
const thread_t::thread_traits::api_params_type::priority_type cpu_priority, proc_rules_t
const &proc_ops, socket_t &dest_skt, LatencyTimestamps &ts,
char const *svr_name, server_to_client_flow_t &&server_to_client_flow=[](
auto const &) {})
noexcept(
false);
96 svr(
boost::
asio::
ip::address
const &addr,
unsigned short port_num, socket_priority priority, thread_t::thread_traits::api_params_type::processor_mask_type mask,
const thread_t::thread_traits::api_params_type::priority_type cpu_priority, proc_rules_t
const &proc_ops, socket_t &dest_skt, LatencyTimestamps &ts, server_to_client_flow_t &&server_to_client_flow=[](
auto const &) {})
noexcept(
false);
97 template<
class LatencyTimestamps>
98 svr(
ctor_args const &args, socket_priority priority, thread_t::thread_traits::api_params_type::processor_mask_type mask,
const thread_t::thread_traits::api_params_type::priority_type cpu_priority, LatencyTimestamps &ts, server_to_client_flow_t &&server_to_client_flow=[](
auto const &) {})
noexcept(
false);
99 template<
class LatencyTimestamps>
100 svr(
ctor_args const &args, socket_t &dest_skt,
unsigned short timeout, socket_priority priority, thread_t::thread_traits::api_params_type::processor_mask_type mask,
const thread_t::thread_traits::api_params_type::priority_type cpu_priority, LatencyTimestamps &ts,
char const *svr_name, server_to_client_flow_t &&server_to_client_flow=[](
auto const &) {})
noexcept(
false);
101 ~
svr()
noexcept(
true);
103 void stop()
noexcept(
true);
109 static int main(
int argc,
char const *
const *argv)
noexcept(
true);
115 const unsigned short port_number;
116 std::atomic<
bool> exit_{
false};
120 boost::exception_ptr client_ex{};
121 msg_processor_t processor;
131 template<
class LatencyTimestamps>
132 bool read_and_process_msgs(
typename svr_mgr_t::session &src_cxn, socket_t &dest_skt, LatencyTimestamps &ts)
noexcept(
false);
133 template<
class LatencyTimestamps>
134 bool read_and_process_msgs(
typename svr_mgr_t::session &src_cxn,
typename svr_mgr_t::session &dest_cxn, LatencyTimestamps &ts)
noexcept(
false);
136 void run()
noexcept(
true);
139 template<
class ProcessingRules,
class SvrMgr>
inline std::ostream &
140 operator<<(
std::ostream &os, svr<ProcessingRules, SvrMgr>
const &ec)
noexcept(
false);