pub struct WlpEndpoint { /* private fields */ }Expand description
WLP-Endpoint — Writer + Reader fuer DCPSParticipantMessage.
Owner ist die crate::runtime::DcpsRuntime. Der Endpoint wird unter dem Lock
der Runtime mutiert; alle Methoden nehmen &mut self.
Implementations§
Source§impl WlpEndpoint
impl WlpEndpoint
Sourcepub fn new(
own_prefix: GuidPrefix,
vendor_id: VendorId,
tick_period: Duration,
) -> Self
pub fn new( own_prefix: GuidPrefix, vendor_id: VendorId, tick_period: Duration, ) -> Self
Sourcepub fn set_tick_period(&mut self, period: Duration)
pub fn set_tick_period(&mut self, period: Duration)
Setzt eine neue Tick-Periode (z.B. nach Lease-Aenderung). Setzt den naechsten Beat-Slot zurueck auf “sofort”, damit eine Kuerzung der Periode unmittelbar wirkt (sonst wartet der Endpoint noch das alte Intervall ab).
Sourcepub fn assert_participant(&mut self)
pub fn assert_participant(&mut self)
assert_liveliness() auf dem DomainParticipant — enqueued
einen Manual-By-Participant-Pulse, der beim naechsten
tick() als WLP-DATA rausgeht. Idempotent ueber den
Tick-Slot — Mehrfachaufruf binnen einer Tick-Periode fuehrt
zu mehreren Pulses (Spec sagt nichts ueber Coalescing, aber
wir cappen mit MAX_QUEUED_PULSES).
Sourcepub fn assert_topic(&mut self, topic_token: Vec<u8>)
pub fn assert_topic(&mut self, topic_token: Vec<u8>)
assert_liveliness() auf einem DataWriter — enqueued einen
MANUAL_BY_TOPIC-Pulse mit dem gegebenen Topic-Token.
Spec-Compliance: ZeroDDS-Vendor-Kind, Cyclone ignoriert das
(MSB-set → “ignore unknown kind”, §9.6.3.1).
Sourcepub fn tick(&mut self, now: Duration) -> Result<Option<Vec<u8>>, WireError>
pub fn tick(&mut self, now: Duration) -> Result<Option<Vec<u8>>, WireError>
Tick. Liefert ggf. ein Datagram, das gesendet werden soll. Reihenfolge:
- Pending Manual-Pulses werden zuerst ausgesendet (einer pro
Tick — bei voller Queue dauert die Drainage
n * tick_period). - Wenn
now >= next_tickundtick_period > 0, sendet einen AUTOMATIC-Heartbeat und schedule den naechsten Tick.
None heisst: nichts zu senden in diesem Tick.
§Errors
WireError wenn das Encoding fehlschlaegt (z.B. SN-Overflow).
Sourcepub fn handle_datagram(
&mut self,
bytes: &[u8],
now: Duration,
) -> Result<bool, WireError>
pub fn handle_datagram( &mut self, bytes: &[u8], now: Duration, ) -> Result<bool, WireError>
Verarbeitet ein eingehendes Datagram. Wenn es eine WLP-DATA- Submessage enthaelt (writer_id == BUILTIN_PARTICIPANT_MESSAGE_ WRITER), wird der Per-Peer-Last-Seen-Timestamp aktualisiert. Andere Datagramme werden ignoriert.
§Errors
WireError wenn das aeussere Datagram malformed ist. Eine
einzelne malformed Submessage fuehrt nicht zum Fehler — wir
skippen sie still.
Sourcepub fn peer_state(&self, prefix: &GuidPrefix) -> Option<&PeerLivelinessState>
pub fn peer_state(&self, prefix: &GuidPrefix) -> Option<&PeerLivelinessState>
Liefert den aktuellen Liveliness-State eines bekannten Peers.
None wenn unbekannt.
Sourcepub fn peer_count(&self) -> usize
pub fn peer_count(&self) -> usize
Anzahl getrackter Peers.
Sourcepub fn lost_peers(
&self,
now: Duration,
lease: Duration,
) -> impl Iterator<Item = (&GuidPrefix, &PeerLivelinessState)> + '_
pub fn lost_peers( &self, now: Duration, lease: Duration, ) -> impl Iterator<Item = (&GuidPrefix, &PeerLivelinessState)> + '_
Iter ueber alle Peers, deren Last-Seen aelter als now - lease
ist. Caller nutzt das, um Liveliness-Lost-Events zu treiben.
Sourcepub fn forget_peer(&mut self, prefix: &GuidPrefix)
pub fn forget_peer(&mut self, prefix: &GuidPrefix)
Entfernt einen Peer aus dem Tracking (z.B. bei SPDP-Lease- Expire).