use crate::output_manager_service::TxId;
use log::*;
use std::time::Duration;
use tari_comms::types::CommsPublicKey;
use tari_comms_dht::outbound::MessageSendStates;
const LOG_TARGET: &str = "wallet::transaction_service::tasks";
const LOG_TARGET_STRESS: &str = "stress_test::transaction_service::tasks";
pub async fn wait_on_dial(
send_states: MessageSendStates,
tx_id: TxId,
destination_pubkey: CommsPublicKey,
message: &str,
direct_send_timeout: Duration,
) -> bool
{
if send_states.len() == 1 {
debug!(
target: LOG_TARGET,
"{} (TxId: {}) Direct Send to {} queued with Message {}",
message,
tx_id,
destination_pubkey,
send_states[0].tag,
);
debug!(
target: LOG_TARGET_STRESS,
"{} (TxId: {}) Direct Send to {} queued with Message {}",
message,
tx_id,
destination_pubkey,
send_states[0].tag,
);
let (sent, failed) = send_states.wait_n_timeout(direct_send_timeout, 1).await;
if !sent.is_empty() {
info!(
target: LOG_TARGET,
"Direct Send process for {} TX_ID: {} was successful with Message: {}", message, tx_id, sent[0]
);
debug!(
target: LOG_TARGET_STRESS,
"Direct Send process for {} TX_ID: {} was successful with Message: {}", message, tx_id, sent[0]
);
true
} else {
if failed.is_empty() {
warn!(
target: LOG_TARGET,
"Direct Send process for {} TX_ID: {} timed out", message, tx_id
);
debug!(
target: LOG_TARGET_STRESS,
"Direct Send process for {} TX_ID: {} timed out", message, tx_id
);
} else {
warn!(
target: LOG_TARGET,
"Direct Send process for {} TX_ID: {} and Message {} was unsuccessful and no message was sent",
message,
tx_id,
failed[0]
);
debug!(
target: LOG_TARGET_STRESS,
"Direct Send process for {} TX_ID: {} and Message {} was unsuccessful and no message was sent",
message,
tx_id,
failed[0]
);
}
false
}
} else {
warn!(target: LOG_TARGET, "{} Send Direct for TxID: {} failed", message, tx_id);
false
}
}