use interprocess::os::unix::udsocket::tokio::*;
use std::{io, mem::MaybeUninit};
use tokio::{io::ReadBuf, sync::oneshot::Sender, try_join};
pub async fn main(src: &str, dst: &str, notify: Option<Sender<()>>) -> io::Result<()> {
let socket_path = format!("/tmp/{}", src);
let socket = UdSocket::bind(socket_path)?;
if let Some(n) = notify {
let _ = n.send(());
}
socket.set_destination(dst)?;
let mut buffer = [MaybeUninit::<u8>::uninit(); 128];
let mut readbuf = ReadBuf::uninit(&mut buffer);
let message = format!("Hello from {}!", src);
let write = socket.send(message.as_bytes());
let read = socket.recv(&mut readbuf);
try_join!(write, read)?;
drop(socket);
let received_string = String::from_utf8_lossy(readbuf.filled());
println!("Server answered: {}", &received_string);
Ok(())
}