Files
qt6-migration-pipeline/external/rti_connext_dds-7.7.0/include/ndds/commend/commend_facade.h
T
torstenandCopilot 342ffd3e5c Update submodule to latest BUILD_RTI fixes
- HandlerMinelayerData: BUILD_RTI Guards für RTI-Abhängigkeiten
- svcTabCommon: Export-Header-Fix via Fallback-Target
- TrainingAreaBase: Stub-Header für BUILD_RTI=OFF
- ddsfts: Include-Pfad und Dependency-Fixes
- BUILD_RTI=OFF Compilation vollständig unterstützt

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Entire-Checkpoint: 01M0JNZA586SACX1PRZ2DJAE5S
2026-08-21 19:30:20 +02:00

338 lines
11 KiB
C

/*
* Copyright (c) 2025 Real-Time Innovations, Inc. All rights reserved.
* No duplications, whole or partial, manual or electronic, may be made
* without express written permission. Any such copies, or revisions thereof,
* must display this notice unaltered.
* This code contains trade secrets of Real-Time Innovations, Inc.
*/
#ifndef commend_facade_h
#define commend_facade_h
#ifndef osapi_ntptime_h
#include "osapi/osapi_ntptime.h"
#endif
#ifndef reda_orderedDataType_h
#include "reda/reda_orderedDataType.h"
#endif
#ifndef event_generator_h
#include "event/event_generator.h"
#endif
#ifndef event_jobDispatcher_h
#include "event/event_jobDispatcher.h"
#endif
#ifndef netio_cap_include_manager_h
#include "netio_cap/netio_cap_manager.h"
#endif
#ifndef netio_configurator_h
#include "netio/netio_configurator.h"
#endif
#ifndef netio_sender_h
#include "netio/netio_sender.h"
#endif
#ifndef netio_receiver_h
#include "netio/netio_receiver.h"
#endif
#ifndef mig_generator_h
#include "mig/mig_generator.h"
#endif
#ifndef mig_interpreter_h
#include "mig/mig_interpreter.h"
#endif
#ifndef commend_dll_h
#include "commend/commend_dll.h"
#endif
#ifdef __cplusplus
extern "C" {
#endif
struct REDAWorkerFactory;
struct COMMENDFacade;
struct RTIEventGeneratorListener;
struct RTIEventGeneratorListenerStorage;
/* Doxygen file-level documentation =====================================*/
/*e \file
\brief COMMENDFacade *interface*--as in no implementation.
*/
/*e \defgroup COMMENDFacadeClass COMMENDFacade
\ingroup COMMENDModule
\brief A class that satisfies the "facade" design pattern in Gamma et. al.
*/
typedef RTIBool (*COMMENDFacadeEntryportDescAddFunction)(
struct COMMENDFacade *me,
struct REDAWeakReference *reference,
const struct RTINetioLocatorInfo *entryport,
struct REDAWorker *worker);
typedef void (*COMMENDFacadeEntryportDescRemoveFunction)(
struct COMMENDFacade *me,
const struct REDAWeakReference *reference,
struct REDAWorker *worker);
typedef RTIBool (*COMMENDFacadeEntryportDescCheckFunction)(
struct COMMENDFacade *me,
RTIBool *hasActiveEntryPorts,
const struct REDAWeakReference *referenceToPlugin,
struct REDAWorker *worker);
typedef void (*COMMENDFacadeDestinationDescRemoveFunction)(
struct COMMENDFacade *me,
struct RTINetioSenderDestinationGroup *group,
const struct REDAWeakReference *reference,
struct REDAWorker *worker);
/*e \ingroup COMMENDFacadeClass
*
* @brief Attempts to send an ACK to the destinations given, until the first
* successful dispatch to a transport occurs. This is so that we won't drop an
* ACK by attempting to give it to only 1 ack destination.
*
* @post 1 ACK is sent to one of the destinations provided.
*
* @see MIGGenerator_addAck
*/
extern COMMENDDllExport RTIBool COMMENDFacade_sendAck(
struct COMMENDFacade *me,
int *size,
const struct REDAWeakReference *destinationArrayIn,
int destinationCountIn,
int transportPriority,
MIGRtpsSubmessageFlag flags,
MIGRtpsObjectId readerObjectId,
const struct MIGRtpsGuid *writerGuidIn,
const struct MIGInterceptorHandlePtrs *writerDirectedInterceptorHandles,
const struct MIGRtpsBitmap *bitmap,
REDAEpoch epoch,
MIGAckKind ackKind,
const struct MIGGeneratorSecurityProperty *security,
MIGGeneratorEndian endianness,
struct REDAWorker *worker);
/*e \ingroup COMMENDFacadeClass
* Goal was to make this as simple as possible; many other parameters which
* may affect the behavior of a facade are just defaults. If you
* are not happy with the default behavior, we can expose some of them.
*/
struct COMMENDFacadeProperty {
/*
* @brief The method used to generate the ids.
* Using the mac address or the ip address.
*/
RTI_UINT32 autoIdKind;
/*
* @brief The guid prefix associated with this COMMEND instance.
*
* Used to initialize the RTPS message interpreter and generator
* objects (defined in the MIG module).
*/
struct MIGRtpsGuidPrefix guidPrefix;
/*
* @brief The thread participant identification.
*
* Used to give a meaningful name to the thread.
*/
char threadParticipantId[RTI_OSAPI_THREAD_PARTICIPANT_ID_MAX_SIZE];
struct RTIEventGeneratorProperty eventGenerator;
struct RTIEventJobDispatcherProperty jobDispatcher;
struct MIGGeneratorProperty messageGenerator;
struct MIGInterpreterProperty interpreter;
struct RTINetioReceiverProperty receiver;
struct RTINetioSenderProperty sender;
};
extern COMMENDDllExport RTIBool
COMMENDFacadeProperty_verify(const struct COMMENDFacadeProperty *me);
#define COMMEND_FACADE_PROPERTY_DEFAULT \
{ \
0, /* autoIdKind */ \
MIG_RTPS_GUID_PREFIX_UNKNOWN, /* guidPrefix */ \
"#####", /* threadParticipantId */ \
RTI_EVENT_GENERATOR_PROPERTY_DEFAULT, \
RTI_EVENT_JOB_DISPATCHER_PROPERTY_DEFAULT, \
MIG_GENERATOR_PROPERTY_DEFAULT, \
MIG_INTERPRETER_PROPERTY_DEFAULT, \
RTI_NETIO_RECEIVER_PROPERTY_DEFAULT, \
RTI_NETIO_SENDER_PROPERTY_DEFAULT \
}
/*e \defgroup COMMENDFacadeClass COMMENDFacade
* \ingroup COMMENDModule
* Manages all the resources a commend service needs.
* @see COMMENDPassiveFacade COMMENDActiveFacade
*
* There is no public API because COMMENDFacade is only for COMMEND
* service implementations. There is nothing besides the construction and
* destructor that you can call on this. See the implementations for their
* own constructors and destructors.
*
* Having encapsulated the RTINetioSender and RTINetioReceiver, a
* COMMENDFacade is interested in assertion and removal of transport
* plugins into and from RTINetioConfigurator, and therefore exposes
* a way to get the relevant configurator listeners, as a pure
* virtual method.
*
* This is an abstract class; protected fields are marked with leading _,
* according to RTI naming convention.
*/
struct COMMENDFacade {
/*i peer access */
COMMENDFacadeEntryportDescAddFunction addEntryport;
/*i peer access */
COMMENDFacadeEntryportDescRemoveFunction removeEntryport;
/*i peer access */
COMMENDFacadeEntryportDescCheckFunction checkEntryports;
/*i peer access */
COMMENDFacadeDestinationDescRemoveFunction removeDestination;
/* <<uses>> */
struct REDAWorkerFactory *_workerFactory;
/* <<uses>> */
struct REDAExclusiveArea *_ea;
/* <<uses>> */
struct REDADatabase *_database;
/* <<uses>> */
struct RTIClock *_clock;
/* <<uses>> */
struct RTIClock *_timestampClock;
/* <<uses>> */
/* This clock is non-configurable and always shows the wall/system time */
struct RTIClock *_wallClock;
/* <<has>> */
struct RTIEventGenerator *_eventGenerator;
/* <<has>> */
struct RTIEventJobDispatcher *_jobDispatcher;
/* <<has>> */
struct RTINetioSender *_sender;
/* <<has>> */
struct RTINetioReceiver *_receiver;
/* <<uses>> */
struct RTINetioConfigurator *_configurator;
/* <<has>> */
struct MIGInterpreter *_messageInterpreter;
/* <<has>> */
struct MIGGenerator *_messageGenerator;
/* <<has>> */
struct RTINetioCapManager *_netioCapManager;
};
/*e \ingroup COMMENDFacadeClass
* \brief Helper method for presentation, so it doesn't have to create its own
* event generator. Also used throughout COMMEND itself.
* @see RTIEventGeneratorEventPostFunction
*/
extern COMMENDDllExport RTIBool COMMENDFacade_postEvent(
struct COMMENDFacade *me,
const struct RTINtpTime *time,
const struct RTINtpTime *snooze,
const struct RTIEventGeneratorListener *listener,
const struct RTIEventGeneratorListenerStorage *listenerStorage,
int bytesToCompareInReuse,
const struct RTIEventGeneratorActivityContextStorage
*activityContextStorage);
extern COMMENDDllExport RTIBool COMMENDFacade_removeTokenBucket(
struct COMMENDFacade *me,
struct RTIEventJobDispatcherTokenBucket *tokenBucket);
extern COMMENDDllExport struct RTIEventJobDispatcherTokenBucket *
COMMENDFacade_assertTokenBucketEDF(
struct COMMENDFacade *me,
const struct RTIEventJobDispatcherTokenBucketProperty *property);
extern COMMENDDllExport struct RTIEventJobDispatcherTokenBucket *
COMMENDFacade_assertTokenBucketHPF(
struct COMMENDFacade *me,
const struct RTIEventJobDispatcherTokenBucketProperty *property);
extern COMMENDDllExport struct RTIEventJobDispatcherTokenBucket *
COMMENDFacade_assertTokenBucketRR(
struct COMMENDFacade *me,
const struct RTIEventJobDispatcherTokenBucketProperty *property);
extern COMMENDDllExport RTIBool COMMENDFacade_getTokenBucketProperty(
struct COMMENDFacade *me,
struct RTIEventJobDispatcherTokenBucket *tokenBucket,
struct RTIEventJobDispatcherTokenBucketProperty *property);
extern COMMENDDllExport RTIBool COMMENDFacade_setTokenBucketProperty(
struct COMMENDFacade *me,
struct RTIEventJobDispatcherTokenBucket *tokenBucket,
const struct RTIEventJobDispatcherTokenBucketProperty *property);
extern COMMENDDllExport RTIBool COMMENDFacade_addTokensToBucket(
struct COMMENDFacade *me,
struct RTIEventJobDispatcherTokenBucket *tokenBucket);
extern COMMENDDllExport RTIBool COMMENDFacade_assertThread(
struct COMMENDFacade *me,
const struct RTIEventJobDispatcherStorage *threadStorage,
struct REDAExclusiveArea *eaBeforeAgentFncs,
const struct RTIEventJobDispatcherThreadProperty *property);
extern COMMENDDllExport RTIBool COMMENDFacade_removeThread(
struct COMMENDFacade *me,
struct RTIEventJobDispatcherThread *executionThread);
extern COMMENDDllExport RTIBool COMMENDFacade_getInstalledTransportPluginCount(
struct COMMENDFacade *me,
int *pluginCountOut,
struct REDAWorker *worker);
extern COMMENDDllExport RTIBool COMMENDFacade_getInstalledTransportPlugins(
struct COMMENDFacade *me,
NDDS_Transport_Plugin **pluginsOut,
int *countIn,
struct REDAWorker *worker);
extern COMMENDDllExport RTIBool
COMMENDFacade_getTime(struct COMMENDFacade *me, struct RTINtpTime *time);
extern COMMENDDllExport RTIBool COMMENDFacade_getTimestampTime(
struct COMMENDFacade *me,
struct RTINtpTime *time);
extern COMMENDDllExport RTIBool
COMMENDFacade_isTimestampClockSameAsClock(struct COMMENDFacade *me);
/*e \ingroup COMMENDFacadeClass
* \brief Checks if network capture is enabled, and if it was enabled before
* we created the DomainParticipant we want to capture for.
*
* @param facade \b in. facade of the DomainParticipant we want to run a network
* capture operation on.
*/
extern COMMENDDllExport RTIBool
COMMENDFacade_isNetworkCaptureEnabled(const struct COMMENDFacade *facade);
/*e \ingroup COMMENDFacadeClass
* \brief Gets the database associated with the facade.
*/
extern COMMENDDllExport struct REDADatabase *COMMENDFacade_getDatabase(
const struct COMMENDFacade *me);
#define COMMEND_PUBLICATION_PRIORITY_UNDEFINED (0)
#define COMMEND_PUBLICATION_PRIORITY_AUTOMATIC (-1)
#ifdef __cplusplus
} /* extern "C" */
#endif
#include "commend/commend_facade_impl.h"
#endif /* commend_facade_h */