pub struct ReliableStreamState { /* private fields */ }Expand description
State-Machine eines reliable XRCE-Streams.
Implementations§
Source§impl ReliableStreamState
impl ReliableStreamState
Sourcepub fn new(stream_id: StreamId, config: ReliableConfig) -> Self
pub fn new(stream_id: StreamId, config: ReliableConfig) -> Self
Sourcepub fn in_flight_count(&self) -> usize
pub fn in_flight_count(&self) -> usize
Anzahl in-flight Samples auf der Sender-Seite.
Sourcepub fn out_of_order_count(&self) -> usize
pub fn out_of_order_count(&self) -> usize
Anzahl out-of-order Samples auf der Receiver-Seite.
Sourcepub fn expected(&self) -> SerialNumber16
pub fn expected(&self) -> SerialNumber16
Aktuelle Empfangs-Erwartungs-Seqnr (Receiver).
Sourcepub fn submit(&mut self, payload: Vec<u8>) -> Result<SerialNumber16, XrceError>
pub fn submit(&mut self, payload: Vec<u8>) -> Result<SerialNumber16, XrceError>
Submit eines neuen Sample. Liefert die zugewiesene Seqnr.
§Errors
PayloadTooLarge, wennpayload.len() > RELIABLE_MAX_PAYLOAD.ValueOutOfRange, wenn das Sender-Window voll ist (sender_windowin-flight Samples). Caller muss vorher ACKNACKs verarbeiten.
Sourcepub fn get_in_flight(&self, seq: SerialNumber16) -> Option<&[u8]>
pub fn get_in_flight(&self, seq: SerialNumber16) -> Option<&[u8]>
Lookup eines in-flight Payloads (z.B. fuer Resend).
Sourcepub fn pending_heartbeat(&mut self, now: Duration) -> Option<HeartbeatPayload>
pub fn pending_heartbeat(&mut self, now: Duration) -> Option<HeartbeatPayload>
Tick: liefert Some(HEARTBEAT), falls die Heartbeat-Periode
abgelaufen ist und in-flight Samples existieren.
Sourcepub fn recv_acknack(&mut self, payload: AckNackPayload)
pub fn recv_acknack(&mut self, payload: AckNackPayload)
Verarbeitet eingehendes ACKNACK auf der Sender-Seite.
first_unacked ist die kleinste seqnr, die der Receiver noch
erwartet; alles strikt davor wird als bestaetigt entfernt.
nack_bitmap ist 16-Bit; Bit i = “seqnr first_unacked + i
fehlt noch”. Wir entfernen also alle Samples < first_unacked
und alle Samples in [first_unacked, first_unacked+16), deren
Bit nicht gesetzt ist.
Sourcepub fn recv_data(
&mut self,
seq: SerialNumber16,
payload: Vec<u8>,
) -> Result<(), XrceError>
pub fn recv_data( &mut self, seq: SerialNumber16, payload: Vec<u8>, ) -> Result<(), XrceError>
Receiver: ein Sample mit seq + payload ist eingelaufen.
Speichert es im Out-Of-Order-Buffer (oder verwirft als Duplikat).
§Errors
ValueOutOfRange, wenn der Receiver-Buffer voll ist (DoS-Schutz).
Sourcepub fn drain_in_order(&mut self) -> Vec<(SerialNumber16, Vec<u8>)>
pub fn drain_in_order(&mut self) -> Vec<(SerialNumber16, Vec<u8>)>
Receiver: liefert alle in-Order verfuegbaren Samples ab
expected_seq und schiebt expected_seq weiter.
Sourcepub fn pending_acknack(
&self,
hint_last_seen: Option<SerialNumber16>,
) -> AckNackPayload
pub fn pending_acknack( &self, hint_last_seen: Option<SerialNumber16>, ) -> AckNackPayload
Receiver: berechnet das passende ACKNACK-Payload, das die
fehlenden Seqnrs ab expected_seq markiert. Liefert
Some(ACKNACK), wenn out-of-order Samples vorliegen ODER
last_recv_seen (HEARTBEAT-Hint) eine Luecke offenlegt.
Trait Implementations§
Source§impl Clone for ReliableStreamState
impl Clone for ReliableStreamState
Source§fn clone(&self) -> ReliableStreamState
fn clone(&self) -> ReliableStreamState
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more