use std::time::Instant;
use anyhow::Error;
use async_trait::async_trait;
use clap::Parser;
use minotari_app_utilities::utilities::UniNodeId;
use tari_comms::peer_manager::NodeId;
use tokio::task;
use super::{CommandContext, HandleCommand};
#[derive(Debug, Parser)]
pub struct Args {
node_id: UniNodeId,
}
#[async_trait]
impl HandleCommand<Args> for CommandContext {
async fn handle_command(&mut self, args: Args) -> Result<(), Error> {
self.dial_peer(args.node_id.into()).await
}
}
impl CommandContext {
pub async fn dial_peer(&self, dest_node_id: NodeId) -> Result<(), Error> {
let connectivity = self.comms.connectivity();
task::spawn(async move {
let start = Instant::now();
println!("☎️ Dialing peer...");
match connectivity.dial_peer(dest_node_id).await {
Ok(connection) => {
println!("⚡️ Peer connected in {}ms!", start.elapsed().as_millis());
println!("Connection: {connection}");
},
Err(err) => {
println!("☠️ {err}");
},
}
});
Ok(())
}
}