mod command;
pub(crate) use command::Command;
pub use command::{CommandId, CommandResult};
mod connection;
pub(crate) mod dialer;
mod dispatched_command;
pub use dispatched_command::DispatchedCommand;
mod hub_event;
mod hub_input;
pub use hub_event::HubEvent;
pub(crate) use hub_input::HubInput;
mod hub_event_payload;
pub(crate) use hub_event_payload::HubEventPayload;
mod hub_results;
pub use hub_results::HubResults;
pub mod io;
pub(crate) mod listener;
mod state;
pub(crate) use state::State;
use crate::{ConnectionId, PeerId, SamodLoader, StorageId, UnixTimestamp, network::ConnectionInfo};
use super::RunState;
pub struct Hub {
state: State,
}
impl Hub {
pub(crate) fn new(state: State) -> Self {
Hub { state }
}
pub fn load(peer_id: PeerId) -> SamodLoader {
SamodLoader::new(peer_id)
}
#[tracing::instrument(skip(self, rng), fields(event = %event), level = "trace")]
pub fn handle_event<R: rand::Rng>(
&mut self,
rng: &mut R,
now: UnixTimestamp,
event: HubEvent,
) -> HubResults {
let mut results = HubResults::default();
self.state.handle_event(rng, now, event, &mut results);
results
}
pub fn storage_id(&self) -> StorageId {
self.state.storage_id()
}
pub fn peer_id(&self) -> PeerId {
self.state.peer_id().clone()
}
pub fn connections(&self) -> Vec<ConnectionInfo> {
self.state.connections()
}
pub fn established_peers(&self) -> Vec<(ConnectionId, PeerId)> {
self.state.established_peers()
}
pub fn is_connected_to(&self, peer_id: &PeerId) -> bool {
self.state.is_connected_to(peer_id)
}
pub fn is_stopped(&self) -> bool {
self.state.run_state() == RunState::Stopped
}
pub fn find_listener_for_url(&self, url: &url::Url) -> Option<crate::ListenerId> {
self.state.find_listener_for_url(url)
}
pub fn dialer_attempt(&self, dialer_id: crate::DialerId) -> Option<u32> {
self.state.dialer_attempt(dialer_id)
}
}