23 template<
class SrcMsgDetails,
class DestMsgDetails>
26 using row_t=libjmmcg::
msm::
unroll::
row_types<
typename src_msg_details_t::MsgType_t,
typename dest_msg_details_t::MsgTypes_t>;
27 using transition_table=
typename msm_base_t::
template rows<
30 typename row_t::
template row<
31 src_msg_details_t::MatchAll,
32 typename base_t::
template send_reject<
typename src_msg_details_t::Reject,
false>,
33 dest_msg_details_t::Reject::static_type
41 client_to_exchange_transformations<SrcMsgDetails, DestMsgDetails>
42 ::
process_msg(
typename src_msg_details_t::msg_buffer_t
const &buff, SktT &exchg_skt, SktT &dest_skt) {
43 typename src_msg_details_t::Header_t
const &hdr=
reinterpret_cast<
typename src_msg_details_t::Header_t
const &>(buff);
44 const auto last_state=msm.process(hdr.type(), buff, exchg_skt, dest_skt);
45 return last_state==dest_msg_details_t::Exit;
48 template<
class SrcMsgDetails,
class DestMsgDetails>
inline std::string
49 client_to_exchange_transformations<SrcMsgDetails, DestMsgDetails>::
to_string()
const noexcept(
false) {
50 return base_t::to_string();
53 template<
class SrcMsgDetails,
class DestMsgDetails>
inline std::ostream &
54 operator<<(
std::ostream &os, client_to_exchange_transformations<SrcMsgDetails, DestMsgDetails>
const &ec)
noexcept(
false) {
59 template<
class SrcMsgDetails,
class DestMsgDetails>
60 struct exchange_to_client_transformations<SrcMsgDetails, DestMsgDetails>::business_state_machine_t : libjmmcg::
msm::
unroll::
state_transition_table<business_state_machine_t> {
62 using row_t=libjmmcg::
msm::
unroll::
row_types<
typename src_msg_details_t::MsgTypes_t,
typename dest_msg_details_t::MsgType_t>;
63 using transition_table=
typename msm_base_t::
template rows<
66 typename row_t::
template row<
67 src_msg_details_t::MatchAll,
68 typename base_t::
template send_reject<
typename dest_msg_details_t::Reject,
true>,
69 dest_msg_details_t::Reject::static_type
74 template<
class SrcMsgDetails,
class DestMsgDetails>
75 struct exchange_to_client_transformations<SrcMsgDetails, DestMsgDetails>::admin_state_machine_t : libjmmcg::
msm::
unroll::
state_transition_table<admin_state_machine_t> {
77 using row_t=libjmmcg::
msm::
unroll::
row_types<
typename src_msg_details_t::MsgTypes_t,
typename dest_msg_details_t::MsgType_t>;
78 using transition_table=
typename msm_base_t::
template rows<
82 typename row_t::
template row<
83 src_msg_details_t::ServerHeartbeat::static_type,
84 typename base_t::
template just_send_to_exchg<
typename src_msg_details_t::ClientHeartbeat>,
85 src_msg_details_t::ClientHeartbeat::static_type
87 typename row_t::
template row<
88 src_msg_details_t::Logout::static_type,
89 typename msm_base_t::no_op,
90 dest_msg_details_t::Exit
94 typename row_t::
template row<
95 src_msg_details_t::MatchAll,
96 typename base_t::
template match_all_response<business_machine>,
97 dest_msg_details_t::Reject::static_type
103 template<
class SktT,
class ClientCxn>
105 exchange_to_client_transformations<SrcMsgDetails, DestMsgDetails>
106 ::
process_msg(
typename src_msg_details_t::msg_buffer_t
const &buff, SktT &exchg_skt, ClientCxn &client_skt) {
107 typename src_msg_details_t::Header_t
const &hdr=
reinterpret_cast<
typename src_msg_details_t::Header_t
const &>(buff);
108 const auto last_state=admin_msm.process(hdr.type(), buff, exchg_skt, client_skt);
109 return last_state==dest_msg_details_t::Exit;
112 template<
class SrcMsgDetails,
class DestMsgDetails>
inline std::string
113 exchange_to_client_transformations<SrcMsgDetails, DestMsgDetails>::
to_string()
const noexcept(
false) {
114 return base_t::to_string();
117 template<
class SrcMsgDetails,
class DestMsgDetails>
inline std::ostream &
118 operator<<(
std::ostream &os, exchange_to_client_transformations<SrcMsgDetails, DestMsgDetails>
const &ec)
noexcept(
false) {
123 template<
class SrcMsgDetails>
126 using row_t=libjmmcg::
msm::
unroll::
row_types<
typename msg_details_t::MsgType_t,
typename msg_details_t::MsgType_t>;
127 using transition_table=
typename msm_base_t::
template rows<
131 typename row_t::
template row<
132 msg_details_t::ClientHeartbeat::static_type,
133 typename msm_base_t::no_op,
134 msg_details_t::ServerHeartbeat::static_type
138 typename row_t::
template row<
139 msg_details_t::MatchAll,
140 typename base_t::
template send_reject<
typename msg_details_t::Reject,
true>,
141 msg_details_t::Reject::static_type
149 simulator_responses<SrcMsgDetails>::
process_msg(
typename msg_details_t::msg_buffer_t
const &buff, SktT &exchg_skt, SktT &client_skt) {
150 ++(
this->sequenceNumber);
151 typename msg_details_t::Header_t
const &hdr=
reinterpret_cast<
typename msg_details_t::Header_t
const &>(buff);
152 const auto last_state=msm.process(hdr.type(), buff, exchg_skt, client_skt);
153 return last_state==msg_details_t::Exit;
156 template<
class SrcMsgDetails>
inline std::string
157 simulator_responses<SrcMsgDetails>::
to_string()
const noexcept(
false) {
158 return base_t::to_string();
161 template<
class SrcMsgDetails>
inline std::ostream &
162 operator<<(
std::ostream &os, simulator_responses<SrcMsgDetails>
const &ec)
noexcept(
false) {