use tari_shutdown::ShutdownSignal;
use tokio::sync::oneshot;
use crate::{
connection_manager::{error::ConnectionManagerError, peer_connection::PeerConnection},
peer_manager::Peer,
};
pub struct DialState {
attempts: usize,
peer: Box<Peer>,
cancel_signal: ShutdownSignal,
reply_tx: Option<oneshot::Sender<Result<PeerConnection, ConnectionManagerError>>>,
}
impl DialState {
pub fn new(
peer: Box<Peer>,
reply_tx: Option<oneshot::Sender<Result<PeerConnection, ConnectionManagerError>>>,
cancel_signal: ShutdownSignal,
) -> Self {
Self {
peer,
attempts: 0,
reply_tx,
cancel_signal,
}
}
pub fn get_cancel_signal(&self) -> ShutdownSignal {
self.cancel_signal.clone()
}
pub fn inc_attempts(&mut self) -> &mut Self {
self.attempts += 1;
self
}
pub fn num_attempts(&self) -> usize {
self.attempts
}
pub fn send_reply(
&mut self,
result: Result<PeerConnection, ConnectionManagerError>,
) -> Result<(), Box<Result<PeerConnection, ConnectionManagerError>>> {
if let Some(reply) = self.reply_tx.take() {
reply.send(result)?;
return Ok(());
}
Ok(())
}
pub fn peer(&self) -> &Peer {
&self.peer
}
pub fn peer_mut(&mut self) -> &mut Peer {
&mut self.peer
}
}