use crate::tokio::sync::{
mpsc::Sender as DefaultSender,
oneshot::{self, Receiver, Sender},
};
use crate::NodeMessage;
use ockam_core::Address;
pub struct AsyncDrop {
rx: Receiver<Address>,
sender: DefaultSender<NodeMessage>,
}
impl AsyncDrop {
pub fn new(sender: DefaultSender<NodeMessage>) -> (Self, Sender<Address>) {
let (tx, rx) = oneshot::channel();
(Self { rx, sender }, tx)
}
pub async fn run(self) {
if let Ok(addr) = self.rx.await {
debug!("Received AsyncDrop request for address: {}", addr);
let (msg, mut reply) = NodeMessage::stop_worker(addr, true);
if let Err(e) = self.sender.send(msg).await {
debug!("Failed sending AsyncDrop request to router: {}", e);
}
if reply.recv().await.is_none() {
debug!("AsyncDrop router reply was None");
}
}
}
}