Apama  10.7.2.2
com::softwareag::connectivity::TransportSide Class Referenceabstract

An interface to the next component (plugin or host) towards the transport. More...

#include <sag_connectivity_plugins.hpp>

Inheritance diagram for com::softwareag::connectivity::TransportSide:
com::softwareag::connectivity::AbstractCodec com::softwareag::connectivity::AbstractTransport com::softwareag::connectivity::AbstractSimpleCodec com::softwareag::connectivity::AbstractSimpleTransport

Public Types

typedef std::unique_ptr< TransportSideptr_t
 Pointers to TransportSides should always be this ptr_t type, which is a std::unique_ptr. More...
 

Public Member Functions

virtual ~TransportSide ()
 Ensure virtual destruction. More...
 
virtual void sendBatchTowardsTransport (Message *start, Message *end)=0
 Abstract method that must be implemented to handle delivery of a batch of messages heading towards the transport. More...
 
void sendBatchTowardsTransport (Message &&message)
 Overload for sending a batch containing a single message. More...
 
template<typename IT >
auto sendBatchTowardsTransport (const IT &begin, const IT &end) -> typename std::enable_if< !std::is_const< ampl::remove_ref_t< decltype(*begin)>>::value &&ampl::is_same< Message, ampl::remove_const_t< ampl::remove_ref_t< decltype(*begin)>>>::value, void >::type
 Overload for sending messages using an iterator range. More...
 

Detailed Description

An interface to the next component (plugin or host) towards the transport.

Contains the method to send messages towards the transport.

Member Typedef Documentation

◆ ptr_t

Pointers to TransportSides should always be this ptr_t type, which is a std::unique_ptr.

Constructor & Destructor Documentation

◆ ~TransportSide()

virtual com::softwareag::connectivity::TransportSide::~TransportSide ( )
inlinevirtual

Ensure virtual destruction.

Member Function Documentation

◆ sendBatchTowardsTransport() [1/3]

virtual void com::softwareag::connectivity::TransportSide::sendBatchTowardsTransport ( Message start,
Message end 
)
pure virtual

Abstract method that must be implemented to handle delivery of a batch of messages heading towards the transport.

Messages should be processed and passed to the next connectivity plug-in in the chain, which is typically provided by the Codec's transportSide pointer.

Implementors of this method are permitted to modify the contents of the messages (for example a codec may apply transformations to messages sent from a transport or host), though not to delete them.

The ability to handle messages in batches is provided to allow amortising the costs of delivering messages. The batch is defined as all Messages from start up to but excluding end. The callee may modify the messages, typically by moving their contents elsewhere.

Threading: Plug-ins are required to ensure that they do not call into the next plug-in in their chain from more than one thread concurrently (although it does not have to be the same thread each time). Plug-ins may therefore assume that no additional locking is required in this method to protect access to the plug-in's state. The plug-in should be as responsive as possible to the Plugin.shutdown() method, which may be called at any time on any thread, and should result in any calls into this unblocking and returning promptly. If this method throws then the exception will be logged and the batch of messages dropped.

Implemented in com::softwareag::connectivity::AbstractSimpleCodec, and com::softwareag::connectivity::AbstractSimpleTransport.

◆ sendBatchTowardsTransport() [2/3]

void com::softwareag::connectivity::TransportSide::sendBatchTowardsTransport ( Message &&  message)
inline

Overload for sending a batch containing a single message.

As sendBatchTowardsTransport(Message*, Message*), but allows a single message to be sent.

Since
10.2

◆ sendBatchTowardsTransport() [3/3]

template<typename IT >
auto com::softwareag::connectivity::TransportSide::sendBatchTowardsTransport ( const IT &  begin,
const IT &  end 
) -> typename std::enable_if< !std::is_const<ampl::remove_ref_t<decltype(*begin)>>::value && ampl::is_same<Message, ampl::remove_const_t<ampl::remove_ref_t<decltype(*begin)>>>::value , void>::type
inline

Overload for sending messages using an iterator range.

As sendBatchTowardsTransport(Message*, Message*), but allows bidirectional iterators over Messages to be used. Thus, can use std::vector<Message> msgs; sendBatchTowardsTransport(msgs.begin(), msgs.end());

Since
10.2

The documentation for this class was generated from the following file: