Skip to content

iox::popo::SubscriberPortUser🔗

The SubscriberPortUser provides the API for accessing a subscriber port from the user side. The subscriber port is divided in the parts SubscriberPortData, SubscriberPortUser and different classes for RouDi side access. The SubscriberPortUser uses the functionality of a ChunkReceiver for receiving shared memory chunks. Additionally it provides the subscribe / unsubscribe API which controls whether the subscriber ports shall try to subscribe to matching publisher ports.

#include <subscriber_port_user.hpp>

Inherits from iox::popo::BasePort

Public Types🔗

Name
using SubscriberPortData MemberType_t

Public Functions🔗

Name
SubscriberPortUser(cxx::not_null< MemberType_t *const > subscriberPortDataPtr)
SubscriberPortUser(const SubscriberPortUser & other)
SubscriberPortUser & operator=(const SubscriberPortUser & )
SubscriberPortUser(SubscriberPortUser && rhs) =default
SubscriberPortUser & operator=(SubscriberPortUser && rhs) =default
~SubscriberPortUser() =default
void subscribe()
try to subscribe to all matching publishers
void unsubscribe()
unsubscribe from publishers, if there are any to which we are currently subscribed
SubscribeState getSubscriptionState() const
get the current subscription state. Caution: There can be delays between calling subscribe and a change in the subscription state. The subscription state can also change without user interaction if publishers come and go
cxx::expected< const mepoo::ChunkHeader *, ChunkReceiveResult > tryGetChunk()
Tries to get the next chunk from the queue. If there is a new one, the ChunkHeader of the oldest chunk in the queue is returned (FiFo queue)
void releaseChunk(const mepoo::ChunkHeader *const chunkHeader)
Release a chunk that was obtained with tryGetChunk.
void releaseQueuedChunks()
Release all the chunks that are currently queued up.
bool hasNewChunks() const
check if there are chunks in the queue
bool hasLostChunksSinceLastCall()
check if there was a queue overflow since the last call of hasLostChunksSinceLastCall
void setConditionVariable(ConditionVariableData & conditionVariableData, const uint64_t notificationIndex)
attach a condition variable (via its pointer) to subscriber
void unsetConditionVariable()
detach a condition variable from subscriber
bool isConditionVariableSet()
check if there's a condition variable attached

Additional inherited members🔗

Public Functions inherited from iox::popo::BasePort

Name
BasePort(MemberType_t *const basePortDataPtr)
BasePort(const BasePort & other)
BasePort(BasePort && )
virtual ~BasePort() =default
operator bool() const
a port can be constructed from a nullptr, additionally it also can be moved and in these cases the member methods would work on a nullptr. to circumvent this problem
capro::ServiceDescription getCaProServiceDescription() const
Reads Type of actual CaPro Port (publisher/subscriber...)
RuntimeName_t getRuntimeName() const
Gets name of the application's runtime for the active port.
UniquePortId getUniqueID() const
Gets Id of the active port.
NodeName_t getNodeName() const
returns node name for the active port
void destroy()
Indicate that this port can be destroyed.
bool toBeDestroyed() const
Checks whether port can be destroyed.

Public Types Documentation🔗

using MemberType_t🔗

using iox::popo::SubscriberPortUser::MemberType_t =  SubscriberPortData;

Public Functions Documentation🔗

function SubscriberPortUser🔗

explicit SubscriberPortUser(
    cxx::not_null< MemberType_t *const > subscriberPortDataPtr
)

function SubscriberPortUser🔗

SubscriberPortUser(
    const SubscriberPortUser & other
)

function operator=🔗

SubscriberPortUser & operator=(
    const SubscriberPortUser & 
)

function SubscriberPortUser🔗

SubscriberPortUser(
    SubscriberPortUser && rhs
) =default

function operator=🔗

SubscriberPortUser & operator=(
    SubscriberPortUser && rhs
) =default

function ~SubscriberPortUser🔗

~SubscriberPortUser() =default

function subscribe🔗

void subscribe()

try to subscribe to all matching publishers

function unsubscribe🔗

void unsubscribe()

unsubscribe from publishers, if there are any to which we are currently subscribed

function getSubscriptionState🔗

SubscribeState getSubscriptionState() const

get the current subscription state. Caution: There can be delays between calling subscribe and a change in the subscription state. The subscription state can also change without user interaction if publishers come and go

Return: SubscribeState

function tryGetChunk🔗

cxx::expected< const mepoo::ChunkHeader *, ChunkReceiveResult > tryGetChunk()

Tries to get the next chunk from the queue. If there is a new one, the ChunkHeader of the oldest chunk in the queue is returned (FiFo queue)

Return: New chunk header, ChunkReceiveResult on error or if there are no new chunks in the underlying queue

function releaseChunk🔗

void releaseChunk(
    const mepoo::ChunkHeader *const chunkHeader
)

Release a chunk that was obtained with tryGetChunk.

Parameters:

  • chunkHeaderpointer to the ChunkHeader to release

function releaseQueuedChunks🔗

void releaseQueuedChunks()

Release all the chunks that are currently queued up.

function hasNewChunks🔗

bool hasNewChunks() const

check if there are chunks in the queue

Return: if there are chunks in the queue return true, otherwise false

function hasLostChunksSinceLastCall🔗

bool hasLostChunksSinceLastCall()

check if there was a queue overflow since the last call of hasLostChunksSinceLastCall

Return: true if the underlying queue overflowed since last call of this method, otherwise false

function setConditionVariable🔗

void setConditionVariable(
    ConditionVariableData & conditionVariableData,
    const uint64_t notificationIndex
)

attach a condition variable (via its pointer) to subscriber

function unsetConditionVariable🔗

void unsetConditionVariable()

detach a condition variable from subscriber

function isConditionVariableSet🔗

bool isConditionVariableSet()

check if there's a condition variable attached

Return: true if a condition variable attached, otherwise false


Updated on 31 May 2022 at 15:29:16 CEST