pub struct DataWriter<T>where
T: DdsType,{ /* private fields */ }Expand description
Typed DataWriter — schickt Samples an alle matched Reader des Topics.
Zwei Modi:
- Live (
runtime: Some,entity_id: Some): write() delegiert an die Runtime → ReliableWriter → UDP. - Offline (Offline-Fallback, Runtime=None): write() queued in-memory; fuer Unit-Tests ohne Netz.
Implementations§
Source§impl<T> DataWriter<T>where
T: DdsType,
impl<T> DataWriter<T>where
T: DdsType,
Sourcepub fn set_listener(
&self,
listener: Option<Arc<dyn DataWriterListener>>,
mask: u32,
)
pub fn set_listener( &self, listener: Option<Arc<dyn DataWriterListener>>, mask: u32, )
setzt den DataWriterListener + StatusMask. None
loescht den Slot. Spec §2.2.2.4.2.x set_listener.
Sourcepub fn get_listener(&self) -> Option<Arc<dyn DataWriterListener>>
pub fn get_listener(&self) -> Option<Arc<dyn DataWriterListener>>
aktueller Listener-Klon, sofern vorhanden.
Sourcepub fn qos(&self) -> DataWriterQos
pub fn qos(&self) -> DataWriterQos
Aktuelle QoS (cloned, .1).
Sourcepub fn write(&self, sample: &T) -> Result<(), DdsError>
pub fn write(&self, sample: &T) -> Result<(), DdsError>
Sendet einen Sample an alle matched Reader.
Spec §2.2.3.19 RESOURCE_LIMITS Reliable-Block: Wenn der
lokale Writer-Cache max_samples erreicht hat UND
Reliability=RELIABLE UND max_blocking_time > 0, blockt
write() bis Reader ACK den Slot freigibt oder das Timeout
abgelaufen ist. Im Best-Effort-Mode oder mit
max_blocking_time = 0 schlaegt write() sofort fehl mit
OutOfResources.
§Errors
WireErrorwennT::encodefehlschlaegt.OutOfResourceswenn die Queue full ist + Best-Effort/keine Block-Zeit, oder wenn der Block-Timeout vor einem Drain abgelaufen ist.PreconditionNotMetbei Lock-Poisoning.
Sourcepub fn samples_pending(&self) -> usize
pub fn samples_pending(&self) -> usize
Anzahl bisher geschriebener Samples. Test-Hilfsfunktion, in Runtime durch echte HistoryCache-Counter ersetzt.
Sourcepub fn matched_subscription_count(&self) -> usize
pub fn matched_subscription_count(&self) -> usize
Anzahl matched Remote-Reader. Im Offline-Mode immer 0.
Spec: OMG DDS 1.4 §2.2.2.4.2.11 get_matched_subscriptions.
Dort wird eine Liste zurueckgegeben; liefert nur
den Count, die volle Liste kommt mit Listener-Callbacks.
Seiteneffekt — bei einer Aenderung des Matched-Count
gegenueber dem letzten Aufruf wird on_publication_matched
via Bubble-Up-Kette gefeuert (Spec §2.2.4.2.4.4).
Sourcepub fn wait_for_matched_subscription(
&self,
min_count: usize,
timeout: Duration,
) -> Result<(), DdsError>
pub fn wait_for_matched_subscription( &self, min_count: usize, timeout: Duration, ) -> Result<(), DdsError>
Blockiert, bis mindestens min_count Remote-Reader matched
sind oder timeout verstreicht. Event-driven via Runtime-Condvar
(D.5e Phase-1) — wakup direkt wenn SEDP einen Match propagiert,
kein 20-ms-Polling mehr.
Verwandt zu OMG DDS 1.4 §2.2.2.4.2.22 wait_for_acknowledgments,
aber fokussiert auf Matching statt ACK. Deckt den typischen
Producer-Pattern “erst Writer anlegen, dann auf Subscriber warten,
dann schreiben” ab.
§Errors
DdsError::Timeout wenn min_count im Zeitfenster nicht
erreicht wird.
Sourcepub fn offered_deadline_missed_count(&self) -> u64
pub fn offered_deadline_missed_count(&self) -> u64
Counter fuer offered-Deadline-Verletzungen (Spec
§2.2.4.2.9 OFFERED_DEADLINE_MISSED_STATUS). Monoton steigend;
steigt um 1 pro abgelaufenem Deadline-Fenster ohne Write.
Im Offline-Mode oder bei deadline=INFINITE immer 0.
feuert ggf. on_offered_deadline_missed ueber die
Bubble-Up-Kette bei Delta gegenueber dem letzten Aufruf.
Sourcepub fn liveliness_lost_count(&self) -> u64
pub fn liveliness_lost_count(&self) -> u64
Counter fuer LivelinessLost-Detections (Spec §2.2.4.2.10).
Triggert ggf. on_liveliness_lost via Bubble-Up.
Sourcepub fn offered_incompatible_qos_status(&self) -> OfferedIncompatibleQosStatus
pub fn offered_incompatible_qos_status(&self) -> OfferedIncompatibleQosStatus
aktueller OfferedIncompatibleQosStatus (Spec
§2.2.4.2.4.2). Triggert ggf. on_offered_incompatible_qos.
Sourcepub fn drive_listeners(&self)
pub fn drive_listeners(&self)
pollt alle Statuses einmal und feuert pending Listener. Convenient Helper fuer Tests + periodische Tick-Aufrufer.
Sourcepub fn assert_liveliness(&self)
pub fn assert_liveliness(&self)
Manual-Liveliness-Assert. Spec §2.2.2.4.2.20
assert_liveliness. Setzt den last_liveliness_assert-Timestamp;
bei Automatic-Liveliness no-op (jeder write asserts ohnehin).
Sourcepub fn wait_for_acknowledgments(
&self,
timeout: Duration,
) -> Result<(), DdsError>
pub fn wait_for_acknowledgments( &self, timeout: Duration, ) -> Result<(), DdsError>
Blockiert, bis alle matched Remote-Reader alle bis jetzt
geschriebenen Samples acknowledgt haben, oder timeout abläuft.
Spec: OMG DDS 1.4 §2.2.2.4.2.22 wait_for_acknowledgments.
Im Offline-Mode und ohne gematchte Reader sofort Ok(()).
§Errors
DdsError::Timeout wenn nicht alle Samples im Zeitfenster
acknowledgt sind.
Sourcepub fn publication_handle(&self) -> InstanceHandle
pub fn publication_handle(&self) -> InstanceHandle
Lokaler Publication-Handle dieses DataWriters (Spec §2.2.2.5.1.11).
Wird im publication_handle-Feld des SampleInfo mitgegeben.
Achtung: das ist NICHT derselbe Handle wie der Entity-
InstanceHandle (Spec §2.2.2.1.1) — siehe Self::instance_handle.
Sourcepub fn instance_handle(&self) -> InstanceHandle
pub fn instance_handle(&self) -> InstanceHandle
Spec §2.2.2.1.1 get_instance_handle — Entity-Identifier
dieses DataWriters fuer Vergleiche via
DomainParticipant::contains_entity.
Sourcepub fn instance_tracker(&self) -> InstanceTracker
pub fn instance_tracker(&self) -> InstanceTracker
Liefert den geteilten Instance-Tracker des Writers (Test- und Inspection-Helper, Spec §2.2.2.4.2.5+ Lifecycle-Buchhaltung).
Sourcepub fn register_instance(
&self,
instance: &T,
) -> Result<InstanceHandle, DdsError>
pub fn register_instance( &self, instance: &T, ) -> Result<InstanceHandle, DdsError>
Registriert eine Instanz beim DataWriter und liefert ihren
stabilen InstanceHandle zurueck. Spec §2.2.2.4.2.5
register_instance.
Fuer non-keyed Topics liefert der Aufruf HANDLE_NIL zurueck
(jedes Sample ist seine eigene “Instanz”, die Spec sagt explizit
dass register/unregister/dispose hier optional sind).
§Errors
Aktuell kann der Aufruf nicht fehlschlagen. Spaeter (Live-Mode)
koennen Resource-Limits hier einen OutOfResources-Fehler
liefern.
Sourcepub fn register_instance_w_timestamp(
&self,
instance: &T,
timestamp: Time,
) -> Result<InstanceHandle, DdsError>
pub fn register_instance_w_timestamp( &self, instance: &T, timestamp: Time, ) -> Result<InstanceHandle, DdsError>
Wie register_instance, aber mit explizitem Timestamp.
Spec §2.2.2.4.2.6.
Sourcepub fn lookup_instance(&self, instance: &T) -> InstanceHandle
pub fn lookup_instance(&self, instance: &T) -> InstanceHandle
Macht aus einem Sample-Wert den dazugehoerigen lokalen
InstanceHandle, oder HANDLE_NIL wenn unbekannt /
non-keyed. Spec §2.2.2.4.2.14 lookup_instance.
Sourcepub fn unregister_instance(
&self,
instance: &T,
handle: InstanceHandle,
) -> Result<(), DdsError>
pub fn unregister_instance( &self, instance: &T, handle: InstanceHandle, ) -> Result<(), DdsError>
Entfernt die Instanz aus dem Writer-Set (Spec §2.2.2.4.2.7).
Setzt den Lifecycle-Zustand auf NOT_ALIVE_NO_WRITERS, sobald
der letzte Writer sich abgemeldet hat.
§Errors
BadParameter wenn handle nicht zur Instanz von instance
passt (Spec verlangt diese Konsistenz-Pruefung). Wenn
handle == HANDLE_NIL, wird der Handle aus instance
abgeleitet.
Sourcepub fn unregister_instance_w_timestamp(
&self,
instance: &T,
handle: InstanceHandle,
timestamp: Time,
) -> Result<(), DdsError>
pub fn unregister_instance_w_timestamp( &self, instance: &T, handle: InstanceHandle, timestamp: Time, ) -> Result<(), DdsError>
Wie unregister_instance, aber mit Timestamp. Spec §2.2.2.4.2.8.
Spec §2.2.3.21 WriterDataLifecycle: wenn
autodispose_unregistered_instances=true (Default), wird die
Instanz zusaetzlich zum Unregister auch disposed — Reader sehen
dann sowohl NOT_ALIVE_DISPOSED als auch NOT_ALIVE_NO_WRITERS.
Sourcepub fn dispose(
&self,
instance: &T,
handle: InstanceHandle,
) -> Result<(), DdsError>
pub fn dispose( &self, instance: &T, handle: InstanceHandle, ) -> Result<(), DdsError>
Disposed eine Instanz (Spec §2.2.2.4.2.10). Markiert sie als
NOT_ALIVE_DISPOSED; Reader sehen dann ein Sample mit
valid_data == false.
§Errors
Wie unregister_instance.
Sourcepub fn dispose_w_timestamp(
&self,
instance: &T,
handle: InstanceHandle,
timestamp: Time,
) -> Result<(), DdsError>
pub fn dispose_w_timestamp( &self, instance: &T, handle: InstanceHandle, timestamp: Time, ) -> Result<(), DdsError>
Wie dispose, aber mit Timestamp. Spec §2.2.2.4.2.11.
Sourcepub fn get_key_value(&self, handle: InstanceHandle) -> Result<T, DdsError>
pub fn get_key_value(&self, handle: InstanceHandle) -> Result<T, DdsError>
Gibt den Sample-Wert mit nur den @key-Feldern befuellt zurueck
(Spec §2.2.2.4.2.13 get_key_value). Implementierung: wir
rekonstruieren T via decode aus dem gespeicherten
PLAIN_CDR2-BE-Key-Holder. Damit das funktioniert, muss T::decode
einen Key-only-Stream akzeptieren — fuer einfache Records ist das
trivialerweise der Fall.
§Errors
BadParameterwenn der Handle unbekannt ist.WireErrorwenn der Key-Holder nicht viaT::decoderekonstruierbar ist.
Sourcepub fn write_w_timestamp(
&self,
sample: &T,
timestamp: Time,
) -> Result<(), DdsError>
pub fn write_w_timestamp( &self, sample: &T, timestamp: Time, ) -> Result<(), DdsError>
Schreibt ein Sample mit explizitem Timestamp (Spec §2.2.2.4.2.16
write_w_timestamp) und aktualisiert die Instanz-Buchhaltung.
§Errors
Wie Self::write.
Trait Implementations§
Source§impl<T> Debug for DataWriter<T>where
T: DdsType,
impl<T> Debug for DataWriter<T>where
T: DdsType,
Source§impl<T> Entity for DataWriter<T>where
T: DdsType,
Available on crate feature std only.
impl<T> Entity for DataWriter<T>where
T: DdsType,
std only.Source§fn set_qos(&self, qos: <DataWriter<T> as Entity>::Qos) -> Result<(), DdsError>
fn set_qos(&self, qos: <DataWriter<T> as Entity>::Qos) -> Result<(), DdsError>
Spec §2.2.3 / §2.2.2.4.2: DURABILITY, RELIABILITY, HISTORY, RESOURCE_LIMITS, OWNERSHIP, LIVELINESS sind Changeable=NO post-enable.
Source§type Qos = DataWriterQos
type Qos = DataWriterQos
DomainParticipantQos,
DataWriterQos, …).Source§fn get_qos(&self) -> <DataWriter<T> as Entity>::Qos
fn get_qos(&self) -> <DataWriter<T> as Entity>::Qos
get_qos.Source§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.