Skip to main content

DomainParticipant

Struct DomainParticipant 

Source
pub struct DomainParticipant { /* private fields */ }
Expand description

Der Participant.

Implementations§

Source§

impl DomainParticipant

Source

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.

Source

pub fn domain_id(&self) -> i32

Domain-Id.

Source

pub fn qos(&self) -> DomainParticipantQos

Liefert eine Kopie der DomainParticipantQos (Spec §2.2.2.2.1.4 get_qos).

Source

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).

Source

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.

Source

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.

Source

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).

Source

pub fn registered_type_count(&self) -> usize

Anzahl registrierter Built-in-Types. Nach new() == 4.

Source

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.

Source

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.

Source

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.

Source

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).

Source

pub fn on_remote_subscription_discovered( &self, type_information_blob: Option<&[u8]>, ) -> usize

SEDP-Discovery-Hook fuer SubscriptionBuiltinTopicData. Symmetrisch zu on_remote_publication_discovered.

Source

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.

Source

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
  • InconsistentPolicy wenn ein Topic mit diesem Namen bereits unter anderem Typ registriert ist.
  • BadParameter bei leerem Namen.
Source

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”.

Source

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 waehrend timeout ein passendes SEDP-Endpoint sichtbar wurde. Lokale Topics zaehlen ebenfalls (keine Pflicht zu warten, wenn create_topic schon lief).
  • Err(Timeout) wenn timeout abgelaufen ist.
§Errors
  • DdsError::Timeout wenn timeout ohne Discovery-Match abgelaufen ist.
  • DdsError::BadParameter bei leerem Namen.
Source

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
  • BadParameter bei leerem Namen oder leerer Expression.
  • BadParameter wenn die Filter-Expression nicht parst.
  • BadParameter wenn ein referenzierter %N-Parameter nicht im filter_parameters-Vec geliefert wird.
Source

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
  • BadParameter bei leerem Namen oder Type-Namen.
  • BadParameter wenn related_topic_names leer ist.
  • BadParameter wenn die Subscription-Expression nicht parst.
  • BadParameter wenn ein referenzierter %N-Parameter nicht im expression_parameters-Vec geliefert wird.
Source

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.

Source

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
  • BadParameter wenn das CFT zu einem anderen Participant gehoert.
Source

pub fn create_publisher(&self, qos: PublisherQos) -> Publisher

Erzeugt einen Publisher mit gegebener QoS (Default reicht fuer v1.2).

Source

pub fn create_subscriber(&self, qos: SubscriberQos) -> Subscriber

Erzeugt einen Subscriber.

Source

pub fn topics_len(&self) -> usize

Anzahl aktuell registrierter Topics. Diagnose-API.

Source

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.

Source

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).

Source

pub fn discovered_subscriptions_count(&self) -> usize

Anzahl aktuell im SEDP-Cache bekannter Remote-Subscriptions.

Source

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.

Source

pub fn ignore_topic(&self, handle: InstanceHandle) -> Result<(), DdsError>

Markiert ein entdecktes remote Topic als “ignoriert”. Spec §2.2.2.2.1.15.

§Errors

Wie Self::ignore_participant.

Source

pub fn ignore_publication(&self, handle: InstanceHandle) -> Result<(), DdsError>

Markiert eine entdeckte remote Publication als “ignoriert”. Spec §2.2.2.2.1.16.

§Errors

Wie Self::ignore_participant.

Source

pub fn ignore_subscription( &self, handle: InstanceHandle, ) -> Result<(), DdsError>

Markiert eine entdeckte remote Subscription als “ignoriert”. Spec §2.2.2.2.1.17.

§Errors

Wie Self::ignore_participant.

Source

pub fn is_participant_ignored(&self, handle: InstanceHandle) -> bool

true wenn handle per ignore_participant markiert wurde.

Source

pub fn is_topic_ignored(&self, handle: InstanceHandle) -> bool

true wenn handle per ignore_topic markiert wurde.

Source

pub fn is_publication_ignored(&self, handle: InstanceHandle) -> bool

true wenn handle per ignore_publication markiert wurde.

Source

pub fn is_subscription_ignored(&self, handle: InstanceHandle) -> bool

true wenn handle per ignore_subscription markiert wurde.

Source

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() nach delete_contained_entities ein 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.

Source

pub fn publishers_len(&self) -> usize

Anzahl der per create_publisher getrackten Publisher. Diagnose-API fuer Tests.

Source

pub fn subscribers_len(&self) -> usize

Anzahl der per create_subscriber getrackten Subscriber.

Source

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).

Source

pub fn contains_entity(&self, handle: InstanceHandle) -> bool

Spec §2.2.2.2.1.10 contains_entitytrue wenn handle zu diesem Participant oder einer seiner direkt oder rekursiv enthaltenen Entities gehoert.

Eingeschlossene Entity-Typen:

  • der Participant selbst
  • alle per create_topic registrierten Topics
  • alle per create_publisher / create_subscriber erzeugten Publisher/Subscriber
  • rekursiv: alle per Publisher::create_datawriter / Subscriber::create_datareader erzeugten DataWriter/DataReader.
Source

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.

Source

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).

Source

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.

Source

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).

Source

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:

  • DCPSParticipantParticipantBuiltinTopicData
  • DCPSTopicTopicBuiltinTopicData
  • DCPSPublicationPublicationBuiltinTopicData
  • DCPSSubscriptionSubscriptionBuiltinTopicData

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());
Source

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).

Source

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

Source§

fn clone(&self) -> DomainParticipant

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DomainParticipant

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Entity for DomainParticipant

Source§

type Qos = DomainParticipantQos

QoS-Typ fuer diese Entity (z.B. DomainParticipantQos, DataWriterQos, …).
Source§

fn get_qos(&self) -> <DomainParticipant as Entity>::Qos

Liefert die aktuelle QoS (clone). Spec §2.2.2.1.2 get_qos.
Source§

fn set_qos( &self, qos: <DomainParticipant as Entity>::Qos, ) -> Result<(), DdsError>

Aendert QoS. Pre-enable: alles erlaubt. Post-enable: nur Felder mit “Changeable=YES” — sonst ImmutablePolicy-Error. Spec §2.2.2.1.2 set_qos. Read more
Source§

fn enable(&self) -> Result<(), DdsError>

Enabled die Entity (idempotent). Spec §2.2.2.1.4 enable. Read more
Source§

fn entity_state(&self) -> Arc<EntityState>

Interner Accessor — jede Impl liefert ihren Arc<EntityState>.
Source§

fn is_enabled(&self) -> bool

True wenn die Entity bereits enabled ist.
Source§

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

Bitmask der Status-Kinds, die seit letztem Read geaendert haben. Spec §2.2.2.1.5 get_status_changes.
Source§

fn get_instance_handle(&self) -> InstanceHandle

Lokaler 64-Bit-Identifier. Spec §2.2.2.1.7 get_instance_handle.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.