OnixS C++ ICE Binary Order Entry Handler 1.2.3
API Documentation
Loading...
Searching...
No Matches
ExternalThreadMode.cpp File Reference

Go to the source code of this file.

Functions

int main (int argc, char *argv[])

Function Documentation

◆ main()

int main ( int argc,
char * argv[] )

Definition at line 36 of file ExternalThreadMode.cpp.

37{
38 // `--help` to show options.
39 const AppConfiguration<
41 > cfg{"ExternalThreadMode", argc, argv};
42
43 try
44 {
46
47 auto settings = fillSettings(cfg);
48 const auto emulator = createEmulator(settings, cfg);
49
50 // Request Binary Order Gateway credentials from Binary Utility Service Gateway.
51 const auto bgwCredentials = receiveBgwCredentials(settings, cfg.host(), cfg.port());
52
53 Listener listener;
54 TcpStandardStack stack;
55
56 settings.threadingModel(ThreadingModel::External);
57
58 // A 'BGW' session.
59 const auto bgwSession= makeUnique<BgwSession>(stack, settings, &listener, cfg.storage());
60 const auto connectTask = bgwSession->connectAsync(bgwCredentials);
61
62 while (!connectTask.is_ready())
63 stack.dispatchEvents();
64
65 bgwSession->send(Helper::createTraderLogonRequest(cfg.traderId(), cfg.traderPwd()));
66 Samples::wait(stack, listener.traderLoggedOn).get();
67
68 bgwSession->send(Helper::createOrder(cfg.traderId()));
69
70 std::clog << "\nPress <Ctrl+C> to disconnect the BGW session and terminate the application." << std::endl;
71
73 stack.dispatchEvents();
74
75 bgwSession->send(Helper::createTraderLogoutRequest(cfg.traderId()));
76
77 const auto disconnectTask = bgwSession->disconnectAsync("The BGW session is disconnected");
78
79 while (!disconnectTask.is_ready() || !stack.isQuiescent())
80 stack.dispatchEvents();
81 }
82 catch(const std::exception & ex)
83 {
84 std::cerr << "\nEXCEPTION: " << ex.what() << std::endl;
85 return 1;
86 }
87
88 return 0;
89}
A high-level wrapper over the TCP standard stack.
ONIXS_ICEBOE_FORCEINLINE void dispatchEvents() override
Processes events on a stack and performs the necessary handling.
ONIXS_ICEBOE_FORCEINLINE bool isQuiescent() const override
static MessageHolder< NewOrderRequest > createOrder(const std::string &traderId)
Definition Helpers.h:104
static MessageHolder< TraderLogoutRequest > createTraderLogoutRequest(const std::string &traderId)
Definition Helpers.h:95
static MessageHolder< TraderLogonRequest > createTraderLogonRequest(const std::string &traderId, const std::string &traderPwd)
Definition Helpers.h:77
std::promise< void > traderLoggedOn
Definition Listener.h:224
std::pair< std::unique_ptr< GatewayEmulatorThread< BusSessionGatewayListener > >, std::unique_ptr< GatewayEmulatorThread< GatewayListener > > > createEmulator(const SessionSettings &settings, const ConnectivityConfiguration &cfg, bool tcpDirect=false)
Definition Emulator.h:159
BgwCredentials receiveBgwCredentials(SessionSettings settings, std::string host, Port port)
Definition Listener.h:265
SessionSettings fillSettings(const LogonConfiguration &logonCfg, const ConnectivityConfiguration &connCfg, const SettingsConfiguration &settingsCfg)
Definition Settings.h:32
std::future< T > wait(Stack &stack, std::promise< T > &promise, std::chrono::seconds timeout=std::chrono::seconds{30})
Definition Listener.h:228
std::unique_ptr< T > makeUnique(Args &&...args)
Definition Tools.h:30
@ External
Session events are handled by rolling an event loop in a user thread.
static ONIXS_ICEBOE_FORCEINLINE bool interruptDetected() noexcept
Definition Signal.h:52
static void manageSignals() noexcept
Definition Signal.h:46