This sample connects to the pre-defined host and port (acts as a FIX Initiator). When the session is established, the SingleOrder - New
FIX message is sent to the counterparty.
Source code:
Listener.h:
{
public:
void onStateChange(SessionState::Enum newState, SessionState::Enum prevState, Session * sn) ONIXS_FIXENGINE_FINAL;
void onError(ErrorReason::Enum reason,
const std::string & description, Session * sn) ONIXS_FIXENGINE_FINAL;
void onWarning(WarningReason::Enum reason,
const std::string & description, Session * sn) ONIXS_FIXENGINE_FINAL;
};
Listener.cpp:
#include "Listener.h"
void Listener::onInboundApplicationMsg(Message & msg, Session * )
{
std::clog << "\nIncoming application-level message:\n" << msg << std::endl;
}
void Listener::onInboundSessionMsg(Message & msg, Session * )
{
std::clog << "\nIncoming session-level message:\n" << msg << std::endl;
}
void Listener::onStateChange(SessionState::Enum newState, SessionState::Enum prevState,
Session * )
{
std::clog
<< "\nSession's state is changed, prevState="
<< SessionState::toString(prevState)
<< ", newState="
<< SessionState::toString(newState)
<< std::endl;
}
void Listener::onError(ErrorReason::Enum , const std::string & description, Session * )
{
std::cerr << "\nSession-level error:" << description << std::endl;
}
void Listener::onWarning(WarningReason::Enum , const std::string & description,
Session * )
{
std::cerr << "\nSession-level warning:" << description << std::endl;
}
BuySide.cpp:
#include "Listener.h"
#include "../../Common/Helpers.h"
#include "../../Common/Settings.h"
using namespace Settings;
int main()
{
std::clog << "BuySide sample." << std::endl << std::endl;
try {
manageLinuxSignals();
EngineSettings settings;
settings.dictionaryFile("FixDialectDescription.xml")
.licenseStore(LicenseStore);
Engine::init(settings);
Listener listener;
Session session(SenderCompId, TargetCompId, FixProtocolVersion, &listener);
Message customLogon(MsgType::Logon, FixProtocolVersion);
bool setResetSeqNumFlagInLogon = true;
customLogon.setFlag(Tags::ResetSeqNumFlag, setResetSeqNumFlagInLogon);
const std::string rawData;
if(! rawData.empty()) {
customLogon.set(Tags::RawData, rawData)
.set(Tags::RawDataLength, (int) rawData.size());
}
const std::string counterpartyHost = "localhost";
const int counterpartyPort =
#ifdef SSL_ENCRYPTION
SslListenPort;
#else
ListenPort;
#endif
const int heartBtInt = 30;
#ifdef SSL_ENCRYPTION
std::clog << "SSL Mode." << std::endl;
#endif
session.
logonAsInitiator(counterpartyHost, counterpartyPort, heartBtInt, &customLogon);
std::clog << "Press any key to send the order..." << std::endl;
waitUntilEnterKey();
Message order(MsgType::Order_Single, FixProtocolVersion);
setOrderFields(&order);
std::clog << "The order " << std::endl << order << std::endl << " was sent" << std::endl;
std::clog << "Press any key to disconnect the session and terminate the application." << std::endl;
waitUntilEnterKey();
Engine::shutdown();
}
catch(const std::exception & ex) {
processSampleException(ex.what());
return 1;
}
return 0;
}