Go2Py/cpp_bridge/thirdparty/include/ddscxx/dds/pub/TAnyDataWriter.hpp

355 lines
16 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef OMG_TDDS_PUB_ANY_DATA_WRITER_HPP_
#define OMG_TDDS_PUB_ANY_DATA_WRITER_HPP_
/* Copyright 2010, Object Management Group, Inc.
* Copyright 2010, PrismTech, Corp.
* Copyright 2010, Real-Time Innovations, Inc.
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <dds/core/TEntity.hpp>
#include <dds/pub/Publisher.hpp>
#include <dds/pub/qos/DataWriterQos.hpp>
#include <dds/topic/TopicDescription.hpp>
namespace dds
{
namespace pub
{
template <typename DELEGATE>
class TAnyDataWriter;
}
}
/**
* @brief
* Typeless base class for the typed DataWriter.
*
* DataWriters are created type specific (fi DataWriter<Foo::Bar> writer). However, there
* are many places in the API (and possibly application) where the type can not be known
* while still some DataWriter has to be passed around, stored or even typeless functionality
* called.<br>
* Main examples in the API that need typeless DataWriter are: Publisher, PublisherListener
* and DomainParticipantListener.
*
*/
template <typename DELEGATE>
class dds::pub::TAnyDataWriter : public dds::core::TEntity<DELEGATE>
{
public:
OMG_DDS_REF_TYPE_PROTECTED_DC(TAnyDataWriter, dds::core::TEntity, DELEGATE)
OMG_DDS_IMPLICIT_REF_BASE(TAnyDataWriter)
OMG_DDS_COMPLETE_RULE_OF_FIVE_VIRTUAL_DEFAULT(TAnyDataWriter)
//==========================================================================
//== Entity Navigation
/**
* Get the Publisher that owns this DataWriter.
*
* @return the Publisher
* @throws dds::core::Error
* An internal error has occurred.
* @throws dds::core::NullReferenceError
* The entity was not properly created and references to dds::core::null.
* @throws dds::core::AlreadyClosedError
* The entity has already been closed.
*/
const dds::pub::Publisher& publisher() const;
/**
* Get the TopicDescription associated with this DataWriter.
*
* @return the TopicDescription
* @throws dds::core::Error
* An internal error has occurred.
* @throws dds::core::NullReferenceError
* The entity was not properly created and references to dds::core::null.
* @throws dds::core::AlreadyClosedError
* The entity has already been closed.
*/
const dds::topic::TopicDescription& topic_description() const;
//==========================================================================
//== QoS Management
/**
* Gets the DataWriterQos setting for this instance.
*
* @return the qos
* @throws dds::core::Error
* An internal error has occurred.
* @throws dds::core::NullReferenceError
* The entity was not properly created and references to dds::core::null.
* @throws dds::core::AlreadyClosedError
* The entity has already been closed.
* @throws dds::core::OutOfResourcesError
* The Data Distribution Service ran out of resources to
* complete this operation.
*/
dds::pub::qos::DataWriterQos
qos() const;
/**
* This operation replaces the existing set of QosPolicy settings for a DataWriter.
*
* The parameter qos contains the object with the QosPolicy settings which is
* checked for self-consistency and mutability.
*
* When the application tries to change a
* QosPolicy setting for an enabled DataWriter, which can only be set before the
* DataWriter is enabled, the operation will fail and a
* ImmutablePolicyError is thrown. In other words, the application must
* provide the presently set QosPolicy settings in case of the immutable QosPolicy
* settings. Only the mutable QosPolicy settings can be changed.
*
* When the qos contains conflicting QosPolicy settings (not self-consistent),
* the operation will fail and an InconsistentPolicyError is thrown.
*
* @param qos the qos
* @throws dds::core::Error
* An internal error has occurred.
* @throws dds::core::NullReferenceError
* The entity was not properly created and references to dds::core::null.
* @throws dds::core::AlreadyClosedError
* The entity has already been closed.
* @throws dds::core::OutOfResourcesError
* The Data Distribution Service ran out of resources to
* complete this operation.
* @throws dds::core::ImmutablePolicyError
* The parameter qos contains an immutable QosPolicy setting with a
* different value than set during enabling of the DataWriter.
* @throws dds::core::InconsistentPolicyError
* The parameter qos contains conflicting QosPolicy settings,
*/
void qos(const dds::pub::qos::DataWriterQos& qos);
/** @copydoc dds::pub::TAnyDataWriter::qos(const dds::pub::qos::DataWriterQos& qos) */
TAnyDataWriter& operator << (const dds::pub::qos::DataWriterQos& qos);
/** @copydoc dds::pub::TAnyDataWriter::qos() */
const TAnyDataWriter& operator >> (dds::pub::qos::DataWriterQos& qos) const;
//==========================================================================
//== ACKs
/**
* This operation blocks the calling thread until either all data written
* by the DataWriter is acknowledged by the local infrastructure, or until
* the duration specified by the timeout parameter elapses,
* whichever happens first.
*
* Data is acknowledged by the local infrastructure when it does not need to be stored
* in its DataWriters local history. When a locally-connected subscription (including
* the networking service) has no more resources to store incoming samples it will start
* to reject these samples, resulting in their source DataWriters to store them
* temporarily in their own local history to be retransmitted at a later moment in time.<br>
* In such scenarios, the wait_for_acknowledgments operation will block until the
* DataWriter has retransmitted its entire history, which is therefore effectively
* empty, or until the timeout expires, whichever happens first. In the latter
* case, this operation will throw a TimeoutError.
*
* <i>
* Be aware that in case the operation returns normally, the data has only been
* acknowledged by the local infrastructure: it does not mean all remote subscriptions
* have already received the data. However, delivering the data to remote nodes is then
* the sole responsibility of the networking service: even when the publishing
* application would terminate, all data that has not yet been received may be
* considered on-route and will therefore eventually arrive (unless the networking
* service itself will crash). In contrast, if a DataWriter would still have data in its
* local history buffer when it terminates, this data is considered lost.
* </i>
*
* This operation is intended to be used only if one or more of the contained
* DataWriters has its ReliabilityQosPolicyKind set to RELIABLE.
* Otherwise the operation will return immediately, since best-effort DataWriters will
* never store rejected samples in their local history:
* they will just drop them and continue business as usual.
*
* @param timeout the time out duration
* @throws dds::core::Error
* An internal error has occurred.
* @throws dds::core::NullReferenceError
* The entity was not properly created and references to dds::core::null.
* @throws dds::core::AlreadyClosedError
* The entity has already been closed.
* @throws dds::core::TimeoutError
* Not all data is acknowledged before timeout elapsed.
* @throws dds::core::OutOfResourcesError
* The Data Distribution Service ran out of resources to
* complete this operation.
*/
void wait_for_acknowledgments(const dds::core::Duration& timeout);
//==========================================================================
//== Status Management
/**
* This operation obtains the LivelinessLostStatus object of the DataWriter.
*
* The LivelinessLostStatus contains the information whether the liveliness (that the
* DataWriter has committed through its Liveliness QosPolicy) was respected.
* This means that the status represents whether the DataWriter failed to actively
* signal its liveliness within the offered liveliness period. If the liveliness is lost, the
* DataReader objects will consider the DataWriter as no longer “alive”.
*
* The LivelinessLostStatus can also be monitored using a
* DataWriterListener or by using the associated StatusCondition.
*
* @return the LivelinessLostStatus
* @throws dds::core::Error
* An internal error has occurred.
* @throws dds::core::NullReferenceError
* The entity was not properly created and references to dds::core::null.
* @throws dds::core::AlreadyClosedError
* The entity has already been closed.
* @throws dds::core::OutOfResourcesError
* The Data Distribution Service ran out of resources to
* complete this operation.
*/
const dds::core::status::LivelinessLostStatus liveliness_lost_status();
/**
* This operation obtains the OfferedDeadlineMissedStatus object of the DataWriter.
*
* The OfferedDeadlineMissedStatus contains the information whether the deadline (that the
* DataWriter has committed through its Deadline QosPolicy) was respected for
* each instance.
*
* The OfferedDeadlineMissedStatus can also be monitored using a
* DataWriterListener or by using the associated StatusCondition.
*
* @return the OfferedDeadlineMissedStatus
* @throws dds::core::Error
* An internal error has occurred.
* @throws dds::core::NullReferenceError
* The entity was not properly created and references to dds::core::null.
* @throws dds::core::AlreadyClosedError
* The entity has already been closed.
* @throws dds::core::OutOfResourcesError
* The Data Distribution Service ran out of resources to
* complete this operation.
*/
const dds::core::status::OfferedDeadlineMissedStatus offered_deadline_missed_status();
/**
* This operation obtains the OfferedIncompatibleQosStatus object of the DataWriter.
*
* The OfferedIncompatibleQosStatus contains the information whether a QosPolicy setting
* was incompatible with the requested QosPolicy setting.
*
* This means that the status represents whether a DataReader object has been
* discovered by the DataWriter with the same Topic and a requested
* DataReaderQos that was incompatible with the one offered by the DataWriter.
*
* The OfferedIncompatibleQosStatus can also be monitored using a
* DataWriterListener or by using the associated StatusCondition.
*
* @return the OfferedIncompatibleQosStatus
* @throws dds::core::Error
* An internal error has occurred.
* @throws dds::core::NullReferenceError
* The entity was not properly created and references to dds::core::null.
* @throws dds::core::AlreadyClosedError
* The entity has already been closed.
* @throws dds::core::OutOfResourcesError
* The Data Distribution Service ran out of resources to
* complete this operation.
*/
const dds::core::status::OfferedIncompatibleQosStatus offered_incompatible_qos_status();
/**
* This operation obtains the PublicationMatchedStatus object of the DataWriter.
*
* The PublicationMatchedStatus contains the information whether a new match has been
* discovered for the current publication, or whether an existing match has ceased to
* exist.
*
* This means that the status represents that either a DataReader object has been
* discovered by the DataWriter with the same Topic and a compatible Qos, or that a
* previously discovered DataReader has ceased to be matched to the current
* DataWriter. A DataReader may cease to match when it gets deleted, when it
* changes its Qos to a value that is incompatible with the current DataWriter or
* when either the DataWriter or the DataReader has chosen to put its matching
* counterpart on its ignore-list using the dds::sub::ignore or
* dds::pub::ignore operations.
*
* The operation may fail if the infrastructure does not hold the information necessary
* to fill in the PublicationMatchedStatus. This is the case when OpenSplice is
* configured not to maintain discovery information in the Networking Service. (See
* the description for the NetworkingService/Discovery/enabled property in
* the Deployment Manual for more information about this subject.) In this case the
* operation will throw UnsupportedError.
*
* The PublicationMatchedStatus can also be monitored using a
* DataWriterListener or by using the associated StatusCondition.
*
* @return the PublicationMatchedStatus
* @throws dds::core::Error
* An internal error has occurred.
* @throws dds::core::NullReferenceError
* The entity was not properly created and references to dds::core::null.
* @throws dds::core::UnsupportedError
* OpenSplice is configured not to maintain the information
* about “associated” subscriptions.
* @throws dds::core::AlreadyClosedError
* The entity has already been closed.
* @throws dds::core::OutOfResourcesError
* The Data Distribution Service ran out of resources to
* complete this operation.
*/
const dds::core::status::PublicationMatchedStatus publication_matched_status();
//==========================================================================
//== Liveliness Management
/**
* This operation asserts the liveliness for the DataWriter.
*
* This operation will manually assert the liveliness for the DataWriter. This way,
* the Data Distribution Service is informed that the corresponding DataWriter is
* still alive. This operation is used in combination with the Liveliness QosPolicy
* set to Liveliness::ManualByParticipant or Liveliness::ManualByTopic.
*
* Writing data via the write operation of a DataWriter will assert the liveliness on
* the DataWriter itself and its containing DomainParticipant. Therefore,
* assert_liveliness is only needed when not writing regularly.
*
* The liveliness should be asserted by the application, depending on the
* LivelinessQosPolicy. Asserting the liveliness for this DataWriter can also
* be achieved by asserting the liveliness to the DomainParticipant.
*
* @throws dds::core::Error
* An internal error has occurred.
* @throws dds::core::NullReferenceError
* The entity was not properly created and references to dds::core::null.
* @throws dds::core::AlreadyClosedError
* The entity has already been closed.
* @throws dds::core::OutOfResourcesError
* The Data Distribution Service ran out of resources to
* complete this operation.
* @throws dds::core::NotEnabledError
* The entity has not yet been enabled.
*/
void assert_liveliness();
};
#endif /* OMG_TDDS_PUB_ANY_DATA_WRITER_HPP_ */