Struct MessagingChannels

Source
pub struct MessagingChannels {
    pub tx_messaging_to_signal_handler: AquaSender<bool>,
    pub rx_messaging_from_signal_handler: AquaReceiver<InternalCommand>,
    pub tx_messaging_to_refill: AquaSender<InternalCommand>,
    pub tx_messaging_to_ventilation: AquaSender<InternalCommand>,
    pub tx_messaging_to_heating: AquaSender<InternalCommand>,
    pub tx_messaging_to_feed: AquaSender<InternalCommand>,
    pub tx_messaging_to_balling: AquaSender<InternalCommand>,
    pub tx_messaging_to_monitors: AquaSender<InternalCommand>,
    pub tx_messaging_to_watchdog: AquaSender<InternalCommand>,
}
Expand description

Collects all channels used by the Messaging module for IPC.

This struct acts as a central container for all the communication endpoints that the Messaging module uses to dispatch commands received via a POSIX message queue to the appropriate application threads (domains). It also includes channels for communicating with the SignalHandler for graceful shutdown.

This entire struct is conditionally compiled and is only available on Linux systems, as POSIX message queues are a platform-specific feature.

Fields§

§tx_messaging_to_signal_handler: AquaSender<bool>

Sender for sending acknowledgments back to the SignalHandler.

§rx_messaging_from_signal_handler: AquaReceiver<InternalCommand>

Receiver for commands from the SignalHandler (e.g., Quit, Terminate).

§tx_messaging_to_refill: AquaSender<InternalCommand>

Sender for dispatching commands to the Refill module.

§tx_messaging_to_ventilation: AquaSender<InternalCommand>

Sender for dispatching commands to the Ventilation module.

§tx_messaging_to_heating: AquaSender<InternalCommand>

Sender for dispatching commands to the Heating module.

§tx_messaging_to_feed: AquaSender<InternalCommand>

Sender for dispatching commands to the Feed module.

§tx_messaging_to_balling: AquaSender<InternalCommand>

Sender for dispatching commands to the Balling module.

§tx_messaging_to_monitors: AquaSender<InternalCommand>

Sender for dispatching commands to the Monitors module.

§tx_messaging_to_watchdog: AquaSender<InternalCommand>

Sender for dispatching commands to the Watchdog module.

Implementations§

Source§

impl MessagingChannels

Source

pub fn send_command_to_domain( &mut self, command: InternalCommand, domain: MessagingDomain, ) -> Result<(), MessagingError>

Dispatches a command to the appropriate application domain (thread).

This function acts as a router, taking a generic InternalCommand and a MessagingDomain and sending the command to the correct channel based on the specified domain. It also handles the conditional incrementing of debug counters when the debug_channels feature is enabled.

§Arguments
  • command - The InternalCommand (e.g., Start, Stop) to be sent.
  • domain - The target MessagingDomain (e.g., Refill, Heating) that should receive the command.
§Returns

An empty Result (Ok(())) if the command was successfully sent.

§Errors

Returns a MessagingError if:

  • The domain is MessagingDomain::Unknown.
  • The target channel is disconnected (i.e., the receiving thread has terminated), wrapped in MessagingError::ChannelSendError.
Source

pub fn send_to_signal_handler( &mut self, ack: bool, ) -> Result<(), AquaChannelError>

Sends an acknowledgment to the signal handler.

Trait Implementations§

Source§

impl AcknowledgeSignalHandlerTrait for MessagingChannels

Source§

fn send_true_to_signal_handler(&mut self) -> Result<(), AquaChannelError>

Sends the raw acknowledgment message (true) to the SignalHandler. Read more
Source§

fn location(&self) -> String

Returns the source location (module path) for logging purposes. Read more
Source§

fn acknowledge_signal_handler(&mut self)

Acknowledges the SignalHandler by sending a confirmation message. Read more
Source§

impl Display for MessagingChannels

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, 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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
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<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> MaybeSendSync for T