joecalsend/src/discovery/multicast.rs
2025-07-04 10:37:44 -07:00

29 lines
1,018 B
Rust

use crate::Client;
impl Client {
pub async fn announce_multicast(&self) -> crate::error::Result<()> {
let msg = self.device.to_json()?;
let addr = self.multicast_addr;
self.socket.send_to(msg.as_bytes(), addr).await?;
Ok(())
}
pub async fn listen_multicast(&self) -> crate::error::Result<()> {
let mut buf = [0; 65536];
println!("Socket local addr: {:?}", self.socket.local_addr()?);
println!("Listening on multicast addr: {}", self.multicast_addr);
loop {
match self.socket.recv_from(&mut buf).await {
Ok((size, src)) => {
let received_msg = String::from_utf8_lossy(&buf[..size]);
self.process_device(&received_msg, src).await;
}
Err(e) => {
eprintln!("Error receiving message: {e}");
tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;
}
}
}
}
}