1 #ifndef libjmmcg_isimud_exchanges_common_MIT_processing_rules_hpp
2 #define libjmmcg_isimud_exchanges_common_MIT_processing_rules_hpp
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 #include "../../common/processing_rules.hpp"
25
26 #include "core/msm.hpp"
27
28 namespace isimud { namespace exchanges { namespace BATSBOE { namespace common {
29
30
31
32
33
34
35
36 template<class SrcMsgDetails, class DestMsgDetails, class SktT>
37 class client_to_exchange_transformations final : public exchanges::common::message_responses<SrcMsgDetails, DestMsgDetails, client_to_exchange_transformations<SrcMsgDetails, DestMsgDetails, SktT>, typename SrcMsgDetails::client_to_exchange_messages_t, SktT> {
38 public:
39 using base_t=exchanges::common::message_responses<SrcMsgDetails, DestMsgDetails, client_to_exchange_transformations<SrcMsgDetails, DestMsgDetails, SktT>, typename SrcMsgDetails::client_to_exchange_messages_t, SktT>;
40 using src_msg_details_t=typename base_t::src_msg_details_t;
41 using dest_msg_details_t=typename base_t::dest_msg_details_t;
42 using socket_t=typename base_t::socket_t;
43
44
45
46
47 bool process_msg(typename src_msg_details_t::msg_buffer_t const &buff, socket_t &exchg_skt, socket_t &dest_skt) override;
48
49 std::string to_string() const noexcept(false);
50
51 private:
52 struct state_machine_t;
53 using machine=jmmcg::msm::unroll::machine<state_machine_t>;
54
55 std::uint32_t sequenceNumber{};
56 const machine msm{std::ref(sequenceNumber)};
57 };
58
59 template<class SrcMsgDetails, class DestMsgDetails, class SktT> inline std::ostream &
60 operator<<(std::ostream &os, client_to_exchange_transformations<SrcMsgDetails, DestMsgDetails, SktT> const &ec) noexcept(false);
61
62
63
64
65
66
67
68 template<class SrcMsgDetails, class DestMsgDetails, class SktT>
69 class exchange_to_client_transformations final : public exchanges::common::message_responses<SrcMsgDetails, DestMsgDetails, exchange_to_client_transformations<SrcMsgDetails, DestMsgDetails, SktT>, typename SrcMsgDetails::exchange_to_client_messages_t, SktT> {
70 public:
71 using base_t=exchanges::common::message_responses<SrcMsgDetails, DestMsgDetails, exchange_to_client_transformations<SrcMsgDetails, DestMsgDetails, SktT>, typename SrcMsgDetails::exchange_to_client_messages_t, SktT>;
72 using src_msg_details_t=typename base_t::src_msg_details_t;
73 using dest_msg_details_t=typename base_t::dest_msg_details_t;
74 using socket_t=typename base_t::socket_t;
75
76
77
78
79 bool process_msg(typename src_msg_details_t::msg_buffer_t const &buff, socket_t &exchg_skt, socket_t &client_skt) override;
80
81 std::string to_string() const noexcept(false);
82
83 private:
84 struct state_machine_t;
85 using machine=jmmcg::msm::unroll::machine<state_machine_t>;
86
87 std::uint32_t sequenceNumber{};
88 const machine msm{std::ref(sequenceNumber)};
89 };
90
91 template<class SrcMsgDetails, class DestMsgDetails, class SktT> inline std::ostream &
92 operator<<(std::ostream &os, exchange_to_client_transformations<SrcMsgDetails, DestMsgDetails, SktT> const &ec) noexcept(false);
93
94
95
96
97
98
99
100 template<class SrcMsgDetails, class SktT>
101 class simulator_responses final : public exchanges::common::simulator_responses<SrcMsgDetails, simulator_responses<SrcMsgDetails, SktT>, SktT> {
102 public:
103 using base_t=exchanges::common::simulator_responses<SrcMsgDetails, simulator_responses<SrcMsgDetails, SktT>, SktT>;
104 using msg_details_t=typename base_t::msg_details_t;
105 using src_msg_details_t=msg_details_t;
106 using socket_t=typename base_t::socket_t;
107
108
109 static inline constexpr typename msg_details_t::SecurityID_t instrumentID{"GB00BH4HKS39"};
110
111 static inline constexpr typename msg_details_t::SecurityID_t invalidInstrumentID{"GB0000595859"};
112
113 simulator_responses()=default;
114 simulator_responses(simulator_responses const &sr) noexcept(true)
115 : base_t(sr), msm{std::ref(*this)} {
116 }
117
118
119
120
121 bool process_msg(typename msg_details_t::msg_buffer_t const &buff, socket_t &exchg_skt, socket_t &client_skt) override;
122
123 std::string to_string() const noexcept(false);
124
125 private:
126 struct state_machine_t;
127 using machine=jmmcg::msm::unroll::machine<state_machine_t>;
128
129 const machine msm{std::ref(*this)};
130 };
131
132 template<class SrcMsgDetails, class SktT> inline std::ostream &
133 operator<<(std::ostream &os, simulator_responses<SrcMsgDetails, SktT> const &ec) noexcept(false);
134
135 } } } }
136
137 #include "processing_rules_impl.hpp"
138
139 #endif