42 namespace AdHoc {
struct SessionHelper; };
50 static const UInt64 UndefinedUuid = 0;
77 std::
string id() const;
83 std::
string customKey() const;
86 bool negotiated() const;
91 Session& negotiated(
bool negotiated);
94 Messaging::
FTI::Enum faultToleranceIndicator() const;
97 Session& faultToleranceIndicator(Messaging::
FTI::Enum value);
115 Threading::SharedFuture<
void> connectAsync(const
std::
string & host,
Port port);
126 Session& disconnect(const
std::
string &reason = "");
133 Threading::SharedFuture<
void> disconnectAsync(const
std::
string & reason = "");
144 Threading::SharedFuture<
void> breakConnectionAsync();
156 template <typename SbeMessageType,
size_t MaxMessageSize, typename MessageInitializer>
158 Messaging::
MessageHolder<SbeMessageType, MaxMessageSize, MessageInitializer> &msg,
161 #if defined (ONIXS_ILINK3_CXX11) 172 template <
typename SbeMessageType,
size_t MaxMessageSize,
typename MessageInitializer>
180 static const size_t CmeMaxPacketSize = 1420;
182 #if defined (ONIXS_ILINK3_CXX11) 199 template <
typename SbeMessageType,
size_t MaxMessageSize,
typename MessageInitializer>
203 size_t maxPacketSize = CmeMaxPacketSize);
223 size_t maxPacketSize = CmeMaxPacketSize);
245 size_t maxPacketSize = CmeMaxPacketSize) ONIXS_ILINK3_NONULL;
265 size_t maxPacketSize = CmeMaxPacketSize);
291 template <typename SbeMessageType,
size_t MaxMessageSize>
293 Messaging::
MessageHolder<SbeMessageType, MaxMessageSize> &msg,
295 int warmupFlags = 0);
298 #if defined (ONIXS_ILINK3_CXX11) 315 template <
typename SbeMessageType,
size_t MaxMessageSize,
typename MessageInitializer>
319 size_t maxPacketSize = CmeMaxPacketSize,
320 int warmupFlags = 0);
339 size_t maxPacketSize = CmeMaxPacketSize,
int warmupFlags = 0);
360 size_t maxPacketSize = CmeMaxPacketSize,
int warmupFlags = 0) ONIXS_ILINK3_NONULL;
379 size_t maxPacketSize = CmeMaxPacketSize,
int warmupFlags = 0);
396 size_t tryThrottle();
406 Session & throttlingLimit(
size_t messagesCount,
size_t intervalInMs = 1000);
409 std::
string remoteHost() const;
412 std::
string remoteIpAddress() const;
415 Port remotePort() const;
418 std::pair<
Port, Port> localPortRange() const ONIXS_ILINK3_NOTHROW;
421 Session& localPortRange(
std::pair<Port, Port> portRange);
424 std::
string localNetworkInterface() const;
427 Session& localNetworkInterface(const
std::
string &value);
430 Port localPort() const;
433 bool tcpNoDelayOption() const;
436 Session& tcpNoDelayOption(
bool value);
444 static const
int UndefinedAffinity = -1;
453 const
CpuIndexes &receivingThreadAffinity() const;
462 const
CpuIndexes &sendingThreadAffinity() const;
465 int receivingThreadPriority() const;
468 Session& receivingThreadPriority(
int priority);
471 int sendingThreadPriority() const;
474 Session& sendingThreadPriority(
int priority);
477 int receivingThreadPolicy() const;
480 Session& receivingThreadPolicy(
int policy);
483 int sendingThreadPolicy() const;
486 Session& sendingThreadPolicy(
int policy);
489 unsigned receiveSpinningTimeout() const ONIXS_ILINK3_NOTHROW;
492 Session& receiveSpinningTimeout(
unsigned timeoutInUs);
495 unsigned sendSpinningTimeout() const ONIXS_ILINK3_NOTHROW;
498 Session& sendSpinningTimeout(
unsigned timeoutInUs);
503 bool reportNewMessagesWhileWaitingForMissedMessages() const;
508 Session& reportNewMessagesWhileWaitingForMissedMessages(
bool value);
511 unsigned messageGrouping() const ONIXS_ILINK3_NOTHROW;
523 Session& messageGrouping(
unsigned numberOfMessagesToGroup);
529 const
std::
string &storageId() const ONIXS_ILINK3_NOTHROW;
532 SeqNumber outSeqNum() const ONIXS_ILINK3_NOTHROW;
548 SeqNumber previousSeqNo() const ONIXS_ILINK3_NOTHROW;
559 Messaging::
UInt64 previousUuid() const ONIXS_ILINK3_NOTHROW;
573 Session& reset(
bool startOfWeek = false);
579 Messaging::
Timestamp creationTime() const ONIXS_ILINK3_NOTHROW;
582 void flushSessionStorage();
585 unsigned reconnectAttempts() const;
588 Session& reconnectAttempts(
unsigned reconnectAttempts);
591 unsigned reconnectInterval() const;
594 Session& reconnectInterval(
unsigned seconds);
597 bool localTimeUsage() const;
600 Session& localTimeUsage(
bool useLocalTime);
603 const
std::
string &storageDirectory() const;
606 bool logBeforeSending() const;
609 Session& logBeforeSending(
bool value);
612 size_t incomingMessageGapQueueMaximumSize() const;
615 Session& incomingMessageGapQueueMaximumSize(
size_t value);
618 const
Session& log(const
std::
string &message) const;
621 std::
string toString() const;
624 Messaging::
Timestamp licenseExpirationDate() const;
627 Messaging::
SchemaVersion messagingVersion() const ONIXS_ILINK3_NOTHROW;
630 bool detectMessageGapForPreviousUuid() const;
633 Session& detectMessageGapForPreviousUuid(
bool detectGap);
644 size_t outboundQueueBytes();
654 static const
std::
string& version() ONIXS_ILINK3_NOTHROW;
658 Session& operator=(const Session& );
665 template <typename SbeMessageType,
size_t MaxMessageSize, typename MessageInitializer>
666 void validate(const Messaging::
MessageHolder<SbeMessageType, MaxMessageSize, MessageInitializer> &msg) const;
668 void validateVersion(Messaging::
SchemaVersion version) const;
675 friend struct AdHoc::SessionHelper;
715 static const int marketSegmentId_ = INT_MAX;
718 template <
typename SbeMessageType,
size_t MaxMessageSize,
typename MessageInitializer>
733 template <
typename SbeMessageType,
size_t MaxMessageSize>
744 #if defined (ONIXS_ILINK3_CXX11) 746 template <
typename SbeMessageType,
size_t MaxMessageSize,
typename MessageInitializer>
758 #if defined (ONIXS_ILINK3_CXX11) 760 template <
typename SbeMessageType,
size_t MaxMessageSize,
typename MessageInitializer>
765 size_t maxPacketSize)
769 if ONIXS_ILINK3_UNLIKELY(msgs.netMsgs_.empty())
775 send(begin, end, maxPacketSize, ts);
779 template <
typename SbeMessageType,
size_t MaxMessageSize,
typename MessageInitializer>
787 if ONIXS_ILINK3_UNLIKELY(msgs.netMsgs_.empty())
793 warmUp(begin, end, maxPacketSize, flags, ts);
799 template <
typename SbeMessageType,
size_t MaxMessageSize,
typename MessageInitializer>
803 validateVersion(holder->version());
#define ONIXS_ILINK3_NULLPTR
Contains the SimpleOpenFramingHeader, the SBE message, and the data buffer.
Session's network stack reactor interface.
std::pair< NetworkMessage *, NetworkMessage * > NetMessagesRange
Session & send(Messaging::MessageHolder< SbeMessageType, MaxMessageSize, MessageInitializer > &msg, Messaging::Timestamp sendingTime=UtcWatch::now())
Sends the message.
Messaging::UInt32 SeqNumber
void validate(const Message &)
MessageHeader::Version SchemaVersion
SBE-encoded data version type.
std::set< CpuIndex > CpuIndexes
An iLink 3 Session for CME Convenience Gateways (CGW).
A network iLink3 message.
int Handle
Type alias for socket handle.
File-based Session Storage.
#define ONIXS_ILINK3_EXPORTED
Session & warmUp(Messaging::MessageHolder< SbeMessageType, MaxMessageSize > &msg, Messaging::Timestamp sendingTime=UtcWatch::now(), int warmupFlags=0)
Warms up the sending path.
The class can be used to combine messages with different types to the batch for sending.
std::vector< SocketOption > SocketOptions
Socket options.
The message batch wrapper.
#define ONIXS_ILINK3_HOTPATH
The time point without the time-zone information.
#define ONIXS_ILINK3_NOTHROW
NetworkMessage toNetworkMessage() noexcept