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. This is done using Solarflare TCPDirect© technology.
Source code:
TcpDirectListener.h:
#include "../Common/Settings.h"
#include "../Common/Helpers.h"
using namespace Settings;
{
public:
{
return started_;
}
{
return finished_;
}
{
std::clog << "\nIncoming application-level message:\n" << msg << std::endl;
try
{
if(msg.
type() == OnixS::FIX::FIX44::Values::MsgType::NewOrderSingle)
{
OnixS::FIX::Message execReport(OnixS::FIX::FIX44::Values::MsgType::ExecutionReport, FixProtocolVersion);
execReport.
set(OnixS::FIX::FIX44::Tags::OrderID, order.
get(OnixS::FIX::FIX44::Tags::ClOrdID).
toString())
.set(OnixS::FIX::FIX44::Tags::ExecType, "0")
.
set(OnixS::FIX::FIX44::Tags::ExecTransType,
"0")
.
set(OnixS::FIX::FIX44::Tags::OrdStatus,
"0")
.
set(OnixS::FIX::FIX44::Tags::Symbol, order.
get(OnixS::FIX::FIX44::Tags::Symbol).
toString())
.
set(OnixS::FIX::FIX44::Tags::Side, order.
get(OnixS::FIX::FIX44::Tags::Side).
toString())
.
set(OnixS::FIX::FIX44::Tags::OrderQty, order.
get(OnixS::FIX::FIX44::Tags::OrderQty).
toString())
.
set(OnixS::FIX::FIX44::Tags::CumQty, order.
get(OnixS::FIX::FIX44::Tags::OrderQty).
toString())
.set(OnixS::FIX::FIX44::Tags::AvgPx, 100.0)
.
set(OnixS::FIX::FIX44::Tags::LastPx, 0)
.
set(OnixS::FIX::FIX44::Tags::LeavesQty, order.
get(OnixS::FIX::FIX44::Tags::OrderQty).
toString());
std::clog << "\nSent to the counterparty:\n" << execReport << std::endl;
}
}
catch(const std::exception & ex)
{
std::clog << "Exception during the processing of incoming message: " << ex.what() << std::endl;
}
}
{
std::clog << "\nIncoming session-level message:\n" << msg << std::endl;
}
{
std::clog
<< "\nSession's state is changed, prevState="
<< ", newState="
<< std::endl;
started_ = true;
finished_ = true;
}
{
std::cerr << "\nSession-level error:" << description << std::endl;
finished_ = true;
}
{
std::cerr << "\nSession-level warning:" << description << std::endl;
}
private:
bool started_;
bool finished_;
};
TCPDirectBuySide.cpp:
#include "../../Common/TcpDirectListener.h"
using namespace Settings;
using namespace OnixS::FIX::FIX44;
int main()
{
std::clog << "TCPDirect BuySide sample." << std::endl << std::endl;
const std::string counterpartyHost = "";
const std::string networkInterfaceName = "";
if(counterpartyHost.empty() || networkInterfaceName.empty())
{
std::cerr << "Please perform the setup." << std::endl;
return 1;
}
try
{
manageLinuxSignals();
Engine::init(settings);
TcpDirectListener listener;
Session session(&stack, SenderCompId, TargetCompId, FixProtocolVersion, &listener);
const bool setResetSeqNumFlagOnLogon = true;
const int counterpartyPort = ListenPort;
const int heartBtInt = 30;
std::clog << "Press any key to send the order..." << std::endl;
while(!listener.finished() && !keyPressed())
Message order(Values::MsgType::NewOrderSingle, 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;
while(!listener.finished() && !keyPressed())
session.
logoutAsync(
"The session is disconnected by TCPDirect");
while(!listener.finished())
Engine::shutdown();
}
catch(const std::exception & ex)
{
processSampleException(ex.what());
return 1;
}
return 0;
}