From 030034f51f335175a82ece0d4e2853a3c86a8cba Mon Sep 17 00:00:00 2001 From: Mike Kipnis Date: Fri, 15 May 2026 17:20:18 +0000 Subject: [PATCH 1/2] QuickFIX: C++17 update --- CMakeLists.txt | 2 +- FIXGateway/src/Application.cpp | 12 +++--------- FIXGateway/src/Application.hpp | 12 +++--------- FIXGateway/src/SocketAcceptor.cpp | 10 +++++----- FIXGateway/src/SocketAcceptor.h | 4 ++-- FIXGateway/src/SocketConnection.cpp | 2 +- FIXGateway/src/SocketConnection.h | 2 +- LatencyTest/Application.cpp | 2 -- LatencyTest/Application.h | 6 +++--- .../cpp_ws_reactjs/fix_ws_proxy/fix_application.cpp | 4 ++-- .../cpp_ws_reactjs/fix_ws_proxy/fix_application.h | 12 +++--------- 11 files changed, 24 insertions(+), 44 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 501bad70..7513d16c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,7 @@ project(DistributedATS) set(CMAKE_PREFIX_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) -set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) diff --git a/FIXGateway/src/Application.cpp b/FIXGateway/src/Application.cpp index 64f9bf42..6542ef0a 100644 --- a/FIXGateway/src/Application.cpp +++ b/FIXGateway/src/Application.cpp @@ -149,21 +149,15 @@ void DATSApplication::toAdmin(FIX::Message &message, const FIX::SessionID &sessionID) {} void DATSApplication::toApp( FIX::Message &message, - const FIX::SessionID &sessionID) throw(FIX::DoNotSend) {} + const FIX::SessionID &sessionID) {} void DATSApplication::fromAdmin( const FIX::Message &message, - const FIX::SessionID &sessionID) throw(FIX::FieldNotFound, - FIX::IncorrectDataFormat, - FIX::IncorrectTagValue, - FIX::RejectLogon) {} + const FIX::SessionID &sessionID) {} void DATSApplication::fromApp( const FIX::Message &message, - const FIX::SessionID &sessionID) throw(FIX::FieldNotFound, - FIX::IncorrectDataFormat, - FIX::IncorrectTagValue, - FIX::UnsupportedMessageType) { + const FIX::SessionID &sessionID) { crack(message, sessionID); } diff --git a/FIXGateway/src/Application.hpp b/FIXGateway/src/Application.hpp index ed41cdaf..0b1c737c 100644 --- a/FIXGateway/src/Application.hpp +++ b/FIXGateway/src/Application.hpp @@ -59,18 +59,12 @@ class DATSApplication : public FIX::Application, public FIX::MessageCracker { void onLogon(const FIX::SessionID &sessionID); void onLogout(const FIX::SessionID &sessionID); void toAdmin(FIX::Message &, const FIX::SessionID &); - void toApp(FIX::Message &, const FIX::SessionID &) throw(FIX::DoNotSend); + void toApp(FIX::Message &, const FIX::SessionID &); void fromAdmin(const FIX::Message &, - const FIX::SessionID &) throw(FIX::FieldNotFound, - FIX::IncorrectDataFormat, - FIX::IncorrectTagValue, - FIX::RejectLogon); + const FIX::SessionID &); void fromApp(const FIX::Message &message, - const FIX::SessionID &sessionID) throw(FIX::FieldNotFound, - FIX::IncorrectDataFormat, - FIX::IncorrectTagValue, - FIX::UnsupportedMessageType); + const FIX::SessionID &sessionID); void onMessage(const FIX44::NewOrderSingle &, const FIX::SessionID &); void onMessage(const FIX44::OrderCancelRequest &, const FIX::SessionID &); diff --git a/FIXGateway/src/SocketAcceptor.cpp b/FIXGateway/src/SocketAcceptor.cpp index a34b0046..c6bb0601 100644 --- a/FIXGateway/src/SocketAcceptor.cpp +++ b/FIXGateway/src/SocketAcceptor.cpp @@ -38,13 +38,13 @@ using namespace FIX; namespace DistributedATS { SocketAcceptor::SocketAcceptor( DistributedATS::DATSApplication &application, MessageStoreFactory &factory, - const SessionSettings &settings) throw(ConfigError) + const SessionSettings &settings) : Acceptor(application, factory, settings), m_pServer(0) {} SocketAcceptor::SocketAcceptor( DistributedATS::DATSApplication &application, MessageStoreFactory &factory, const SessionSettings &settings, FIX::LogFactory &logFactory/*, - std::ofstream *dds_input_stream_log_file*/) throw(ConfigError) + std::ofstream *dds_input_stream_log_file*/) : Acceptor(application, factory, settings, logFactory), m_pServer(0) {} SocketAcceptor::~SocketAcceptor() { @@ -53,7 +53,7 @@ SocketAcceptor::~SocketAcceptor() { delete iter->second; } -void SocketAcceptor::onConfigure(const SessionSettings &s) throw(ConfigError) { +void SocketAcceptor::onConfigure(const SessionSettings &s) { std::set sessions = s.getSessions(); std::set::iterator i; for (i = sessions.begin(); i != sessions.end(); ++i) { @@ -66,8 +66,8 @@ void SocketAcceptor::onConfigure(const SessionSettings &s) throw(ConfigError) { } } -void SocketAcceptor::onInitialize(const SessionSettings &s) throw( - RuntimeError) { +void SocketAcceptor::onInitialize(const SessionSettings &s) + { short port = 0; try { diff --git a/FIXGateway/src/SocketAcceptor.h b/FIXGateway/src/SocketAcceptor.h index 6cc0a099..ecbf82b8 100644 --- a/FIXGateway/src/SocketAcceptor.h +++ b/FIXGateway/src/SocketAcceptor.h @@ -42,10 +42,10 @@ class SocketAcceptor : public FIX::Acceptor, FIX::SocketServer::Strategy { public: SocketAcceptor(DistributedATS::DATSApplication &, FIX::MessageStoreFactory &, - const FIX::SessionSettings &) throw(FIX::ConfigError); + const FIX::SessionSettings &); SocketAcceptor(DistributedATS::DATSApplication &, FIX::MessageStoreFactory &, const FIX::SessionSettings &, FIX::LogFactory &/*, - std::ofstream */ ) throw(FIX::ConfigError); + std::ofstream */ ); virtual ~SocketAcceptor(); diff --git a/FIXGateway/src/SocketConnection.cpp b/FIXGateway/src/SocketConnection.cpp index f032b53b..a139f34e 100644 --- a/FIXGateway/src/SocketConnection.cpp +++ b/FIXGateway/src/SocketConnection.cpp @@ -210,7 +210,7 @@ bool SocketConnection::isValidSession() { return !(m_sessions.find(sessionID) == m_sessions.end()); } -void SocketConnection::readFromSocket() throw(SocketRecvFailed) { +void SocketConnection::readFromSocket() { ssize_t size = socket_recv(m_socket, m_buffer, sizeof(m_buffer)); if (size <= 0) throw SocketRecvFailed(size); diff --git a/FIXGateway/src/SocketConnection.h b/FIXGateway/src/SocketConnection.h index 37d3bdf0..184b912d 100644 --- a/FIXGateway/src/SocketConnection.h +++ b/FIXGateway/src/SocketConnection.h @@ -94,7 +94,7 @@ class SocketConnection : public Responder { private: typedef std::deque> Queue; - void readFromSocket() throw(SocketRecvFailed); + void readFromSocket(); bool readMessage(std::string &msg); void readMessages(SocketMonitor &s); diff --git a/LatencyTest/Application.cpp b/LatencyTest/Application.cpp index 14ba843f..fdc0d764 100644 --- a/LatencyTest/Application.cpp +++ b/LatencyTest/Application.cpp @@ -101,13 +101,11 @@ void Application::onLogout( const FIX::SessionID& sessionID ) } void Application::fromApp( const FIX::Message& message, const FIX::SessionID& sessionID ) -throw( FIX::FieldNotFound, FIX::IncorrectDataFormat, FIX::IncorrectTagValue, FIX::UnsupportedMessageType ) { crack( message, sessionID ); } void Application::toApp( FIX::Message& message, const FIX::SessionID& sessionID ) -throw( FIX::DoNotSend ) { try { diff --git a/LatencyTest/Application.h b/LatencyTest/Application.h index 23649d5d..40084881 100644 --- a/LatencyTest/Application.h +++ b/LatencyTest/Application.h @@ -72,10 +72,10 @@ namespace LatencyTest void onLogon( const FIX::SessionID& sessionID ); void onLogout( const FIX::SessionID& sessionID ); void toAdmin( FIX::Message&, const FIX::SessionID& ); - void toApp( FIX::Message&, const FIX::SessionID& ) throw( FIX::DoNotSend ); - void fromAdmin( const FIX::Message&, const FIX::SessionID& ) throw( FIX::FieldNotFound, FIX::IncorrectDataFormat, FIX::IncorrectTagValue, FIX::RejectLogon ) {}; + void toApp( FIX::Message&, const FIX::SessionID& ) ; + void fromAdmin( const FIX::Message&, const FIX::SessionID& ) {}; - void fromApp( const FIX::Message& message, const FIX::SessionID& sessionID ) throw( FIX::FieldNotFound, FIX::IncorrectDataFormat, FIX::IncorrectTagValue, FIX::UnsupportedMessageType ); + void fromApp( const FIX::Message& message, const FIX::SessionID& sessionID ); void onMessage( const FIX44::ExecutionReport&, const FIX::SessionID& ); void onMessage( const FIX44::MarketDataIncrementalRefresh&, const FIX::SessionID&); diff --git a/MiscClients/cpp_ws_reactjs/fix_ws_proxy/fix_application.cpp b/MiscClients/cpp_ws_reactjs/fix_ws_proxy/fix_application.cpp index 1015a624..0b60445a 100644 --- a/MiscClients/cpp_ws_reactjs/fix_ws_proxy/fix_application.cpp +++ b/MiscClients/cpp_ws_reactjs/fix_ws_proxy/fix_application.cpp @@ -48,7 +48,7 @@ void fix_application::toAdmin(FIX::Message& message, const FIX::SessionID& sessi } -void fix_application::fromAdmin(const FIX::Message& message, const FIX::SessionID& sessionId) throw(FIX::FieldNotFound, FIX::IncorrectDataFormat, FIX::IncorrectTagValue, FIX::RejectLogon) +void fix_application::fromAdmin(const FIX::Message& message, const FIX::SessionID& sessionId) { // Convert FIX message to JSON auto json_obj = distributed_ats::fix_json::fix_to_json(message); @@ -74,7 +74,7 @@ void fix_application::fromAdmin(const FIX::Message& message, const FIX::SessionI } -void fix_application::fromApp(const FIX::Message& message, const FIX::SessionID& sessionId) throw(FIX::FieldNotFound, FIX::IncorrectDataFormat, FIX::IncorrectTagValue, FIX::UnsupportedMessageType) +void fix_application::fromApp(const FIX::Message& message, const FIX::SessionID& sessionId) { // Convert FIX message to JSON auto json_obj = distributed_ats::fix_json::fix_to_json(message); diff --git a/MiscClients/cpp_ws_reactjs/fix_ws_proxy/fix_application.h b/MiscClients/cpp_ws_reactjs/fix_ws_proxy/fix_application.h index 2f794f12..6082c00e 100644 --- a/MiscClients/cpp_ws_reactjs/fix_ws_proxy/fix_application.h +++ b/MiscClients/cpp_ws_reactjs/fix_ws_proxy/fix_application.h @@ -26,18 +26,12 @@ class fix_application : public FIX::Application { void toAdmin(FIX::Message& message, const FIX::SessionID& sessionID) override; void fromAdmin(const FIX::Message &, - const FIX::SessionID &) throw(FIX::FieldNotFound, - FIX::IncorrectDataFormat, - FIX::IncorrectTagValue, - FIX::RejectLogon) override; + const FIX::SessionID &) override; void fromApp(const FIX::Message &message, - const FIX::SessionID &sessionID) throw(FIX::FieldNotFound, - FIX::IncorrectDataFormat, - FIX::IncorrectTagValue, - FIX::UnsupportedMessageType) override; + const FIX::SessionID &sessionID) override; - void toApp(FIX::Message&, const FIX::SessionID&) throw(FIX::DoNotSend) override {}; + void toApp(FIX::Message&, const FIX::SessionID&) override {}; private: std::weak_ptr _ws_session; From 399e75acff6345c7468403ea1277b0b51f6996b1 Mon Sep 17 00:00:00 2001 From: Mike Kipnis Date: Sat, 16 May 2026 13:05:39 +0000 Subject: [PATCH 2/2] cxx17 and ats.ustreasuries.online - setup --- .../webtrader_reactjs_ws/src/App.js | 15 +++++++++++++++ docker/build_distributed_ats.sh | 2 +- docker/fixproxy.ini | 17 +++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 docker/fixproxy.ini diff --git a/MiscClients/cpp_ws_reactjs/webtrader_reactjs_ws/src/App.js b/MiscClients/cpp_ws_reactjs/webtrader_reactjs_ws/src/App.js index 53e3128d..68b538f6 100644 --- a/MiscClients/cpp_ws_reactjs/webtrader_reactjs_ws/src/App.js +++ b/MiscClients/cpp_ws_reactjs/webtrader_reactjs_ws/src/App.js @@ -45,14 +45,29 @@ function App() { const [histData, setHistData] = useState([]); +/* function getWebSocketUrl() { const host = window.location.hostname; // localhost, docker container, or prod host const port = 9002; // your FIX WS port const protocol = window.location.protocol === "https:" ? "wss" : "ws"; return `${protocol}://${host}:${port}`; } +*/ +function getWebSocketUrl() { + const host = window.location.hostname; + const protocol = window.location.protocol === "https:" ? "wss" : "ws"; + + // Only special-case production domain + if (host === "ats.alpharesearch.online" || host === "ats.ustreasuries.online") { + return `${protocol}://${host}/ws`; + } + + // everything else keeps old behavior + return `${protocol}://${host}:9002`; +} + // ===================================================================================== // FIX LOGON CALLBACK (USER PRESSES LOGIN BUTTON) // ===================================================================================== diff --git a/docker/build_distributed_ats.sh b/docker/build_distributed_ats.sh index bf454bc5..d208fc49 100755 --- a/docker/build_distributed_ats.sh +++ b/docker/build_distributed_ats.sh @@ -1,6 +1,6 @@ #!/bin/bash -git clone -b misc_1025 https://github.com/mkipnis/DistributedATS /opt/distributed_ats_src +git clone -b cxx17 https://github.com/mkipnis/DistributedATS /opt/distributed_ats_src cd /opt/distributed_ats_src cmake -S . -B build -DCMAKE_INSTALL_PREFIX=/usr/local -DDDS_ROOT_DIR=/usr/local -DLOG4CXX_ROOT_DIR=/usr/local -DQUICKFIX_ROOT_DIR=/usr/local -DLIQUIBOOK_ROOT_DIR=/usr/local diff --git a/docker/fixproxy.ini b/docker/fixproxy.ini new file mode 100644 index 00000000..d9fb336a --- /dev/null +++ b/docker/fixproxy.ini @@ -0,0 +1,17 @@ +[DEFAULT] +BeginString=FIX.4.4 +ConnectionType=initiator +ReconnectInterval=30 +FileStorePath=/tmp/store +FileLogPath=/tmp/log +StartTime=00:00:00 +EndTime=00:00:00 +ResetOnLogon=Y +ResetSeqNumFlag=Y +ResetOnDisconnect=Y + +TargetCompID=FIX_GWY_1 +SocketConnectHost=distributed_ats +SocketConnectPort=15001 +HeartBtInt=30 +DataDictionary=/usr/local/spec/FIX44.xml