25#if defined(ONIXS_B3_BOE_HAS_GATEWAY_EMULATOR)
46 Message::blockLength(Message::Schema::Version)
48 + Message::getMinimalVariableFieldsSize(Message::Schema::Version);
70 using Timeout = std::chrono::milliseconds;
108 std::atomic<
bool>* stopRequested =
nullptr);
117 const
char *
host() const noexcept;
128 template <typename SbeMessageType,
size_t MaxMessageSize, typename MessageInitializer>
133 template <typename SbeMessageType,
size_t MaxMessageSize, typename MessageInitializer>
138 template <typename SbeMessageType,
size_t MaxMessageSize, typename MessageInitializer>
143 template <typename SbeMessageType,
size_t MaxMessageSize, typename MessageInitializer>
148 template <typename SbeMessageType,
size_t MaxMessageSize, typename MessageInitializer>
153 template <typename SbeMessageType,
size_t MaxMessageSize, typename MessageInitializer>
160 template <typename TMsg>
342template <
typename TMsg>
348template <
typename SbeMessageType,
size_t MaxMessageSize,
typename MessageInitializer>
351 const auto messageSize = msg.
setHeader();
352 auto*
const header = msg.
header();
358template <
typename SbeMessageType,
size_t MaxMessageSize,
typename MessageInitializer>
364template <
typename SbeMessageType,
size_t MaxMessageSize,
typename MessageInitializer>
367 auto & header = msg->businessHeader();
368 header.setMsgSeqNum(num);
372template <
typename SbeMessageType,
size_t MaxMessageSize,
typename MessageInitializer>
375 auto & header = msg->businessHeader();
376 header.setMsgSeqNum(num);
380template <
typename SbeMessageType,
size_t MaxMessageSize,
typename MessageInitializer>
384 for(
auto seqNum : numbers)
392template <
typename SbeMessageType,
size_t MaxMessageSize,
typename MessageInitializer>
396 for(
auto seqNum : numbers)
#define ONIXS_B3_BOE_NODISCARD
#define ONIXS_B3_BOE_EXPORTED
Contains the SimpleOpenFramingHeader, the SBE message, and the data buffer.
const SimpleOpenFramingHeader * header() const noexcept
MessageSize setHeader() noexcept
Calculates the binary size of the message and updates the Simple Open Framing Header accordingly.
std::vector< std::string > LicenseStores
Folders that contain license file(s).
Client's messages Listener.
Client's session messages Listener.
int socketReceiveBufferSize() const
int socketSendBufferSize() const noexcept
Gateway & acceptConnection(const Timeout &acceptTimeout=defaultTimeout())
Accepts an incoming connection.
Terminate7Ptr receiveTerminate()
Receive the Terminate7 message.
Gateway(const SessionSettings::LicenseStores &licenseStores, int port, const char *host="127.0.0.1", const Timeout &acceptTimeout=defaultTimeout(), const Timeout &sendReceiveTimeout=defaultTimeout())
Sequence9Container createSequence(UInt32 nextSeqNo)
Creates a Sequence9 message.
Terminate7Ptr acceptTerminate()
Receive the Terminate7 message and responds with the Terminate7 message.
bool tryAcceptConnection(const Timeout &acceptTimeout=defaultTimeout())
Accepts an incoming connection.
MessageBasePtr receive() const
Receives a message.
Gateway(const Gateway &)=delete
Deleted.
std::chrono::milliseconds Timeout
Timeout alias.
int port() const noexcept
Gateway & acceptSession(SeqNumber outgoingSequenceNumber=1)
Accepts an incoming FIXP session.
Gateway & sendData(const void *data, size_t size)
Sends the given data.
SeqNumber outSeqNum() const noexcept
NegotiateResponse2Container createNegotiationResponse(const Negotiate1Ptr &request)
Creates a NegotiateResponse2 message.
Establish4Ptr receiveEstablish()
Receives the Establish4 message.
Gateway & operator=(const Gateway &)=delete
Gateway & sendTerminate(TerminationCode::Enum errCode=TerminationCode::Finished)
Sends the Terminate7 message.
EstablishReject6Container createEstablishReject(const Establish4Ptr &request, UInt32 outgoingSequenceNumber, EstablishRejectCode::Enum errorCodes)
Creates a EstablishReject6 message.
Negotiate1Ptr receiveNegotiate()
Receives the Negotiate1 message.
Gateway & sendSequence(UInt32 nextSeqNo)
Sends the Sequence9 message.
Gateway & enableLogger(const std::string &logFileName, unsigned int logLevel=3)
Enables logging.
Gateway & close()
Close the listening socket.
Gateway & disconnect()
Closes the accepted connection.
Gateway(Gateway &&) noexcept
Move semantic.
Negotiate1Ptr acceptNegotiate()
Receives the Negotiate1 and responds with the NegotiateResponse2 message.
bool tcpNoDelayOption() const noexcept
Establish4Ptr acceptEstablish(UInt32 outgoingSequenceNumber=1, unsigned gatewayKeepAliveInterval=0)
Receive the Establish4 message and respond with the EstablishAck5 message.
SessionID sessionId() const noexcept
Establish4Ptr rejectEstablish(UInt32 outgoingSequenceNumber=1, EstablishRejectCode::Enum errorCodes=EstablishRejectCode::Enum())
Receives the Establish4 message and responds with the EstablishReject6 message.
SessionID sessionId_
sessionId.
NegotiateReject3Container createNegotiateReject(const Negotiate1Ptr &request, NegotiationRejectCode::Enum errorCodes)
Creates a NegotiateReject3 message.
EstablishAck5Container createEstablishmentAck(const Establish4Ptr &request, UInt32 outgoingSequenceNumber, unsigned gatewayKeepAliveInterval=0)
Creates a EstablishAck5 message.
Gateway & run(ClientMessageListener &listener)
Accepts an incoming connection and establishes the session.
Terminate7Container createTerminate(const Terminate7Ptr &request)
Creates a Terminate7 message.
Gateway & send(BOE::Messaging::MessageHolder< SbeMessageType, MaxMessageSize, MessageInitializer > &msg)
Sends the given message.
Negotiate1Ptr rejectNegotiate(NegotiationRejectCode::Enum errorCodes=NegotiationRejectCode::Enum())
Receives the Negotiate1 message and responds with the NegotiateReject3 message.
static Timeout defaultTimeout()
Default timeout.
Terminate7Ptr terminate(TerminationCode::Enum errCode=TerminationCode::Finished)
Sends the Terminate7 message and waits until the response is received.
UInt64 sessionVerId() const noexcept
const char * host() const noexcept
Terminate7Ptr waitUntilTerminate(ClientMessageListener *listener=nullptr, ClientSessionMessageListener *sessionMessageListener=nullptr, std::atomic< bool > *stopRequested=nullptr)
Waits until the Terminate7 message is received.
bool isConnectionClosed(const Timeout &timeout) const
Checks whether the connection is closed by the counterparty.
MessagePtr< TMsg > receiveTypedMessage()
Receives the message of the particular type.
void swap(Gateway &) noexcept
Swap with other.
Gateway & tcpNoDelayOption(bool noDelay)
Sets the value of the option to improve latency at the expense of message throughput (the TCP_NODELAY...
MessageBasePtr tryReceive(const Timeout &timeout=defaultTimeout()) const
Receives a message using the provided timeout.
UInt32 SessionID
Client connection identification on the gateway assigned by B3.
MessageHolder< EstablishReject6 > EstablishReject6Container
MessageHolder< EstablishAck5 > EstablishAck5Container
MessagePtr< Negotiate1 > Negotiate1Ptr
MessageHolder< Sequence9 > Sequence9Container
MessagePtr< Terminate7 > Terminate7Ptr
MessagePtr< Establish4 > Establish4Ptr
constexpr UInt16 calculateNegotiateResponse2MaxSize()
MessageHolder< Terminate7 > Terminate7Container
MessageHolder< NegotiateReject3 > NegotiateReject3Container
MessagePtr< Sequence9 > Sequence9Ptr
MessagePtr< AnotherType > cast(const MessagePtr< BaseType > &ptr)
Tries to cast to another type.
MessagePtr< SbeMessage > MessageBasePtr
MessageHolder< NegotiateResponse2, calculateNegotiateResponse2MaxSize()> NegotiateResponse2Container
Messaging::UInt32 SeqNumber
Identifies the code of reject establishment.
The NegotiationResponse message is sent when a Negotiate message from the client is accepted by B3.
Identifies the code of reject negotiation.
Identifies the code of termination.