Goby3  3.1.4
2024.02.22
goby::middleware::InterProcessTransporterBase< Derived, InnerTransporter > Class Template Reference

Base class for implementing transporters (both portal and forwarder) for the interprocess layer. More...

#include <goby/middleware/transport/interprocess.h>

Inheritance diagram for goby::middleware::InterProcessTransporterBase< Derived, InnerTransporter >:
goby::middleware::StaticTransporterInterface< InterProcessTransporterBase< Derived, InnerTransporter >, InnerTransporter > goby::middleware::Poller< InterProcessTransporterBase< Derived, InnerTransporter > > goby::middleware::InnerTransporterInterface< InterProcessTransporterBase< Derived, InnerTransporter >, InnerTransporter > goby::middleware::PollerInterface goby::middleware::InterModuleForwarder< InnerTransporter > goby::middleware::InterModulePortalBase< Derived, InnerTransporter > goby::middleware::InterProcessPortalBase< Derived, InnerTransporter >

Public Member Functions

 InterProcessTransporterBase (InnerTransporter &inner)
 
 InterProcessTransporterBase ()
 
virtual ~InterProcessTransporterBase ()
 
template<typename Data , int scheme = scheme<Data>()>
void publish_dynamic (const Data &data, const Group &group, const Publisher< Data > &publisher=Publisher< Data >())
 Publish a message using a run-time defined DynamicGroup (const reference variant). Where possible, prefer the static variant in StaticTransporterInterface::publish() More...
 
template<typename Data , int scheme = scheme<Data>()>
void publish_dynamic (std::shared_ptr< const Data > data, const Group &group, const Publisher< Data > &publisher=Publisher< Data >())
 Publish a message using a run-time defined DynamicGroup (shared pointer to const data variant). Where possible, prefer the static variant in StaticTransporterInterface::publish() More...
 
template<typename Data , int scheme = scheme<Data>()>
void publish_dynamic (std::shared_ptr< Data > data, const Group &group, const Publisher< Data > &publisher=Publisher< Data >())
 Publish a message using a run-time defined DynamicGroup (shared pointer to mutable data variant). Where possible, prefer the static variant in StaticTransporterInterface::publish() More...
 
void publish_serialized (std::string type_name, int scheme, const std::vector< char > &bytes, const goby::middleware::Group &group)
 Publish a message that has already been serialized for the given scheme. More...
 
template<typename Data , int scheme = scheme<Data>()>
void subscribe_dynamic (std::function< void(const Data &)> f, const Group &group, const Subscriber< Data > &subscriber=Subscriber< Data >())
 Subscribe to a specific run-time defined group and data type (const reference variant). Where possible, prefer the static variant in StaticTransporterInterface::subscribe() More...
 
template<typename Data , int scheme = scheme<Data>()>
void subscribe_dynamic (std::function< void(std::shared_ptr< const Data >)> f, const Group &group, const Subscriber< Data > &subscriber=Subscriber< Data >())
 Subscribe to a specific run-time defined group and data type (shared pointer variant). Where possible, prefer the static variant in StaticTransporterInterface::subscribe() More...
 
template<typename Data , int scheme = scheme<Data>()>
void unsubscribe_dynamic (const Group &group, const Subscriber< Data > &subscriber=Subscriber< Data >())
 Unsubscribe to a specific run-time defined group and data type. Where possible, prefer the static variant in StaticTransporterInterface::unsubscribe() More...
 
void unsubscribe_all ()
 Unsubscribe from all current subscriptions. More...
 
std::shared_ptr< SerializationSubscriptionRegexsubscribe_regex (std::function< void(const std::vector< unsigned char > &, int scheme, const std::string &type, const Group &group)> f, const std::set< int > &schemes, const std::string &type_regex=".*", const std::string &group_regex=".*")
 Subscribe to multiple groups and/or types at once using regular expressions. More...
 
template<typename Data , int scheme = scheme<Data>()>
std::shared_ptr< SerializationSubscriptionRegexsubscribe_type_regex (std::function< void(std::shared_ptr< const Data >, const std::string &type)> f, const Group &group, const std::string &type_regex=".*")
 Subscribe to a number of types within a given group and scheme using a regular expression. More...
 
template<const Group & group, typename Data , int scheme = scheme<Data>()>
void subscribe_type_regex (std::function< void(std::shared_ptr< const Data >, const std::string &type)> f, const std::string &type_regex=".*")
 Subscribe to a number of types within a given group and scheme using a regular expression. More...
 
template<const Group & group>
void check_validity ()
 Check validity of the Group for interthread use (at compile time) More...
 
void check_validity_runtime (const Group &group)
 Check validity of the Group for interthread use (for DynamicGroup at run time) More...
 
- Public Member Functions inherited from goby::middleware::StaticTransporterInterface< InterProcessTransporterBase< Derived, InnerTransporter >, InnerTransporter >
void publish (const Data &data, const Publisher< Data > &publisher=Publisher< Data >())
 Publish a message (const reference variant) More...
 
void publish (std::shared_ptr< const Data > data, const Publisher< Data > &publisher=Publisher< Data >())
 Publish a message (shared pointer to const data variant) More...
 
void publish (std::shared_ptr< Data > data, const Publisher< Data > &publisher=Publisher< Data >())
 Publish a message (shared pointer to mutable data variant) More...
 
void subscribe (std::function< void(const Data &)> f, const Subscriber< Data > &subscriber=Subscriber< Data >())
 Subscribe to a specific group and data type (const reference variant) More...
 
void subscribe (std::function< void(std::shared_ptr< const Data >)> f, const Subscriber< Data > &subscriber=Subscriber< Data >())
 Subscribe to a specific group and data type (shared pointer variant) More...
 
void subscribe (Func f)
 Simplified version of subscribe() that can deduce Data from the first argument of the function (lambda, function pointer, etc.) passed to it. More...
 
void unsubscribe (const Subscriber< Data > &subscriber=Subscriber< Data >())
 Unsubscribe to a specific group and data type. More...
 
void unsubscribe_all ()
 Unsubscribe to all messages that this transporter has subscribed to. More...
 
- Public Member Functions inherited from goby::middleware::InnerTransporterInterface< InterProcessTransporterBase< Derived, InnerTransporter >, InnerTransporter >
InnerTransporter & inner ()
 
auto innermost ()
 
- Public Member Functions inherited from goby::middleware::PollerInterface
template<class Clock = std::chrono::system_clock, class Duration = typename Clock::duration>
int poll (const std::chrono::time_point< Clock, Duration > &timeout=std::chrono::time_point< Clock, Duration >::max())
 poll for data. Blocks until a data event occurs or a timeout when a particular time has been reached More...
 
template<class Clock = std::chrono::system_clock, class Duration = typename Clock::duration>
int poll (Duration wait_for)
 poll for data. Blocks until a data event occurs or a certain duration of time elapses (timeout) More...
 
std::shared_ptr< std::timed_mutex > poll_mutex ()
 access the mutex used for poll synchronization More...
 
std::shared_ptr< std::condition_variable_any > cv ()
 access the condition variable used for poll synchronization More...
 

Static Public Member Functions

template<typename Data >
static constexpr int scheme ()
 returns the marshalling scheme id for a given data type on this layer More...
 

Static Protected Attributes

static constexpr Group to_portal_group_ {"goby::middleware::interprocess::to_portal"}
 
static constexpr Group regex_group_ {"goby::middleware::interprocess::regex"}
 
static constexpr Group from_portal_group_ {"goby::middleware::interprocess::from_portal"}
 

Additional Inherited Members

- Public Types inherited from goby::middleware::InnerTransporterInterface< InterProcessTransporterBase< Derived, InnerTransporter >, InnerTransporter >
using InnerTransporterType = InnerTransporter
 the InnerTransporter type (accessible for other uses) More...
 
- Protected Member Functions inherited from goby::middleware::StaticTransporterInterface< InterProcessTransporterBase< Derived, InnerTransporter >, InnerTransporter >
 StaticTransporterInterface (InnerTransporter &inner)
 
 StaticTransporterInterface ()
 
- Protected Member Functions inherited from goby::middleware::Poller< InterProcessTransporterBase< Derived, InnerTransporter > >
 Poller (PollerInterface *inner_poller=nullptr)
 Construct this Poller with a pointer to the inner Poller (unless this is the innermost Poller) More...
 
PollerInterfaceinner_poller ()
 
- Protected Member Functions inherited from goby::middleware::PollerInterface
 PollerInterface (std::shared_ptr< std::timed_mutex > poll_mutex, std::shared_ptr< std::condition_variable_any > cv)
 

Detailed Description

template<typename Derived, typename InnerTransporter>
class goby::middleware::InterProcessTransporterBase< Derived, InnerTransporter >

Base class for implementing transporters (both portal and forwarder) for the interprocess layer.

Template Parameters
Derivedderived class (curiously recurring template pattern)
InnerTransporterinner layer transporter type

Definition at line 51 of file interprocess.h.

Constructor & Destructor Documentation

◆ InterProcessTransporterBase() [1/2]

template<typename Derived , typename InnerTransporter >
goby::middleware::InterProcessTransporterBase< Derived, InnerTransporter >::InterProcessTransporterBase ( InnerTransporter &  inner)
inline

Definition at line 63 of file interprocess.h.

◆ InterProcessTransporterBase() [2/2]

template<typename Derived , typename InnerTransporter >
goby::middleware::InterProcessTransporterBase< Derived, InnerTransporter >::InterProcessTransporterBase ( )
inline

Definition at line 67 of file interprocess.h.

◆ ~InterProcessTransporterBase()

template<typename Derived , typename InnerTransporter >
virtual goby::middleware::InterProcessTransporterBase< Derived, InnerTransporter >::~InterProcessTransporterBase ( )
inlinevirtual

Definition at line 69 of file interprocess.h.

Member Function Documentation

◆ check_validity()

template<typename Derived , typename InnerTransporter >
template<const Group & group>
void goby::middleware::InterProcessTransporterBase< Derived, InnerTransporter >::check_validity ( )
inline

Check validity of the Group for interthread use (at compile time)

This layer requires a valid string group

Definition at line 254 of file interprocess.h.

◆ check_validity_runtime()

template<typename Derived , typename InnerTransporter >
void goby::middleware::InterProcessTransporterBase< Derived, InnerTransporter >::check_validity_runtime ( const Group group)
inline

Check validity of the Group for interthread use (for DynamicGroup at run time)

Definition at line 262 of file interprocess.h.

◆ publish_dynamic() [1/3]

template<typename Derived , typename InnerTransporter >
template<typename Data , int scheme = scheme<Data>()>
void goby::middleware::InterProcessTransporterBase< Derived, InnerTransporter >::publish_dynamic ( const Data &  data,
const Group group,
const Publisher< Data > &  publisher = Publisher<Data>() 
)
inline

Publish a message using a run-time defined DynamicGroup (const reference variant). Where possible, prefer the static variant in StaticTransporterInterface::publish()

Template Parameters
Datadata type to publish. Can usually be inferred from the data parameter.
schemeMarshalling scheme id (typically MarshallingScheme::MarshallingSchemeEnum). Can usually be inferred from the Data type.
Parameters
dataMessage to publish
groupgroup to publish this message to (typically a DynamicGroup)
publisherOptional metadata that controls the publication or sets callbacks to monitor the result. Typically unnecessary for interprocess and inner layers.

Definition at line 79 of file interprocess.h.

◆ publish_dynamic() [2/3]

template<typename Derived , typename InnerTransporter >
template<typename Data , int scheme = scheme<Data>()>
void goby::middleware::InterProcessTransporterBase< Derived, InnerTransporter >::publish_dynamic ( std::shared_ptr< const Data >  data,
const Group group,
const Publisher< Data > &  publisher = Publisher<Data>() 
)
inline

Publish a message using a run-time defined DynamicGroup (shared pointer to const data variant). Where possible, prefer the static variant in StaticTransporterInterface::publish()

Template Parameters
Datadata type to publish. Can usually be inferred from the data parameter.
schemeMarshalling scheme id (typically MarshallingScheme::MarshallingSchemeEnum). Can usually be inferred from the Data type.
Parameters
dataMessage to publish
groupgroup to publish this message to (typically a DynamicGroup)
publisherOptional metadata that controls the publication or sets callbacks to monitor the result. Typically unnecessary for interprocess and inner layers.

Definition at line 95 of file interprocess.h.

◆ publish_dynamic() [3/3]

template<typename Derived , typename InnerTransporter >
template<typename Data , int scheme = scheme<Data>()>
void goby::middleware::InterProcessTransporterBase< Derived, InnerTransporter >::publish_dynamic ( std::shared_ptr< Data >  data,
const Group group,
const Publisher< Data > &  publisher = Publisher<Data>() 
)
inline

Publish a message using a run-time defined DynamicGroup (shared pointer to mutable data variant). Where possible, prefer the static variant in StaticTransporterInterface::publish()

Template Parameters
Datadata type to publish. Can usually be inferred from the data parameter.
schemeMarshalling scheme id (typically MarshallingScheme::MarshallingSchemeEnum). Can usually be inferred from the Data type.
Parameters
dataMessage to publish
groupgroup to publish this message to (typically a DynamicGroup)
publisherOptional metadata that controls the publication or sets callbacks to monitor the result. Typically unnecessary for interprocess and inner layers.

Definition at line 114 of file interprocess.h.

◆ publish_serialized()

template<typename Derived , typename InnerTransporter >
void goby::middleware::InterProcessTransporterBase< Derived, InnerTransporter >::publish_serialized ( std::string  type_name,
int  scheme,
const std::vector< char > &  bytes,
const goby::middleware::Group group 
)
inline

Publish a message that has already been serialized for the given scheme.

Definition at line 121 of file interprocess.h.

◆ scheme()

template<typename Derived , typename InnerTransporter >
template<typename Data >
static constexpr int goby::middleware::InterProcessTransporterBase< Derived, InnerTransporter >::scheme ( )
inlinestaticconstexpr

returns the marshalling scheme id for a given data type on this layer

Template Parameters
Datadata type
Returns
marshalling scheme id

Definition at line 242 of file interprocess.h.

◆ subscribe_dynamic() [1/2]

template<typename Derived , typename InnerTransporter >
template<typename Data , int scheme = scheme<Data>()>
void goby::middleware::InterProcessTransporterBase< Derived, InnerTransporter >::subscribe_dynamic ( std::function< void(const Data &)>  f,
const Group group,
const Subscriber< Data > &  subscriber = Subscriber<Data>() 
)
inline

Subscribe to a specific run-time defined group and data type (const reference variant). Where possible, prefer the static variant in StaticTransporterInterface::subscribe()

Template Parameters
Datadata type to subscribe to.
schemeMarshalling scheme id (typically MarshallingScheme::MarshallingSchemeEnum). Can usually be inferred from the Data type.
Parameters
fCallback function or lambda that is called upon receipt of the subscribed data
groupgroup to subscribe to (typically a DynamicGroup)
subscriberOptional metadata that controls the subscription or sets callbacks to monitor the subscription result. Typically unnecessary for interprocess and inner layers.

Definition at line 136 of file interprocess.h.

◆ subscribe_dynamic() [2/2]

template<typename Derived , typename InnerTransporter >
template<typename Data , int scheme = scheme<Data>()>
void goby::middleware::InterProcessTransporterBase< Derived, InnerTransporter >::subscribe_dynamic ( std::function< void(std::shared_ptr< const Data >)>  f,
const Group group,
const Subscriber< Data > &  subscriber = Subscriber<Data>() 
)
inline

Subscribe to a specific run-time defined group and data type (shared pointer variant). Where possible, prefer the static variant in StaticTransporterInterface::subscribe()

Template Parameters
Datadata type to subscribe to.
schemeMarshalling scheme id (typically MarshallingScheme::MarshallingSchemeEnum). Can usually be inferred from the Data type.
Parameters
fCallback function or lambda that is called upon receipt of the subscribed data
groupgroup to subscribe to (typically a DynamicGroup)
subscriberOptional metadata that controls the subscription or sets callbacks to monitor the subscription result. Typically unnecessary for interprocess and inner layers.

Definition at line 152 of file interprocess.h.

◆ subscribe_regex()

template<typename Derived , typename InnerTransporter >
std::shared_ptr<SerializationSubscriptionRegex> goby::middleware::InterProcessTransporterBase< Derived, InnerTransporter >::subscribe_regex ( std::function< void(const std::vector< unsigned char > &, int scheme, const std::string &type, const Group &group)>  f,
const std::set< int > &  schemes,
const std::string &  type_regex = ".*",
const std::string &  group_regex = ".*" 
)
inline

Subscribe to multiple groups and/or types at once using regular expressions.

Parameters
fCallback function or lambda that is called upon receipt of any messages matching the group regex and type regex
schemesSet of marshalling schemes to match
type_regexC++ regex to match type names (within one or more of the given schemes)
group_regexC++ regex to match group names
Returns
Shared pointer to SerializationSubscriptionRegex for later modification of regex parameters

Definition at line 183 of file interprocess.h.

◆ subscribe_type_regex() [1/2]

template<typename Derived , typename InnerTransporter >
template<typename Data , int scheme = scheme<Data>()>
std::shared_ptr<SerializationSubscriptionRegex> goby::middleware::InterProcessTransporterBase< Derived, InnerTransporter >::subscribe_type_regex ( std::function< void(std::shared_ptr< const Data >, const std::string &type)>  f,
const Group group,
const std::string &  type_regex = ".*" 
)
inline

Subscribe to a number of types within a given group and scheme using a regular expression.

The marshalling scheme must implement SerializerParserHelper::parse() to use this method.

Template Parameters
Datadata type to publish. Can usually be inferred from the data parameter.
schemeMarshalling scheme id (typically MarshallingScheme::MarshallingSchemeEnum). Can usually be inferred from the Data type.
Parameters
groupgroup to subscribe to (typically a DynamicGroup)
fCallback function or lambda that is called upon receipt of any messages matching the given group and type regex
type_regexC++ regex to match type names (within the given scheme)
Returns
Shared pointer to SerializationSubscriptionRegex for later modification of regex parameters

Definition at line 202 of file interprocess.h.

◆ subscribe_type_regex() [2/2]

template<typename Derived , typename InnerTransporter >
template<const Group & group, typename Data , int scheme = scheme<Data>()>
void goby::middleware::InterProcessTransporterBase< Derived, InnerTransporter >::subscribe_type_regex ( std::function< void(std::shared_ptr< const Data >, const std::string &type)>  f,
const std::string &  type_regex = ".*" 
)
inline

Subscribe to a number of types within a given group and scheme using a regular expression.

The marshalling scheme must implement SerializerParserHelper::parse() to use this method.

Template Parameters
groupgroup to publish this message to (reference to constexpr Group)
Datadata type to publish. Can usually be inferred from the data parameter.
schemeMarshalling scheme id (typically MarshallingScheme::MarshallingSchemeEnum). Can usually be inferred from the Data type.
Parameters
fCallback function or lambda that is called upon receipt of any messages matching the given group and type regex
type_regexC++ regex to match type names (within the given scheme)

Definition at line 231 of file interprocess.h.

◆ unsubscribe_all()

template<typename Derived , typename InnerTransporter >
void goby::middleware::InterProcessTransporterBase< Derived, InnerTransporter >::unsubscribe_all ( )
inline

Unsubscribe from all current subscriptions.

Definition at line 173 of file interprocess.h.

◆ unsubscribe_dynamic()

template<typename Derived , typename InnerTransporter >
template<typename Data , int scheme = scheme<Data>()>
void goby::middleware::InterProcessTransporterBase< Derived, InnerTransporter >::unsubscribe_dynamic ( const Group group,
const Subscriber< Data > &  subscriber = Subscriber<Data>() 
)
inline

Unsubscribe to a specific run-time defined group and data type. Where possible, prefer the static variant in StaticTransporterInterface::unsubscribe()

Template Parameters
Datadata type to unsubscribe from.
schemeMarshalling scheme id (typically MarshallingScheme::MarshallingSchemeEnum). Can usually be inferred from the Data type.
Parameters
groupgroup to unsubscribe from (typically a DynamicGroup)

Definition at line 165 of file interprocess.h.

Member Data Documentation

◆ from_portal_group_

template<typename Derived , typename InnerTransporter >
constexpr goby::middleware::Group goby::middleware::InterProcessTransporterBase< Derived, InnerTransporter >::from_portal_group_ {"goby::middleware::interprocess::from_portal"}
staticconstexprprotected

Definition at line 271 of file interprocess.h.

◆ regex_group_

template<typename Derived , typename InnerTransporter >
constexpr goby::middleware::Group goby::middleware::InterProcessTransporterBase< Derived, InnerTransporter >::regex_group_ {"goby::middleware::interprocess::regex"}
staticconstexprprotected

Definition at line 270 of file interprocess.h.

◆ to_portal_group_

template<typename Derived , typename InnerTransporter >
constexpr goby::middleware::Group goby::middleware::InterProcessTransporterBase< Derived, InnerTransporter >::to_portal_group_ {"goby::middleware::interprocess::to_portal"}
staticconstexprprotected

Definition at line 269 of file interprocess.h.


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