|
Flow-IPC 3.0.0
Flow-IPC project: Public API.
|
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. | |
| using | Channels = typename Impl::Channels |
Container (vector<>) of Channel_obj. | |
| using | Mdt_payload_obj = typename Impl::Mdt_payload_obj |
| Implements Session API per contract. | |
| using | Mdt_builder = typename Impl::Mdt_builder |
| Implements Session API per contract. | |
| using | Mdt_builder_ptr = typename Impl::Mdt_builder_ptr |
| Implements Session API per contract. | |
| using | Mdt_reader_ptr = typename Impl::Mdt_reader_ptr |
| Implements Session API per contract. | |
| 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_reader_config |
| Implements Session API per contract. More... | |
| using | Info_collector = typename Impl::Info_collector |
| Implements Session API per contract. | |
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 construction is disallowed. | |
| ~Session_mv () | |
| Implements Session API per contract. | |
| Session_mv & | operator= (Session_mv &&src) |
| Implements Session API per contract. More... | |
| Session_mv & | operator= (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=nullptr) |
| Implements Session API per contract. More... | |
| bool | open_channel (Channel_obj *target_channel, Error_code *err_code=nullptr) |
| Implements Session API per contract. More... | |
| const Session_token & | session_token () const |
| Implements Session API per contract. More... | |
| const util::Process_credentials & | remote_peer_process_credentials () const |
| Implements Session API per contract. More... | |
| Info_collector * | info_collector () |
| Implements Session API per contract. More... | |
| const Info_collector * | info_collector () const |
| Implements Session API per contract. More... | |
| transport::struc::Heap_reader::Config | heap_reader_config () |
Non-static counterpart to other heap_reader_config() overload, equivalent to heap_reader_config(this->get_logger()). 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_reader::Config | heap_reader_config (flow::log::Logger *logger_ptr) |
Convenience Heap_reader::Config generator similar to struc::Channel::heap_reader_config(), but no Channel arg is necessary. More... | |
Static Public Attributes | |
| static constexpr schema::ShmType | S_SHM_TYPE_OR_NONE = Impl::S_SHM_TYPE_OR_NONE |
| Implements Session API per contract. | |
| static constexpr bool | S_SHM_ENABLED = Impl::S_SHM_ENABLED |
| Implements Session API per contract. | |
| 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_obj & | base () const |
Provides const access to Session_base super-object. More... | |
| Impl_ptr & | impl () |
pImpl target; particularly for sub-classes that must add to the above public API. More... | |
| const Impl_ptr & | impl () 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... | |
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.
| Session_impl_t | This is 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. |
| 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.
| using ipc::session::Session_mv< Session_impl_t >::Structured_msg_builder_config = typename Impl::Structured_msg_builder_config |
Implements Session API per contract.
| using ipc::session::Session_mv< Session_impl_t >::Structured_msg_reader_config = typename Impl::Structured_msg_reader_config |
Implements Session API per contract.
|
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.
|
default |
Implements Session API per contract.
| src | See above. |
|
protected |
Provides const access to Session_base super-object.
| const flow::log::Component & ipc::session::Session_mv< Session_impl_t >::get_log_component |
Returns log component.
Works even if *this is as-if default-cted.
| flow::log::Logger * ipc::session::Session_mv< Session_impl_t >::get_logger |
Returns logger (possibly null).
| transport::struc::Heap_reader::Config ipc::session::Session_mv< Session_impl_t >::heap_reader_config |
Non-static counterpart to other heap_reader_config() overload, equivalent to heap_reader_config(this->get_logger()).
|
static |
Convenience Heap_reader::Config generator similar to struc::Channel::heap_reader_config(), but no Channel arg is necessary.
| logger_ptr | Logger to pass to the returned Config. |
|
protected |
pImpl target; particularly for sub-classes that must add to the above public API.
*this is as-if default-cted.
|
protected |
pImpl target; particularly for sub-classes that must add to the above public API.
*this is as-if default-cted. | Session_mv< Session_impl_t >::Info_collector * ipc::session::Session_mv< Session_impl_t >::info_collector |
Implements Session API per contract.
| const Session_mv< Session_impl_t >::Info_collector * ipc::session::Session_mv< Session_impl_t >::info_collector |
Implements Session API per contract.
As required by the concept: PEER state => returns non-null.
Otherwise, however, the concept leaves it up to the impl whether to return null or something else. To wit as of this writing:
*this.| Session_mv< Session_impl_t >::Mdt_builder_ptr ipc::session::Session_mv< Session_impl_t >::mdt_builder |
Implements Session API per contract.
| bool ipc::session::Session_mv< Session_impl_t >::open_channel | ( | Channel_obj * | target_channel, |
| const Mdt_builder_ptr & | mdt, | ||
| Error_code * | err_code = nullptr |
||
| ) |
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).
Server_session::open_channel() and Client_session::open_channel() both emit error::Code::S_SESSION_OPEN_CHANNEL_SERVER_CANNOT_PROCEED_RESOURCE_UNAVAILABLE when unable to acquire the resources (as of this writing likely MQ-related ones) underpinning the would-be channel; but server-side the actual original Error_code could be emitted instead. (Client-side, due to the IPC-mechanics involved, this is less straightforward, as then: (1) it would be ambiguous as to whether it was the server-side-user-yanked-channel-immediately scenario (user's choice, not an environmental problem), or the current-RESOURCE_UNAVAILABLE scenario; and (2) transmitting an Error_code over IPC is a potentially subtle impl task. Hence the to-do is probably aimed at Server_session::open_channel() et al, not the client-side method family.)| target_channel | See above. |
| mdt | See above. |
| err_code | See 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), (client-session-side only) system errors (probably a no_such_file_or_directory a/k/a ENOENT-wrapper in Unix-likes) (explanation will be WARNING-logged, but in short: quite-probably opposing-side user upon passive-open handler firing chose to immediately close the resulting Channel, so quickly that open_channel() here had not yet returned and therefore could not open the Channel-required resources, as of this writing MQ(s)). |
| bool ipc::session::Session_mv< Session_impl_t >::open_channel | ( | Channel_obj * | target_channel, |
| Error_code * | err_code = nullptr |
||
| ) |
Implements Session API per contract.
See other overload for brief discussion relevant here also.
| target_channel | See above. |
| err_code | See above. See also other overload. |
|
default |
| const util::Process_credentials & ipc::session::Session_mv< Session_impl_t >::remote_peer_process_credentials |
Implements Session API per contract.
| const Session_token & ipc::session::Session_mv< Session_impl_t >::session_token |
Implements Session API per contract.
|
related |
Prints string representation of the given Session_mv to the given ostream.
| os | Stream to which to write. |
| val | Object to serialize. |
os.
|
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.