Skip to main content

QueueFilter

Struct QueueFilter 

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

3-priority FIFO queue with WaitingForAck backpressure.

The QueueFilter classifies frames by priority and queues them when the target connection is in WaitingForAck state. This prevents frame loss from the server overwhelming the client before it has acknowledged the previous frame.

When backpressure is released (ACK received), queued frames are drained in strict priority order: High → Normal → Low.

Implementations§

Source§

impl QueueFilter

Source

pub fn new(config: QueueFilterConfig) -> Self

Create a new QueueFilter with the given configuration.

Source

pub fn process_send(&self, envelope: &mut FrameEnvelope) -> FilterResult

Process a frame in the send direction.

  1. Classify the frame’s priority based on message code
  2. If backpressure is active (WaitingForAck), queue the frame
  3. Otherwise, pass through with priority set on envelope
Source

pub fn process_recv(&self, _envelope: &FrameEnvelope) -> FilterResult

Process a frame in the recv direction.

On the receive path, we just pass through. The actual backpressure release happens via on_ack_received().

Source

pub fn set_waiting_for_ack(&self, channel_id: u8, waiting: bool)

Set a channel’s WaitingForAck backpressure flag.

Source

pub fn on_ack_received(&self, channel_id: u8)

Notify that an ACK was received for a channel.

This releases backpressure and allows queued frames to be drained.

Source

pub fn on_send_error(&self, channel_id: u8)

Notify that a send error occurred for a channel.

This does not change backpressure state — the connection may retry.

Source

pub fn has_pending(&self, channel_id: u8) -> bool

Check if there are pending frames for a channel.

Source

pub fn total_pending(&self) -> usize

Get the total number of pending frames across all channels.

Source

pub fn drain(&self, channel_id: u8, max_count: usize) -> Vec<FrameEnvelope>

Drain up to max_count frames from a channel in priority order.

Returns frames in descending priority order: High → Normal → Low.

Source

pub fn pending_by_priority(&self, channel_id: u8) -> [usize; 3]

Get pending frame counts per priority for a channel.

Source

pub fn clear_channel(&self, channel_id: u8)

Remove all queued frames for a channel (e.g., on disconnect).

Source

pub fn stats_snapshot(&self) -> QueueFilterStatsSnapshot

Get a snapshot of the statistics.

Trait Implementations§

Source§

impl Debug for QueueFilter

Source§

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

Formats the value using the given formatter. Read more

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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, 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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more