21 template<
class MsgDetails,
class ConnPol>
inline
22 connection<MsgDetails, ConnPol>::
connection(conn_pol_t
const &conn_pol, skt_mgr_t::socket_priority priority,
std::size_t incoming_cpu)
26 template<
class MsgDetails,
class ConnPol>
27 template<
class Msg>
inline
28 typename std::enable_if<
30 typename boost::mpl::find<
typename MsgDetails::client_to_exchange_messages_t, Msg>::type,
31 typename boost::mpl::end<
typename MsgDetails::client_to_exchange_messages_t>::type
39 template<
class MsgDetails,
class ConnPol>
40 template<
class Msg>
inline
41 typename std::enable_if<
43 typename boost::mpl::find<
typename MsgDetails::exchange_to_client_messages_t, Msg>::type,
44 typename boost::mpl::end<
typename MsgDetails::exchange_to_client_messages_t>::type
52 template<
class MsgDetails,
class ConnPol>
inline void
57 template<
class MsgDetails,
class ConnPol>
inline std::string
59 std::ostringstream ss;
61 <<libjmmcg::ppd::api_threading_traits<libjmmcg::ppd::platform_api, libjmmcg::ppd::sequential_mode>::demangle_name(
typeid(*
this))
66 template<
class MsgDetails,
class ConnPol>
inline std::ostream &
67 operator<<(
std::ostream &os,
connection<MsgDetails, ConnPol>
const &ec)
noexcept(
false) {
72 template<
class ExchgToClientProcessingRules,
class ConnPol>
inline
73 connection_processor<ExchgToClientProcessingRules, ConnPol>::
connection_processor(ctor_args
const &cxn_details, socket_priority priority,
std::size_t incoming_cpu, proc_rules_t
const &proc_rules)
74 : processor(proc_rules), cxn_(cxn_details, priority, incoming_cpu) {
75 cxn_.send(
typename msg_details_t::LogonRequest(cxn_.conn_pol_.logon_args));
76 typename msg_details_t::LogonReply msg;
80 }
while (
static_cast<
typename msg_details_t::MsgTypes_t>(msg.type())!=
static_cast<
typename msg_details_t::MsgTypes_t>(msg_details_t::LogonReply::static_type));
81 const typename msg_details_t::LogonReply::respond process_response{};
82 process_response(msg, [
this]() {logged_on_=
true;});
85 template<
class ExchgToClientProcessingRules,
class ConnPol>
inline
87 cxn_.send(
typename msg_details_t::LogoutRequest(cxn_.conn_pol_.logoff_args));
89 typename msg_details_t::Logout msg;
93 }
while (
static_cast<
typename msg_details_t::MsgTypes_t>(msg.type())!=
static_cast<
typename msg_details_t::MsgTypes_t>(msg_details_t::Logout::static_type));
94 assert(
static_cast<
typename msg_details_t::MsgTypes_t>(msg.type())==
static_cast<
typename msg_details_t::MsgTypes_t>(msg_details_t::Logout::static_type));
98 template<
class ExchgToClientProcessingRules,
class ConnPol>
99 template<
class ClientCxn,
class LatencyTimestamps>
101 connection_processor<ExchgToClientProcessingRules, ConnPol>::
read_and_process_a_msg(ClientCxn &dest_link, LatencyTimestamps &ts)
noexcept(
false) {
102 return processor.read_and_process_a_msg(cxn_.socket(), dest_link, ts);
105 template<
class ExchgToClientProcessingRules,
class ConnPol>
107 connection_processor<ExchgToClientProcessingRules, ConnPol>::
stop() {
111 template<
class ExchgToClientProcessingRules,
class ConnPol>
113 connection_processor<ExchgToClientProcessingRules, ConnPol>::
to_string()
const noexcept(
false) {
114 std::ostringstream ss;
116 <<libjmmcg::ppd::api_threading_traits<libjmmcg::ppd::platform_api, libjmmcg::ppd::sequential_mode>::demangle_name(
typeid(*
this))
117 <<
",\nprocessor: "<<processor
122 template<
class ExchgToClientProcessingRules,
class ConnPol>
inline std::ostream &
123 operator<<(
std::ostream &os, connection_processor<ExchgToClientProcessingRules, ConnPol>
const &ec)
noexcept(
false) {