root/isimud/exchanges/links/fix_to_batsboe_program_options_impl.hpp

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. create_program_options

   1 /******************************************************************************
   2 ** $Header: svn+ssh://jmmcg@svn.code.sf.net/p/libjmmcg/code/trunk/libjmmcg/core/exchanges/links/fix_to_batsboe_main_impl.hpp 2055 2017-05-13 19:35:47Z jmmcg $
   3 **
   4 ** Copyright (c) 2017 by J.M.McGuiness, isimud@hussar.me.uk
   5 **
   6 ** This library is free software; you can redistribute it and/or
   7 ** modify it under the terms of the GNU Lesser General Public
   8 ** License as published by the Free Software Foundation; either
   9 ** version 2.1 of the License, or (at your option) any later version.
  10 **
  11 ** This library is distributed in the hope that it will be useful,
  12 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14 ** Lesser General Public License for more details.
  15 **
  16 ** You should have received a copy of the GNU Lesser General Public
  17 ** License along with this library; if not, write to the Free Software
  18 ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  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 } } }

/* [<][>][^][v][top][bottom][index][help] */