This source file includes following definitions.
- create_program_options
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 namespace isimud { namespace exchanges { namespace BATSBOE {
22
23 template<class Link>
24 inline boost::program_options::options_description
25 create_program_options(boost::program_options::options_description &&all) noexcept(false) {
26 using link_t=Link;
27 using exchange_msg_details_t=typename link_t::exchange_msg_details_t;
28 using socket_t=typename link_t::socket_t;
29 using proc_rules_t=BATSBOE::common::simulator_responses<exchange_msg_details_t, socket_t>;
30
31 std::string const MIC_code=[]() {
32 std::ostringstream ss;
33 exchanges::common::mic_codes::to_stream<exchange_msg_details_t::MIC_code>(ss);
34 return ss.str();
35 }();
36 std::ostringstream os;
37 std::string const details=os.str()+"\n"+[]() {
38 std::ostringstream ss;
39 ss<<"ISO 10383: MIC Codes official information: ";
40 decltype(+exchanges::common::mic_codes::collection[
41 boost::hana::int_c<
42 static_cast<
43 std::underlying_type<exchanges::common::mic_codes::ISO_10383_MIC_Codes>::type
44 >(
45 exchange_msg_details_t::MIC_code
46 )
47 >
48 ])::type::to_stream(ss);
49 return ss.str();
50 }();
51
52 boost::program_options::options_description link_opts((MIC_code+" link options.").c_str());
53 link_opts.add_options()
54 (
55 (MIC_code+"_sequence_number").c_str(),
56 boost::program_options::value<unsigned>()->required(),
57 "The initial sequence number that should be used to log on to the exchange."
58 )
59 (
60 (MIC_code+"_session_sub_id").c_str(),
61 boost::program_options::value<unsigned>()->required(),
62 "The session sub ID that should be used to log on to the exchange."
63 )
64 (
65 (MIC_code+"_no_unspec_replay").c_str(),
66 boost::program_options::value<bool>()->required(),
67 "Whether no unspecified replays should be used to log on to the exchange."
68 );
69 boost::program_options::options_description client("FIX-client options.");
70 client.add_options()
71 (
72 "client_address",
73 boost::program_options::value<std::string>()->required()->default_value(boost::asio::ip::address_v4::loopback().to_string()),
74 "IP address (in v4 format) to which the translator should listen."
75 )
76 (
77 "client_port",
78 boost::program_options::value<unsigned short>()->required(),
79 "An unused port to which the translator should listen."
80 );
81 boost::program_options::options_description exchange("Exchange options (the defaults are suitable for use with the simulator)");
82 exchange.add_options()
83 (
84 (MIC_code+"_gateway_address").c_str(),
85 boost::program_options::value<std::string>()->required()->default_value(boost::asio::ip::address_v4::loopback().to_string()),
86 "IP address (in v4 format) of the gateway to which the translator should connect."
87 )
88 (
89 (MIC_code+"_gateway_port").c_str(),
90 boost::program_options::value<unsigned short>()->required(),
91 "The port of the gateway to which the translator should connect."
92 )
93 (
94 (MIC_code+"_username").c_str(),
95 boost::program_options::value<std::string>()->required()->default_value(proc_rules_t::username.begin()),
96 "The username with which to connect to the exchange."
97 )
98 (
99 (MIC_code+"_password").c_str(),
100 boost::program_options::value<std::string>()->required()->default_value(proc_rules_t::password.begin()),
101 "The password with which to connect to the exchange."
102 )
103 (
104 (MIC_code+"_logout_reason").c_str(),
105 boost::program_options::value<std::string>()->required()->default_value("TTFN"),
106 "The reason that should be used when logging out of the connected exchange."
107 );
108 boost::program_options::options_description all_opts(details);
109 all_opts.add(link_opts).add(client).add(exchange);
110 all.add(all_opts);
111 return all;
112 }
113
114 } } }