Struct Pending
pub(super) struct Pending {
pub(super) publishes: HashMap<PacketId, PendingPublish>,
pub(super) acks: HashMap<PacketId, PendingAck>,
deadlines: BTreeSet<(Instant, PacketId)>,
ack_timeout: Option<Duration>,
}Fields§
§publishes: HashMap<PacketId, PendingPublish>User-visible publish completions, keyed by the wire packet identifier. Per §4.4 the packet identifier is preserved across reconnects when the session is resumed, so it doubles as the stable handle for correlating PUBACK/PUBCOMP with the originating publish future.
acks: HashMap<PacketId, PendingAck>SUBSCRIBE and UNSUBSCRIBE completions, keyed by packet id. Packet ids are unique across operations, so a single map serves both (a SUBACK and an UNSUBACK can never collide on the same id).
deadlines: BTreeSet<(Instant, PacketId)>Ack-timeout schedule: one (deadline, packet_id) per in-flight
operation that has been written to the wire, ordered so the earliest
deadline is first. Empty when
ack_timeout is disabled. Entries are removed
exactly (keyed by the deadline stored on the operation) as operations
are acknowledged, so no stale entry ever survives to fire.
ack_timeout: Option<Duration>Per-operation acknowledgement deadline. None disables the schedule.
Implementations§
§impl Pending
impl Pending
pub(super) fn new(ack_timeout: Option<Duration>) -> Self
pub(super) fn earliest_deadline(&self) -> Option<Instant>
pub(super) fn earliest_deadline(&self) -> Option<Instant>
Earliest outstanding ack deadline, if any. The event loop arms its ack timer to this instant.
pub(super) fn mark_publish_sent(&mut self, packet_id: PacketId)
pub(super) fn mark_publish_sent(&mut self, packet_id: PacketId)
Arms (or re-arms, on retransmit) the ack deadline for a just-sent
publish, including a QoS 2 PUBREL retransmit (same packet id as the
publish it completes). No-op when the timeout is disabled or the
publish is no longer tracked.
pub(super) fn mark_ack_sent(&mut self, packet_id: PacketId)
pub(super) fn mark_ack_sent(&mut self, packet_id: PacketId)
Arms the ack deadline for a just-sent SUBSCRIBE/UNSUBSCRIBE. No-op when the timeout is disabled or the operation is no longer tracked.
pub(super) fn remove_publish(
&mut self,
packet_id: PacketId,
) -> Option<PendingPublish>
pub(super) fn remove_publish( &mut self, packet_id: PacketId, ) -> Option<PendingPublish>
Removes a publish, dropping its ack-deadline schedule entry.
pub(super) fn remove_ack(&mut self, packet_id: PacketId) -> Option<PendingAck>
pub(super) fn remove_ack(&mut self, packet_id: PacketId) -> Option<PendingAck>
Removes a SUBSCRIBE/UNSUBSCRIBE, dropping its ack-deadline schedule entry.
pub(super) fn fail_all(&mut self)
pub(super) fn fail_all(&mut self)
Fails every outstanding operation; used on user-requested disconnect
when the client is being torn down. In-flight publishes are also failed
(their futures resolve with Error::ConnectionClosed); the messages
themselves remain in the session for retransmission on the next
connection.
pub(super) fn fail_superseded_acks(&mut self, client: &Client<JournaledSession>)
pub(super) fn fail_superseded_acks(&mut self, client: &Client<JournaledSession>)
Fails parked SUBSCRIBE/UNSUBSCRIBE completions superseded by a later
request for the same filter, dropping their ack-deadline entries. See
fail_superseded_acks.
Auto Trait Implementations§
impl Freeze for Pending
impl !RefUnwindSafe for Pending
impl Send for Pending
impl Sync for Pending
impl Unpin for Pending
impl !UnwindSafe for Pending
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more