Flow-IPC 1.0.0
Flow-IPC project: Public API.
Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Types | Protected Member Functions | Related Functions | List of all members
ipc::session::Session_mv< Session_impl_t > Class Template Reference

Implements the Session concept when it is in PEER state. More...

#include <session.hpp>

Public Types

using Channel_obj = typename Impl::Channel_obj
 Implements Session API per contract. More...
 
using Channels = typename Impl::Channels
 Container (vector<>) of Channel_obj.
 
using Mdt_payload_obj = typename Impl::Mdt_payload_obj
 Implements Session API per contract. More...
 
using Mdt_builder = typename Impl::Mdt_builder
 Implements Session API per contract. More...
 
using Mdt_builder_ptr = typename Impl::Mdt_builder_ptr
 Implements Session API per contract. More...
 
using Mdt_reader_ptr = typename Impl::Mdt_reader_ptr
 Implements Session API per contract. More...
 
template<typename Message_body >
using Structured_channel = typename transport::struc::Channel_via_heap< Channel_obj, Message_body >
 Implements Session API per contract. More...
 
using Structured_msg_builder_config = typename Impl::Structured_msg_builder_config
 Implements Session API per contract. More...
 
using Structured_msg_reader_config = typename Impl::Structured_msg_builder_config
 Implements Session API per contract. More...
 

Public Member Functions

 Session_mv ()
 Implements Session API per contract. More...
 
 Session_mv (Session_mv &&src)
 Implements Session API per contract. More...
 
 Session_mv (const Session_mv &)=delete
 Copy ction is disallowed.
 
 ~Session_mv ()
 Implements Session API per contract. More...
 
Session_mvoperator= (Session_mv &&src)
 Implements Session API per contract. More...
 
Session_mvoperator= (const Session_mv &)=delete
 Copy assignment is disallowed.
 
Mdt_builder_ptr mdt_builder ()
 Implements Session API per contract. More...
 
bool open_channel (Channel_obj *target_channel, const Mdt_builder_ptr &mdt, Error_code *err_code=0)
 Implements Session API per contract. More...
 
bool open_channel (Channel_obj *target_channel, Error_code *err_code=0)
 Implements Session API per contract. More...
 
const Session_tokensession_token () const
 Implements Session API per contract. More...
 
transport::struc::Heap_fixed_builder::Config heap_fixed_builder_config ()
 Utility that obtains a heap-based (non-zero-copy) Struct_builder::Config, constructed with the most efficient yet safe values, for transport::struc::Msg_out (out-messages) compatible with Structured_channel upgraded-from Channel_obj channels opened via *this Session_mv. More...
 
transport::struc::Heap_reader::Config heap_reader_config ()
 Deserializing counterpart to non-static heap_fixed_builder_config(). More...
 
flow::log::Logger * get_logger () const
 Returns logger (possibly null). More...
 
const flow::log::Component & get_log_component () const
 Returns log component. More...
 

Static Public Member Functions

static transport::struc::Heap_fixed_builder::Config heap_fixed_builder_config (flow::log::Logger *logger_ptr)
 Utility that obtains a heap-based (non-zero-copy) Struct_builder::Config, constructed with the most efficient yet safe values, for transport::struc::Msg_out (out-messages) compatible with Structured_channel upgraded-from Channel_obj channels opened via this Session_mv type. More...
 
static transport::struc::Heap_reader::Config heap_reader_config (flow::log::Logger *logger_ptr)
 Deserializing counterpart to static heap_fixed_builder_config(). More...
 

Static Public Attributes

static constexpr schema::ShmType S_SHM_TYPE = Impl::S_SHM_TYPE
 Implements Session API per contract. More...
 
static constexpr bool S_SHM_ENABLED = Impl::S_SHM_ENABLED
 Implements Session API per contract. More...
 
static constexpr bool S_MQS_ENABLED = Impl::S_MQS_ENABLED
 Compile-time-known constant indicating whether Channel_obj shall use a blobs pipe over message queues (MQs).
 
static constexpr bool S_SOCKET_STREAM_ENABLED = Impl::S_SOCKET_STREAM_ENABLED
 Compile-time-known constant indicating whether Channel_obj shall use socket stream for any type of pipe. More...
 

Protected Types

using Impl = Session_impl_t
 Short-hand for pImpl-lite impl type. This shall be the deepest impl sub-class desired.
 
using Session_base_obj = typename Impl::Session_base_obj
 Short-hand for Impl's Session_base super-class.
 
using Impl_ptr = std::experimental::propagate_const< boost::movelib::unique_ptr< Impl > >
 Short-hand for const-respecting wrapper around Impl for the pImpl idiom. See impl().
 

Protected Member Functions

const Session_base_objbase () const
 Provides const access to Session_base super-object. More...
 
Impl_ptrimpl ()
 pImpl target; particularly for sub-classes that must add to the above public API. More...
 
const Impl_ptrimpl () const
 pImpl target; particularly for sub-classes that must add to the above public API. More...
 

Related Functions

(Note that these are not member functions.)

template<typename Session_impl_t >
std::ostream & operator<< (std::ostream &os, const Session_mv< Session_impl_t > &val)
 Prints string representation of the given Session_mv to the given ostream. More...
 

Detailed Description

template<typename Session_impl_t>
class ipc::session::Session_mv< Session_impl_t >

Implements the Session concept when it is in PEER state.

It is, as of this writing, not to be instantiated by itself. Rather see Client_session_mv and Server_session_mv regarding what to actually instantiate and further context. As for the API in Session_mv itself, it is quite critical – but it only implements Session concept, and therefore the doc headers for Session_mv members generally just send you to Session doc headers. However the Session_mv doc headers are useful in enumerating specific Error_code values that may be emitted.

Template Parameters
Thisis an implementation detail. See Client_session_mv and Server_session_mv doc headers for how to easily set this to the proper type in a given situation.

Member Typedef Documentation

◆ Channel_obj

template<typename Session_impl_t >
using ipc::session::Session_mv< Session_impl_t >::Channel_obj = typename Impl::Channel_obj

Implements Session API per contract.

See also
Session::Channel_obj: implemented concept.

◆ Mdt_builder

template<typename Session_impl_t >
using ipc::session::Session_mv< Session_impl_t >::Mdt_builder = typename Impl::Mdt_builder

Implements Session API per contract.

See also
Session::Mdt_builder: implemented concept.

◆ Mdt_builder_ptr

template<typename Session_impl_t >
using ipc::session::Session_mv< Session_impl_t >::Mdt_builder_ptr = typename Impl::Mdt_builder_ptr

Implements Session API per contract.

See also
Session::Mdt_builder_ptr: implemented concept.

◆ Mdt_payload_obj

template<typename Session_impl_t >
using ipc::session::Session_mv< Session_impl_t >::Mdt_payload_obj = typename Impl::Mdt_payload_obj

Implements Session API per contract.

See also
Session::Mdt_payload_obj: implemented concept.

◆ Mdt_reader_ptr

template<typename Session_impl_t >
using ipc::session::Session_mv< Session_impl_t >::Mdt_reader_ptr = typename Impl::Mdt_reader_ptr

Implements Session API per contract.

See also
Session::Mdt_reader_ptr: implemented concept.

◆ Structured_channel

template<typename Session_impl_t >
template<typename Message_body >
using ipc::session::Session_mv< Session_impl_t >::Structured_channel = typename transport::struc::Channel_via_heap<Channel_obj, Message_body>

Implements Session API per contract.

Note
In particular Client_session_mv and Server_session_mv inherit this, and thus they show up there and thus in Client_session and Server_session. However if you're using a SHM-enabled variant (e.g., shm::classic::Client_session, shm::classic::Server_session), then this alias will be shadowed by a better definition that will make use of SHM for zero-copy transmission of structured messages. This super-class definition then becomes, in a sense, obsolete: It can be used, if you still want to use non-zero-copy heap-based serialization; but it is usually better to use, directly, the shadowing definition: e.g., shm::classic::Session_mv::Structured_channel (which will show up in shm::classic::Server_session and shm::classic::Client_session).
See also
Session::Structured_channel: implemented concept.

◆ Structured_msg_builder_config

template<typename Session_impl_t >
using ipc::session::Session_mv< Session_impl_t >::Structured_msg_builder_config = typename Impl::Structured_msg_builder_config

Implements Session API per contract.

Note
Same note as in Structured_channel doc header.
See also
Session::Structured_msg_builder_config: implemented concept.

◆ Structured_msg_reader_config

template<typename Session_impl_t >
using ipc::session::Session_mv< Session_impl_t >::Structured_msg_reader_config = typename Impl::Structured_msg_builder_config

Implements Session API per contract.

Note
Same note as in Structured_channel doc header.
See also
Session::Structured_msg_reader_config: implemented concept.

Constructor & Destructor Documentation

◆ Session_mv() [1/2]

template<typename Session_impl_t >
ipc::session::Session_mv< Session_impl_t >::Session_mv ( )
default

Implements Session API per contract.

Reminder: While not enforced, this ctor form is informally intended only for when one will move-from a PEER-state Session_mv. In particular Session_server::async_accept() requires these move semantics; so a default-cted Session_mv would be typically passed to it by the user.

See also
Session::Session(): implemented concept.

◆ Session_mv() [2/2]

template<typename Session_impl_t >
ipc::session::Session_mv< Session_impl_t >::Session_mv ( Session_mv< Session_impl_t > &&  src)
default

Implements Session API per contract.

Parameters
srcSee above.
See also
Session move ctor: implemented concept.

◆ ~Session_mv()

template<typename Session_impl_t >
ipc::session::Session_mv< Session_impl_t >::~Session_mv ( )
default

Implements Session API per contract.

See also
Session::~Session(): implemented concept.

Member Function Documentation

◆ base()

template<typename Session_impl_t >
const Session_mv< Session_impl_t >::Session_base_obj & ipc::session::Session_mv< Session_impl_t >::base
protected

Provides const access to Session_base super-object.

Returns
See above.

◆ get_log_component()

template<typename Session_impl_t >
const flow::log::Component & ipc::session::Session_mv< Session_impl_t >::get_log_component

Returns log component.

Returns
See above.

◆ get_logger()

template<typename Session_impl_t >
flow::log::Logger * ipc::session::Session_mv< Session_impl_t >::get_logger

Returns logger (possibly null).

Returns
See above.

◆ heap_fixed_builder_config() [1/2]

template<typename Session_impl_t >
transport::struc::Heap_fixed_builder::Config ipc::session::Session_mv< Session_impl_t >::heap_fixed_builder_config

Utility that obtains a heap-based (non-zero-copy) Struct_builder::Config, constructed with the most efficient yet safe values, for transport::struc::Msg_out (out-messages) compatible with Structured_channel upgraded-from Channel_obj channels opened via *this Session_mv.

It is, simply, heap_fixed_builder_config(L), where L is the Flow Logger* belonging to *this Session.

Informally, typically, this is useful if and only if you'd like to construct a transport::struc::Msg_out, and:

  • you lack a struc::Channel object from which to issue struc::Channel::create_msg() or struc::Channel::struct_builder_config(), or if you have one, but the target out-message is intended for multiple channels, so you don't want to stylistically tie the out-message's creation to any particular one channel; and
  • you do have a Session_mv object from which to issue non-static this->heap_fixed_builder_config().

Usability in SHM-based Session impls

The note in the other overload's doc header applies equally.

Returns
See above.

◆ heap_fixed_builder_config() [2/2]

template<typename Session_impl_t >
transport::struc::Heap_fixed_builder::Config ipc::session::Session_mv< Session_impl_t >::heap_fixed_builder_config ( flow::log::Logger *  logger_ptr)
static

Utility that obtains a heap-based (non-zero-copy) Struct_builder::Config, constructed with the most efficient yet safe values, for transport::struc::Msg_out (out-messages) compatible with Structured_channel upgraded-from Channel_obj channels opened via this Session_mv type.

Informally, typically, this is useful if and only if you'd like to construct a transport::struc::Msg_out, and:

  • you lack a struc::Channel object from which to issue struc::Channel::create_msg() or struc::Channel::struct_builder_config(), or if you have one, but the target out-message is intended for multiple channels, so you don't want to stylistically tie the out-message's creation to any particular one channel; and
  • you lack a Session_mv object from which to issue non-static this->heap_fixed_builder_config(), or if you have one, but the target out-message intended for multiple sessions, so you don't want to stylistically tie the out-message's creation to any particular one Session_mv.

Otherwise one would typically use struc::Channel::create_msg()/struct_builder_config() or a this->heap_fixed_builder_config() respectively.

Usability in SHM-based Session impls

Do note this method is available, via base class, in SHM-based Session impls (e.g., shm::classic::Server_session and shm::classic::Client_session) – nothing forbids the use of heap-based messaging even in such a session. However it would typically be better for performance (and in many cases is the reason for using a SHM-based Session impl in the first place) to use the non-heap-based counterparts to this method. E.g., see shm::classic::Session_mv::session_shm_builder_config() and shm::classic::Session_mv::app_shm_builder_config(); possibly shm::classic::Session_server::app_shm_builder_config().

Parameters
logger_ptrLogger to pass to the returned Config.
Returns
See above.

◆ heap_reader_config() [1/2]

template<typename Session_impl_t >
transport::struc::Heap_reader::Config ipc::session::Session_mv< Session_impl_t >::heap_reader_config

Deserializing counterpart to non-static heap_fixed_builder_config().

It is mostly provided for consistency, as it simply returns Heap_reader::Config(L), where L is the Flow Logger* belonging to *this Session.

Returns
See above.

◆ heap_reader_config() [2/2]

template<typename Session_impl_t >
transport::struc::Heap_reader::Config ipc::session::Session_mv< Session_impl_t >::heap_reader_config ( flow::log::Logger *  logger_ptr)
static

Deserializing counterpart to static heap_fixed_builder_config().

It is mostly provided for consistency, as it simply returns Heap_reader::Config(logger_ptr).

Parameters
logger_ptrLogger to pass to the returned Config.
Returns
See above.

◆ impl() [1/2]

template<typename Session_impl_t >
Session_mv< Session_impl_t >::Impl_ptr & ipc::session::Session_mv< Session_impl_t >::impl
protected

pImpl target; particularly for sub-classes that must add to the above public API.

Returns
See above. May be null; namely if *this is as-if default-cted.

◆ impl() [2/2]

template<typename Session_impl_t >
const Session_mv< Session_impl_t >::Impl_ptr & ipc::session::Session_mv< Session_impl_t >::impl
protected

pImpl target; particularly for sub-classes that must add to the above public API.

Returns
See above. May be null; namely if *this is as-if default-cted.

◆ mdt_builder()

template<typename Session_impl_t >
Session_mv< Session_impl_t >::Mdt_builder_ptr ipc::session::Session_mv< Session_impl_t >::mdt_builder

Implements Session API per contract.

Returns
See above.
See also
Session::mdt_builder(): implemented concept.

◆ open_channel() [1/2]

template<typename Session_impl_t >
bool ipc::session::Session_mv< Session_impl_t >::open_channel ( Channel_obj target_channel,
const Mdt_builder_ptr mdt,
Error_code err_code = 0 
)

Implements Session API per contract.

Reminder: Per concept requirements, open_channel() emitting an error (via standard Flow semantics) means that error is not session-hosing. Any session-hosing event is orthogonally emitted to on-error handler. Informally: in most cases even the (formally non-session-hosing) errors below indicate something seriously wrong is afoot. It would not be unreasonable to treat them as session-hosing (invoke dtor).

Parameters
target_channelSee above.
mdtSee above.
err_codeSee above. Error_code generated: error::Code::S_SESSION_OPEN_CHANNEL_REMOTE_PEER_REJECTED_PASSIVE_OPEN (per concept), error::Code::S_SESSION_OPEN_CHANNEL_ACTIVE_TIMEOUT (peer neither accepted nor rejected in non-blocking time frame), error::Code::S_SESSION_OPEN_CHANNEL_SERVER_CANNOT_PROCEED_RESOURCE_UNAVAILABLE (opposing or local Server_session peer was unable to acquire resources – as of this writing MQ-related ones – required for opening channel).
Returns
See above.
See also
Session::open_channel(): implemented concept.

◆ open_channel() [2/2]

template<typename Session_impl_t >
bool ipc::session::Session_mv< Session_impl_t >::open_channel ( Channel_obj target_channel,
Error_code err_code = 0 
)

Implements Session API per contract.

See other overload for brief discussion relevant here also.

Parameters
target_channelSee above.
err_codeSee above. See also other overload.
Returns
See above.
See also
Session::open_channel(): implemented concept.

◆ operator=()

template<typename Session_impl_t >
Session_mv< Session_impl_t > & ipc::session::Session_mv< Session_impl_t >::operator= ( Session_mv< Session_impl_t > &&  src)
default

Implements Session API per contract.

Parameters
srcSee above.
Returns
See above.
See also
Session move assignment: implemented concept.

◆ session_token()

template<typename Session_impl_t >
const Session_token & ipc::session::Session_mv< Session_impl_t >::session_token

Implements Session API per contract.

Returns
See above.
See also
Session::session_token(): implemented concept.

Friends And Related Function Documentation

◆ operator<<()

template<typename Session_impl_t >
std::ostream & operator<< ( std::ostream &  os,
const Session_mv< Session_impl_t > &  val 
)
related

Prints string representation of the given Session_mv to the given ostream.

Parameters
osStream to which to write.
valObject to serialize.
Returns
os.

Member Data Documentation

◆ S_SHM_ENABLED

template<typename Session_impl_t >
constexpr bool ipc::session::Session_mv< Session_impl_t >::S_SHM_ENABLED = Impl::S_SHM_ENABLED
staticconstexpr

Implements Session API per contract.

See also
Session::S_SHM_ENABLED: implemented concept.

◆ S_SHM_TYPE

template<typename Session_impl_t >
constexpr schema::ShmType ipc::session::Session_mv< Session_impl_t >::S_SHM_TYPE = Impl::S_SHM_TYPE
staticconstexpr

Implements Session API per contract.

See also
Session::S_SHM_TYPE: implemented concept.

◆ S_SOCKET_STREAM_ENABLED

template<typename Session_impl_t >
constexpr bool ipc::session::Session_mv< Session_impl_t >::S_SOCKET_STREAM_ENABLED = Impl::S_SOCKET_STREAM_ENABLED
staticconstexpr

Compile-time-known constant indicating whether Channel_obj shall use socket stream for any type of pipe.

If S_MQS_ENABLED, then a socket stream is still needed if and only if user wants to transmit native handles. If S_MQS_ENABLED is false, then a socket stream is the only transport available as of this writing and hence also enabled.


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