pub struct DomainParticipant { /* private fields */ }Expand description
Der Participant.
Implementations§
Source§impl DomainParticipant
impl DomainParticipant
Sourcepub fn runtime(&self) -> Option<&Arc<DcpsRuntime>>
pub fn runtime(&self) -> Option<&Arc<DcpsRuntime>>
Interner Zugriff auf die Runtime — von Publisher/Subscriber
verwendet, um DataWriter/Reader anzulegen. None wenn der
Participant im offline-Modus ist.
Sourcepub fn qos(&self) -> DomainParticipantQos
pub fn qos(&self) -> DomainParticipantQos
Liefert eine Kopie der DomainParticipantQos (Spec §2.2.2.2.1.4
get_qos).
Sourcepub fn set_qos(&self, qos: DomainParticipantQos) -> Result<(), DdsError>
pub fn set_qos(&self, qos: DomainParticipantQos) -> Result<(), DdsError>
Setzt die DomainParticipantQos (Spec §2.2.2.2.1.3 set_qos).
§Errors
Aktuell keine — die Methode liefert Ok(()) immer. Spec laesst
IMMUTABLE_POLICY zu, was wir aber nicht aktiv produzieren
(alle Policies sind im RC1 mutable).
Sourcepub fn register_builtin_types(&self)
pub fn register_builtin_types(&self)
Registriert die 4 Spec-§7.6.5-Built-in-Types
(DDS::String, DDS::KeyedString, DDS::Bytes, DDS::KeyedBytes)
im lokalen TypeRegistry. Idempotent — doppelter Aufruf ueber-
schreibt die Eintraege deterministisch.
Wird automatisch aus new()/new_with_runtime() aufgerufen,
kann aber auch nach einem unregister_builtin_types()-Disable
erneut aufgerufen werden.
Sourcepub fn unregister_builtin_types(&self)
pub fn unregister_builtin_types(&self)
Loescht alle registrierten Built-in-Types. Wird heute nicht von Default-Pfaden gerufen — Test-Hilfsfunktion fuer Disable-Flag-Tests.
Sourcepub fn find_builtin_type(&self, name: &str) -> Option<DynamicType>
pub fn find_builtin_type(&self, name: &str) -> Option<DynamicType>
Lookup eines Built-in-Types via Spec-Name (Spec §7.6.5).
Gibt Some(DynamicType) zurueck wenn der Name bekannt ist
(registriert via register_builtin_types).
Sourcepub fn registered_type_count(&self) -> usize
pub fn registered_type_count(&self) -> usize
Anzahl registrierter Built-in-Types. Nach new() == 4.
Sourcepub fn enqueue_type_lookup(&self, hash: EquivalenceHash) -> bool
pub fn enqueue_type_lookup(&self, hash: EquivalenceHash) -> bool
Versucht einen TypeLookup-Request fuer einen unbekannten
EquivalenceHash zu queuen. Beachtet Backoff (5s zwischen
Versuchen) und maximal 3 Wiederholungen pro Hash.
Returns: true wenn der Request gequeued wurde, false bei
Backoff-Suppression oder Max-Attempts.
Sourcepub fn drain_type_lookup_requests(&self) -> Vec<(EquivalenceHash, u64)>
pub fn drain_type_lookup_requests(&self) -> Vec<(EquivalenceHash, u64)>
Drainet die queued TypeLookup-Requests. Liefert
Vec<(hash, seq)>. In Production-Umgebung wuerde der Caller
die Hashes via TypeLookupClient + Reliable-Writer auf den
TL_SVC_REQ_WRITER-Endpoint senden.
Sourcepub fn ingest_type_lookup_reply(
&self,
types: Vec<(EquivalenceHash, MinimalTypeObject)>,
) -> usize
pub fn ingest_type_lookup_reply( &self, types: Vec<(EquivalenceHash, MinimalTypeObject)>, ) -> usize
Empfaengt ein TypeLookup-Reply (TypeObjects pro Hash). Registriert die TypeObjects in einem internen TypeRegistry- Spiegel — danach kann ein gestoppter QoS-Match retried werden.
Anzahl erfolgreich registrierter Typen wird zurueckgegeben.
Sourcepub fn on_remote_publication_discovered(
&self,
type_information_blob: Option<&[u8]>,
) -> usize
pub fn on_remote_publication_discovered( &self, type_information_blob: Option<&[u8]>, ) -> usize
SEDP-Discovery-Hook: prueft eine eingehende
PublicationBuiltinTopicData auf Type-Hashes, die lokal nicht
aufloesbar sind. Bei Bedarf wird ein TypeLookup-Request via
enqueue_type_lookup gequeued.
Der RPC-Pfad ist via DcpsRuntime::send_type_lookup_request
auf den TL_SVC_REQ_*-Endpoints (XTypes 1.3 §7.6.3.3.4) live;
diese Methode entscheidet pro Hash, ob ein Re-Request lohnt
(lokale Registry-Lookup + Backoff-Tracking).
Returns: Anzahl gequeued unbekannter Hashes (max 2 — minimal + complete).
Sourcepub fn on_remote_subscription_discovered(
&self,
type_information_blob: Option<&[u8]>,
) -> usize
pub fn on_remote_subscription_discovered( &self, type_information_blob: Option<&[u8]>, ) -> usize
SEDP-Discovery-Hook fuer
SubscriptionBuiltinTopicData. Symmetrisch zu
on_remote_publication_discovered.
Sourcepub fn type_lookup_exhausted(&self, hash: EquivalenceHash) -> bool
pub fn type_lookup_exhausted(&self, hash: EquivalenceHash) -> bool
True wenn fuer den Hash bereits MAX_ATTEMPTS erreicht. Wird vom Match-Re-Try-Pfad konsultiert: spaeter aufgeben statt endlos zu pollen.
Sourcepub fn create_topic<T>(
&self,
name: &str,
qos: TopicQos,
) -> Result<Topic<T>, DdsError>where
T: DdsType,
pub fn create_topic<T>(
&self,
name: &str,
qos: TopicQos,
) -> Result<Topic<T>, DdsError>where
T: DdsType,
Erzeugt einen typed Topic-Handle. Wiederholte Aufrufe mit gleichem Namen + Typ liefern denselben Handle (Ref-geteilt).
§Errors
InconsistentPolicywenn ein Topic mit diesem Namen bereits unter anderem Typ registriert ist.BadParameterbei leerem Namen.
Sourcepub fn lookup_topicdescription(
&self,
name: &str,
) -> Option<TopicDescriptionHandle>
pub fn lookup_topicdescription( &self, name: &str, ) -> Option<TopicDescriptionHandle>
Sofortiger lokaler Lookup eines Topics nach Name — gibt None
zurueck, wenn kein lokales create_topic mit diesem Namen
erfolgt ist. Macht keinen Discovery-Wait (das ist
find_topic). Spec-Referenz: OMG DDS 1.4 §2.2.2.2.1.12
“lookup_topicdescription”.
Sourcepub fn find_topic(
&self,
name: &str,
timeout: Duration,
) -> Result<TopicDescriptionHandle, DdsError>
pub fn find_topic( &self, name: &str, timeout: Duration, ) -> Result<TopicDescriptionHandle, DdsError>
Wartet bis ein Topic mit dem gegebenen Namen via Discovery
(SEDP-Publication oder -Subscription) sichtbar ist — oder bis
timeout abgelaufen ist. Spec-Referenz: OMG DDS 1.4
§2.2.2.2.1.11 find_topic.
Returns:
Ok(handle)mit Name + Type-Name + Participant, falls waehrendtimeoutein passendes SEDP-Endpoint sichtbar wurde. Lokale Topics zaehlen ebenfalls (keine Pflicht zu warten, wenncreate_topicschon lief).Err(Timeout)wenntimeoutabgelaufen ist.
§Errors
DdsError::Timeoutwenntimeoutohne Discovery-Match abgelaufen ist.DdsError::BadParameterbei leerem Namen.
Sourcepub fn create_contentfilteredtopic<T>(
&self,
name: &str,
related_topic: &Topic<T>,
filter_expression: &str,
filter_parameters: Vec<String>,
) -> Result<ContentFilteredTopic<T>, DdsError>where
T: DdsType,
pub fn create_contentfilteredtopic<T>(
&self,
name: &str,
related_topic: &Topic<T>,
filter_expression: &str,
filter_parameters: Vec<String>,
) -> Result<ContentFilteredTopic<T>, DdsError>where
T: DdsType,
Erzeugt ein ContentFilteredTopic als Subset eines bereits
vorhandenen Topic<T>. Spec-Referenz: OMG DDS 1.4
§2.2.2.2.1.13 create_contentfilteredtopic.
Die filter_expression ist ein SQL-Subset (siehe Annex B).
filter_parameters sind Strings, die %0, %1, … in der
Expression ersetzen.
§Errors
BadParameterbei leerem Namen oder leerer Expression.BadParameterwenn die Filter-Expression nicht parst.BadParameterwenn ein referenzierter%N-Parameter nicht imfilter_parameters-Vec geliefert wird.
Sourcepub fn create_multitopic<T>(
&self,
name: &str,
type_name: &str,
related_topic_names: Vec<String>,
subscription_expression: &str,
expression_parameters: Vec<String>,
) -> Result<MultiTopic<T>, DdsError>where
T: DdsType,
pub fn create_multitopic<T>(
&self,
name: &str,
type_name: &str,
related_topic_names: Vec<String>,
subscription_expression: &str,
expression_parameters: Vec<String>,
) -> Result<MultiTopic<T>, DdsError>where
T: DdsType,
Erzeugt eine MultiTopic als kombinierende TopicDescription
ueber 1+ Underlying-Topics mit SQL-Subscription-Expression.
Spec-Referenz: OMG DDS 1.4 §2.2.2.2.1.15 create_multitopic
(optionales Spec-Feature).
§Errors
BadParameterbei leerem Namen oder Type-Namen.BadParameterwennrelated_topic_namesleer ist.BadParameterwenn die Subscription-Expression nicht parst.BadParameterwenn ein referenzierter%N-Parameter nicht imexpression_parameters-Vec geliefert wird.
Sourcepub fn delete_multitopic<T>(&self, mt: &MultiTopic<T>) -> Result<(), DdsError>where
T: DdsType,
pub fn delete_multitopic<T>(&self, mt: &MultiTopic<T>) -> Result<(), DdsError>where
T: DdsType,
Loescht eine MultiTopic. Spec §2.2.2.2.1.16
delete_multitopic. v1.2 ist es ein no-op-shim mit Participant-
Match-Check.
§Errors
BadParameter wenn die MultiTopic zu einem anderen Participant
gehoert.
Sourcepub fn delete_contentfilteredtopic<T>(
&self,
cft: &ContentFilteredTopic<T>,
) -> Result<(), DdsError>where
T: DdsType,
pub fn delete_contentfilteredtopic<T>(
&self,
cft: &ContentFilteredTopic<T>,
) -> Result<(), DdsError>where
T: DdsType,
Loescht ein ContentFilteredTopic. Spec-Referenz:
§2.2.2.2.1.14 delete_contentfilteredtopic.
In Rust ist das Lifetime-Handle des CFT bereits durch Drop
abgedeckt — die zugrundeliegenden Ressourcen werden frei, sobald
der ContentFilteredTopic<T> aus dem Scope geht. Diese Methode
existiert fuer Spec-Compliance der C++-API und validiert den
Participant-Match (Spec verlangt BadParameter, wenn das CFT
zu einem anderen Participant gehoert).
§Errors
BadParameterwenn das CFT zu einem anderen Participant gehoert.
Sourcepub fn create_publisher(&self, qos: PublisherQos) -> Publisher
pub fn create_publisher(&self, qos: PublisherQos) -> Publisher
Erzeugt einen Publisher mit gegebener QoS (Default reicht fuer v1.2).
Sourcepub fn create_subscriber(&self, qos: SubscriberQos) -> Subscriber
pub fn create_subscriber(&self, qos: SubscriberQos) -> Subscriber
Erzeugt einen Subscriber.
Sourcepub fn topics_len(&self) -> usize
pub fn topics_len(&self) -> usize
Anzahl aktuell registrierter Topics. Diagnose-API.
Sourcepub fn discovered_participants_count(&self) -> usize
pub fn discovered_participants_count(&self) -> usize
Anzahl aktuell entdeckter Remote-Participants ueber SPDP.
Spec: OMG DDS 1.4 §2.2.2.2.1.7 get_discovered_participants.
0 im offline-Modus.
Sourcepub fn discovered_publications_count(&self) -> usize
pub fn discovered_publications_count(&self) -> usize
Anzahl aktuell im SEDP-Cache bekannter Remote-Publications.
Spec: OMG DDS 1.4 §2.2.2.2.1.9 get_discovered_topics (~analog).
Sourcepub fn discovered_subscriptions_count(&self) -> usize
pub fn discovered_subscriptions_count(&self) -> usize
Anzahl aktuell im SEDP-Cache bekannter Remote-Subscriptions.
Sourcepub fn ignore_participant(&self, handle: InstanceHandle) -> Result<(), DdsError>
pub fn ignore_participant(&self, handle: InstanceHandle) -> Result<(), DdsError>
Markiert einen entdeckten remote DomainParticipant als
“ignoriert” — alle weiteren SPDP-Beacons mit diesem Handle
fallen aus dem Builtin-Reader-Stream raus, und gleichzeitig
werden alle SEDP-Endpoints, die zum gleichen Participant-
Prefix gehoeren, ebenfalls verworfen (Spec §2.2.2.2.1.14).
Per Spec ist die Aktion monoton — ein einmal ignorierter Participant bleibt es fuer den Lebenszyklus dieses Participants.
§Errors
Aktuell keine — die Methode liefert Ok(()) immer. Spec laesst
OUT_OF_RESOURCES zu, was wir aber nicht aktiv produzieren.
Sourcepub fn ignore_topic(&self, handle: InstanceHandle) -> Result<(), DdsError>
pub fn ignore_topic(&self, handle: InstanceHandle) -> Result<(), DdsError>
Markiert ein entdecktes remote Topic als “ignoriert”. Spec §2.2.2.2.1.15.
§Errors
Sourcepub fn ignore_publication(&self, handle: InstanceHandle) -> Result<(), DdsError>
pub fn ignore_publication(&self, handle: InstanceHandle) -> Result<(), DdsError>
Markiert eine entdeckte remote Publication als “ignoriert”. Spec §2.2.2.2.1.16.
§Errors
Sourcepub fn ignore_subscription(
&self,
handle: InstanceHandle,
) -> Result<(), DdsError>
pub fn ignore_subscription( &self, handle: InstanceHandle, ) -> Result<(), DdsError>
Markiert eine entdeckte remote Subscription als “ignoriert”. Spec §2.2.2.2.1.17.
§Errors
Sourcepub fn is_participant_ignored(&self, handle: InstanceHandle) -> bool
pub fn is_participant_ignored(&self, handle: InstanceHandle) -> bool
true wenn handle per ignore_participant markiert wurde.
Sourcepub fn is_topic_ignored(&self, handle: InstanceHandle) -> bool
pub fn is_topic_ignored(&self, handle: InstanceHandle) -> bool
true wenn handle per ignore_topic markiert wurde.
Sourcepub fn is_publication_ignored(&self, handle: InstanceHandle) -> bool
pub fn is_publication_ignored(&self, handle: InstanceHandle) -> bool
true wenn handle per ignore_publication markiert wurde.
Sourcepub fn is_subscription_ignored(&self, handle: InstanceHandle) -> bool
pub fn is_subscription_ignored(&self, handle: InstanceHandle) -> bool
true wenn handle per ignore_subscription markiert wurde.
Sourcepub fn delete_contained_entities(&self) -> Result<(), DdsError>
pub fn delete_contained_entities(&self) -> Result<(), DdsError>
Loescht alle vom Participant gehaltenen Children (Publishers, Subscribers, Topics, Builtin-Reader-Inboxes). Spec §2.2.2.2.1.18 — analoger Pendant existiert in Publisher/Subscriber/DataReader, der hier rekursiv mit abgedeckt wird.
Offline-Verhalten:
- Topic-Registry geleert (lokale Topics).
- Publisher-/Subscriber-Tracker geleert.
- Builtin-Topic-Reader-Inboxes geleert (so dass
take()nachdelete_contained_entitiesein leeres Vec liefert). - Kein SEDP-Unannounce — das Live-Verhalten
uebernimmt das, sobald die Runtime ein
Drop/shutdown-Handle bekommt. Aktueller Stand: der Runtime-Thread laeuft bis zum Process-Exit.
§Errors
PreconditionNotMet wenn ein interner Mutex vergiftet ist.
Sourcepub fn publishers_len(&self) -> usize
pub fn publishers_len(&self) -> usize
Anzahl der per create_publisher getrackten Publisher.
Diagnose-API fuer Tests.
Sourcepub fn subscribers_len(&self) -> usize
pub fn subscribers_len(&self) -> usize
Anzahl der per create_subscriber getrackten Subscriber.
Sourcepub fn instance_handle(&self) -> InstanceHandle
pub fn instance_handle(&self) -> InstanceHandle
Liefert den InstanceHandle dieses Participants. Identifiziert
die Entity gegenueber DCPS-API-Konsumenten (Spec §2.2.2.1.1
get_instance_handle).
Sourcepub fn contains_entity(&self, handle: InstanceHandle) -> bool
pub fn contains_entity(&self, handle: InstanceHandle) -> bool
Spec §2.2.2.2.1.10 contains_entity — true wenn handle zu
diesem Participant oder einer seiner direkt oder rekursiv
enthaltenen Entities gehoert.
Eingeschlossene Entity-Typen:
- der Participant selbst
- alle per
create_topicregistrierten Topics - alle per
create_publisher/create_subscribererzeugten Publisher/Subscriber - rekursiv: alle per
Publisher::create_datawriter/Subscriber::create_datareadererzeugten DataWriter/DataReader.
Sourcepub fn get_discovered_participants(&self) -> Vec<InstanceHandle>
pub fn get_discovered_participants(&self) -> Vec<InstanceHandle>
Liefert die InstanceHandles aller aktuell entdeckten
remote Participants (Spec §2.2.2.2.1.27). Im offline-Modus
leer. Ignorierte Participants tauchen nicht auf.
Sourcepub fn get_discovered_participant_data(
&self,
handle: InstanceHandle,
) -> Result<ParticipantBuiltinTopicData, DdsError>
pub fn get_discovered_participant_data( &self, handle: InstanceHandle, ) -> Result<ParticipantBuiltinTopicData, DdsError>
Liefert die ParticipantBuiltinTopicData zu einem Handle aus
get_discovered_participants (Spec §2.2.2.2.1.28).
§Errors
BadParameter wenn handle keinen entdeckten Participant
referenziert (oder wenn er ignoriert wurde).
Sourcepub fn get_discovered_topics(&self) -> Vec<InstanceHandle>
pub fn get_discovered_topics(&self) -> Vec<InstanceHandle>
Liefert die InstanceHandles aller aktuell entdeckten
remote Topics. Spec §2.2.2.2.1.29.
Topics werden via SEDP-Pub/Sub-Announcements indirekt
entdeckt — pro (topic_name, type_name) synthetisieren wir
einen stabilen Schluessel via TopicBuiltinTopicData:: synthesize_key. Ignorierte Topics tauchen nicht auf.
Sourcepub fn get_discovered_topic_data(
&self,
handle: InstanceHandle,
) -> Result<TopicBuiltinTopicData, DdsError>
pub fn get_discovered_topic_data( &self, handle: InstanceHandle, ) -> Result<TopicBuiltinTopicData, DdsError>
Liefert die TopicBuiltinTopicData zu einem Handle aus
get_discovered_topics. Spec §2.2.2.2.1.30.
§Errors
BadParameter wenn handle keinem entdeckten Topic
entspricht (oder ignoriert wurde).
Sourcepub fn get_builtin_subscriber(&self) -> Arc<BuiltinSubscriber>
pub fn get_builtin_subscriber(&self) -> Arc<BuiltinSubscriber>
Builtin-Subscriber des Participants (DDS 1.4 §2.2.2.2.1.7).
Liefert immer denselben Subscriber-Handle (genau ein Builtin-Subscriber pro Participant). Er enthaelt 4 vor-erzeugte Reader fuer die Builtin-Topics:
DCPSParticipant→ParticipantBuiltinTopicDataDCPSTopic→TopicBuiltinTopicDataDCPSPublication→PublicationBuiltinTopicDataDCPSSubscription→SubscriptionBuiltinTopicData
SPDP-/SEDP-Receive triggert intern einen Sample-Insert, der
per take()/read() abgeholt werden kann (DDS 1.4 §2.2.5).
§Example
use zerodds_dcps::*;
let participant = DomainParticipantFactory::instance()
.create_participant_offline(0, DomainParticipantQos::default());
let bs = participant.get_builtin_subscriber();
let r = bs
.lookup_datareader::<DcpsParticipantBuiltinTopicData>("DCPSParticipant")
.expect("builtin reader");
// Anfangs leer (offline-Mode → keine SPDP-Empfange).
assert!(r.take().expect("take").is_empty());Sourcepub fn set_listener(
&self,
listener: Option<Arc<dyn DomainParticipantListener>>,
mask: u32,
)
pub fn set_listener( &self, listener: Option<Arc<dyn DomainParticipantListener>>, mask: u32, )
Setzt den DomainParticipantListener. listener=None loescht
den Slot. mask ist die StatusMask, die festlegt, welche
Status-Bits dieser Listener konsumiert (Spec §2.2.4.2.3 Bubble-Up).
Sourcepub fn get_listener(&self) -> Option<Arc<dyn DomainParticipantListener>>
pub fn get_listener(&self) -> Option<Arc<dyn DomainParticipantListener>>
Liefert den aktuell installierten Listener-Klon, falls vorhanden. Spec §2.2.2.2.3.x get_listener.
Trait Implementations§
Source§impl Clone for DomainParticipant
impl Clone for DomainParticipant
Source§fn clone(&self) -> DomainParticipant
fn clone(&self) -> DomainParticipant
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for DomainParticipant
impl Debug for DomainParticipant
Source§impl Entity for DomainParticipant
impl Entity for DomainParticipant
Source§type Qos = DomainParticipantQos
type Qos = DomainParticipantQos
DomainParticipantQos,
DataWriterQos, …).Source§fn get_qos(&self) -> <DomainParticipant as Entity>::Qos
fn get_qos(&self) -> <DomainParticipant as Entity>::Qos
get_qos.Source§fn set_qos(
&self,
qos: <DomainParticipant as Entity>::Qos,
) -> Result<(), DdsError>
fn set_qos( &self, qos: <DomainParticipant as Entity>::Qos, ) -> Result<(), DdsError>
ImmutablePolicy-Error.
Spec §2.2.2.1.2 set_qos. Read moreSource§fn enable(&self) -> Result<(), DdsError>
fn enable(&self) -> Result<(), DdsError>
enable. Read moreSource§fn entity_state(&self) -> Arc<EntityState>
fn entity_state(&self) -> Arc<EntityState>
Arc<EntityState>.Source§fn is_enabled(&self) -> bool
fn is_enabled(&self) -> bool
Source§fn get_status_condition(&self) -> StatusCondition
fn get_status_condition(&self) -> StatusCondition
StatusCondition dieser Entity.
Spec §2.2.2.1.6 get_status_condition.Source§fn get_status_changes(&self) -> u32
fn get_status_changes(&self) -> u32
get_status_changes.Source§fn get_instance_handle(&self) -> InstanceHandle
fn get_instance_handle(&self) -> InstanceHandle
get_instance_handle.