Skip to main content

ave_core/helpers/network/
service.rs

1//! # Helper service
2//!
3
4use ave_actors::ActorError;
5use ave_network::CommandHelper as Command;
6use tokio::sync::mpsc::Sender;
7use tracing::error;
8
9use super::NetworkMessage;
10
11/// The Helper service.
12#[derive(Debug, Clone)]
13pub struct NetworkSender {
14    /// The command sender to communicate with the worker.
15    command_sender: Sender<Command<NetworkMessage>>,
16}
17
18impl NetworkSender {
19    /// Create a new `NetworkSender`.
20    pub const fn new(command_sender: Sender<Command<NetworkMessage>>) -> Self {
21        Self { command_sender }
22    }
23
24    /// Send command to the network worker.
25    pub async fn send_command(
26        &self,
27        command: Command<NetworkMessage>,
28    ) -> Result<(), ActorError> {
29        self.command_sender.send(command).await.map_err(|e| {
30            error!(
31                error = %e,
32                "Failed to send command to network worker"
33            );
34            ActorError::Functional {
35                description: e.to_string(),
36            }
37        })
38    }
39
40    /// Send a message to the Helper worker.
41    pub fn sender(&self) -> Sender<Command<NetworkMessage>> {
42        self.command_sender.clone()
43    }
44}