Skip to main content

moonpool_sim/sim/
wakers.rs

1//! Waker management for async coordination.
2//!
3//! This module provides the WakerRegistry for managing task wakers
4//! in the simulation environment.
5
6use std::collections::BTreeMap;
7use std::task::Waker;
8
9use crate::network::sim::{ConnectionId, ListenerId};
10use crate::sim::state::FileId;
11
12/// Waker management for async coordination.
13#[derive(Debug, Default)]
14pub struct WakerRegistry {
15    #[allow(dead_code)] // Will be used for connection coordination in future phases
16    pub(crate) connection_wakers: BTreeMap<ConnectionId, Waker>,
17    pub(crate) listener_wakers: BTreeMap<ListenerId, Waker>,
18    pub(crate) read_wakers: BTreeMap<ConnectionId, Waker>,
19    pub(crate) task_wakers: BTreeMap<u64, Waker>,
20    /// Wakers waiting for write clog to clear
21    pub(crate) clog_wakers: BTreeMap<ConnectionId, Vec<Waker>>,
22    /// Wakers waiting for read clog to clear
23    pub(crate) read_clog_wakers: BTreeMap<ConnectionId, Vec<Waker>>,
24    /// Wakers waiting for cut connections to be restored
25    pub(crate) cut_wakers: BTreeMap<ConnectionId, Vec<Waker>>,
26    /// Wakers waiting for send buffer space to become available
27    pub(crate) send_buffer_wakers: BTreeMap<ConnectionId, Vec<Waker>>,
28    /// Wakers waiting for storage operations to complete.
29    /// Keyed by (FileId, operation_sequence_number).
30    pub(crate) storage_wakers: BTreeMap<(FileId, u64), Waker>,
31}