BetaTrader
A HFT Eco-System
Loading...
Searching...
No Matches
FixClientSession.h
Go to the documentation of this file.
1
6#pragma once
7
10#include <asio.hpp>
11#include <string>
12#include <memory>
13#include <functional>
14#include <atomic>
15
16namespace fix_client {
17
22 enum class FixClientState {
25 Connected, // TCP up, Logon not sent
27 Active, // Logon ACK received
29 };
30
35 class FixClientSession : public std::enable_shared_from_this<FixClientSession> {
36 public:
40 using MessageCallback = std::function<void(const ParsedFixMessage&)>;
41
45 using StateChangeCallback = std::function<void(FixClientState)>;
46
53 FixClientSession(asio::io_context& ioContext,
54 const std::string& senderCompId,
55 const std::string& targetCompId,
56 const std::string& seqStoreDir = "seq_store");
57
59
63 void connect(const std::string& host, short port);
64
68 void disconnect();
69
75 void sendLogon(int heartbeatInterval = 30, bool forceReset = false);
76
80 void sendLogout(const std::string& reason = "");
81
87 void sendMessage(const std::string& msgType, const std::string& bodyStr);
88
92 void sendAuthRequest(const std::string& username, const std::string& password);
93
94 void sendNewOrder(const std::string& symbol, char side, double price, int qty, char type = '2', char tif = '0');
95 void sendMarketDataRequest(const std::string& symbol, char subscriptionRequestType = '1');
96
97 // --- Configuration & Callbacks ---
98
99 void setMessageCallback(MessageCallback cb) { mMessageCb = std::move(cb); }
101 void setHeartbeatInterval(int seconds) { mHeartbeatInterval = seconds; }
102
103 FixClientState getState() const { return mState; }
104 const std::string& getSenderCompId() const { return mSenderCompId; }
105
106 private:
107 void doRead();
108 void doWrite(std::shared_ptr<std::string> message);
109
110 void handleProtocolMessage(const std::string& msgStr);
111 void handleLogonResponse(const std::string& msgStr, uint32_t inSeq);
112 void handleLogoutResponse(const std::string& msgStr);
113 void handleHeartbeat(const std::string& msgStr);
114 void handleTestRequest(const std::string& msgStr);
115 void handleResendRequest(const std::string& msgStr);
116 void handleSequenceReset(const std::string& msgStr);
117
118 void changeState(FixClientState newState);
119 void startHeartbeatTimer();
121
122 // Dependencies
123 asio::io_context& mIoContext;
124 asio::ip::tcp::socket mSocket;
125 asio::ip::tcp::resolver mResolver;
126 asio::steady_timer mHeartbeatTimer;
127 asio::steady_timer mTestReqTimer;
128
129 // Configuration
130 std::string mSenderCompId;
131 std::string mTargetCompId;
133
134 // State Machine
135 std::atomic<FixClientState> mState{FixClientState::Disconnected};
137
138 // Buffers
139 static constexpr size_t ChunkSize = 8192;
140 std::vector<char> mReadChunk;
141 std::string mReadBuffer;
142
143 // Callbacks
146
148 };
149
150} // namespace fix_client
Declares the FixMessageParser class for parsing incoming FIX messages for the client.
Manages persistence of FIX sequence numbers for the client.
High-performance asynchronous FIX client using ASIO.
Definition FixClientSession.h:35
void handleHeartbeat(const std::string &msgStr)
Definition FixClientSession.cpp:246
void handleSequenceReset(const std::string &msgStr)
Definition FixClientSession.cpp:287
SeqNumStore mSeqStore
Definition FixClientSession.h:136
void doWrite(std::shared_ptr< std::string > message)
Definition FixClientSession.cpp:127
StateChangeCallback mStateChangeCb
Definition FixClientSession.h:145
void changeState(FixClientState newState)
Definition FixClientSession.cpp:297
static constexpr size_t ChunkSize
Definition FixClientSession.h:139
void setStateChangeCallback(StateChangeCallback cb)
Definition FixClientSession.h:100
asio::ip::tcp::resolver mResolver
Definition FixClientSession.h:125
int mHeartbeatInterval
Definition FixClientSession.h:132
asio::io_context & mIoContext
Definition FixClientSession.h:123
asio::ip::tcp::socket mSocket
Definition FixClientSession.h:124
asio::steady_timer mTestReqTimer
Definition FixClientSession.h:127
std::string mSenderCompId
Definition FixClientSession.h:130
void setMessageCallback(MessageCallback cb)
Definition FixClientSession.h:99
void disconnect()
Closes the socket and stops reading.
Definition FixClientSession.cpp:56
void startTestRequestTimer()
Definition FixClientSession.cpp:323
FixClientState getState() const
Definition FixClientSession.h:103
void sendAuthRequest(const std::string &username, const std::string &password)
Helper to send an authenticated UserRequest (35=BE)
void sendLogout(const std::string &reason="")
Sends a Logout (35=5) request.
Definition FixClientSession.cpp:102
void sendLogon(int heartbeatInterval=30, bool forceReset=false)
Sends a Logon (35=A) request. Must be called after connect() is successful.
Definition FixClientSession.cpp:67
void handleLogoutResponse(const std::string &msgStr)
Definition FixClientSession.cpp:241
std::string mTargetCompId
Definition FixClientSession.h:131
friend class FixClientSessionTests
Definition FixClientSession.h:147
void startHeartbeatTimer()
Definition FixClientSession.cpp:304
void doRead()
Definition FixClientSession.cpp:140
void handleTestRequest(const std::string &msgStr)
Definition FixClientSession.cpp:251
std::vector< char > mReadChunk
Definition FixClientSession.h:140
void setHeartbeatInterval(int seconds)
Definition FixClientSession.h:101
void handleLogonResponse(const std::string &msgStr, uint32_t inSeq)
Definition FixClientSession.cpp:235
asio::steady_timer mHeartbeatTimer
Definition FixClientSession.h:126
void sendNewOrder(const std::string &symbol, char side, double price, int qty, char type='2', char tif='0')
Definition FixClientSession.cpp:327
void sendMessage(const std::string &msgType, const std::string &bodyStr)
Queues a raw FIX message body to be properly headed, trailed, sequenced, and sent.
Definition FixClientSession.cpp:114
~FixClientSession()
Definition FixClientSession.cpp:27
void handleResendRequest(const std::string &msgStr)
Definition FixClientSession.cpp:266
std::function< void(FixClientState)> StateChangeCallback
Callback type for state transitions (e.g. Disconnected -> Active).
Definition FixClientSession.h:45
void connect(const std::string &host, short port)
Connects to the remote FIX server asynchronously.
Definition FixClientSession.cpp:31
const std::string & getSenderCompId() const
Definition FixClientSession.h:104
std::string mReadBuffer
Definition FixClientSession.h:141
std::function< void(const ParsedFixMessage &)> MessageCallback
Callback type for when a fully parsed message falls out of the protocol engine.
Definition FixClientSession.h:40
void sendMarketDataRequest(const std::string &symbol, char subscriptionRequestType='1')
Definition FixClientSession.cpp:351
MessageCallback mMessageCb
Definition FixClientSession.h:144
std::atomic< FixClientState > mState
Definition FixClientSession.h:135
void handleProtocolMessage(const std::string &msgStr)
Definition FixClientSession.cpp:172
A thread-safe, file-backed repository for FIX Sequence Numbers.
Definition SeqNumStore.h:21
Definition AuthManager.h:13
FixClientState
Definition FixClientSession.h:22
std::variant< std::monostate, fix::ExecutionReport, fix::MarketDataSnapshotFullRefresh, fix::MarketDataIncrementalRefresh > ParsedFixMessage
A variant representing the possible parsed messages received by the client.
Definition FixMessageParser.h:25