pub struct Mailbox {
pub nodes: Arc<RwLock<Vec<Endpoint>>>,
pub last_uid: Arc<RwLock<u64>>,
pub lookup: Arc<RwLock<HashMap<String, Vec<u64>>>>,
pub sender: Sender<Message>,
pub ack_timeout: Arc<RwLock<Duration>>,
pub rt: Arc<Runtime>,
}
Expand description
HID-IO Mailbox
Handles passing messages to various components inside of HID-IO Best thought of as a broadcast style packet switcher. Each thread (usually async tokio) is given a receiver and can filter for any desired packets. This is not quite as effecient as direct channels; however, this greatly simplifies message passing across HID-IO. Making it easier to add new modules.
This struct can be safely cloned and passed around anywhere in the codebase. In most cases only the sender field is used (as it has the subscribe() function as well).
Fields§
§nodes: Arc<RwLock<Vec<Endpoint>>>
§last_uid: Arc<RwLock<u64>>
§lookup: Arc<RwLock<HashMap<String, Vec<u64>>>>
§sender: Sender<Message>
§ack_timeout: Arc<RwLock<Duration>>
§rt: Arc<Runtime>
Implementations§
Source§impl Mailbox
impl Mailbox
pub fn new(rt: Arc<Runtime>) -> Mailbox
Sourcepub fn get_uid(&mut self, key: String, path: String) -> Option<u64>
pub fn get_uid(&mut self, key: String, path: String) -> Option<u64>
Attempt to locate an unused id for the device key
Sourcepub fn assign_uid(&mut self, key: String, path: String) -> Result<u64, Error>
pub fn assign_uid(&mut self, key: String, path: String) -> Result<u64, Error>
Assign uid This function will attempt to lookup an existing id first And generate a new uid if necessary An error is returned if this lookup already has a uid (string+path)
Sourcepub fn register_node(&mut self, endpoint: Endpoint)
pub fn register_node(&mut self, endpoint: Endpoint)
Register node as an endpoint (device or api)
Sourcepub fn unregister_node(&mut self, uid: u64)
pub fn unregister_node(&mut self, uid: u64)
Unregister node as an endpoint (device or api)
Sourcepub async fn send_command(
&self,
src: Address,
dst: Address,
id: HidIoCommandId,
data: Vec<u8>,
ack: bool,
) -> Result<Option<Message>, AckWaitError>
pub async fn send_command( &self, src: Address, dst: Address, id: HidIoCommandId, data: Vec<u8>, ack: bool, ) -> Result<Option<Message>, AckWaitError>
Convenience function to send a HidIo Command to device using the mailbox Returns the Ack message if enabled. Ack will timeout if it exceeds self.ack_timeout
Sourcepub fn try_send_message(
&self,
msg: Message,
) -> Result<Option<Message>, CommandError>
pub fn try_send_message( &self, msg: Message, ) -> Result<Option<Message>, CommandError>
Convenience function to send a HidIoPacketBuffer using the mailbox Returns the Ack message if available and applicable
Sourcepub fn try_send_command(
&self,
src: Address,
dst: Address,
id: HidIoCommandId,
data: Vec<u8>,
ack: bool,
) -> Result<Option<Message>, AckWaitError>
pub fn try_send_command( &self, src: Address, dst: Address, id: HidIoCommandId, data: Vec<u8>, ack: bool, ) -> Result<Option<Message>, AckWaitError>
Convenience function to send a HidIo Command to device using the mailbox Returns the Ack message if enabled. This is the blocking version of send_command(). Ack will timeout if it exceeds self.ack_timeout
pub fn drop_subscriber(&self, uid: u64, sid: u64)
pub fn drop_all_subscribers(&self)
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Mailbox
impl RefUnwindSafe for Mailbox
impl Send for Mailbox
impl Sync for Mailbox
impl Unpin for Mailbox
impl UnwindSafe for Mailbox
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.