use nym_sdk::mixnet::{
AnonymousSenderTag, MixnetClientBuilder, MixnetMessageSender, ReconstructedMessage,
StoragePaths,
};
use std::path::PathBuf;
use tempfile::TempDir;
#[tokio::main]
async fn main() {
nym_bin_common::logging::setup_tracing_logger();
let config_dir: PathBuf = TempDir::new().unwrap().path().to_path_buf();
let storage_paths = StoragePaths::new_from_dir(&config_dir).unwrap();
let client = MixnetClientBuilder::new_with_default_storage(storage_paths)
.await
.unwrap()
.build()
.unwrap();
let mut client = client.connect_to_mixnet().await.unwrap();
let our_address = client.nym_address();
println!("\nOur client nym address is: {our_address}");
client
.send_plain_message(*our_address, "hello there")
.await
.unwrap();
println!("Waiting for message\n");
let mut message: Vec<ReconstructedMessage> = Vec::new();
while let Some(new_message) = client.wait_for_messages().await {
if new_message.is_empty() {
continue;
}
message = new_message;
break;
}
let parsed = String::from_utf8(message[0].message.clone()).unwrap();
let return_recipient: AnonymousSenderTag = message[0].sender_tag.unwrap();
println!("Received: {parsed}\nSender tag: {return_recipient}");
println!("Replying using SURBs...");
client
.send_reply(return_recipient, "hi an0n!")
.await
.unwrap();
println!("Waiting for reply (ctrl-c to exit)\n");
client
.on_messages(|msg| println!("Received: {}", String::from_utf8_lossy(&msg.message)))
.await;
}