//! Proves AirDrop-style discovery: two engines in DIFFERENT rooms still see each //! other in nearby() with friendly names (mDNS, no server). //! cargo run --example nearby use std::time::Duration; use tethercore::{Engine, MessageHandler, Message}; struct Noop; impl MessageHandler for Noop { fn on_message(&self, _m: Message) {} fn on_status(&self, _c: bool) {} fn on_file(&self, _name: String, _mime: String, _data: Vec) {} } fn main() { let dead = "http://127.0.0.1:1".to_string(); let a = Engine::new(dead.clone(), "room-A".into(), "alpha".into(), "macos".into(), "Patrick's MacBook".into(), "acct-X".into()); let b = Engine::new(dead, "room-B".into(), "bravo".into(), "ios".into(), "Patrick's iPhone".into(), "acct-X".into()); a.start(Box::new(Noop)); b.start(Box::new(Noop)); eprintln!("browsing mDNS for ~5s…"); std::thread::sleep(Duration::from_secs(5)); println!("A.nearby():"); for p in a.nearby() { println!(" • {} [{}] room={}", p.name, p.source, p.room); } println!("B.nearby():"); for p in b.nearby() { println!(" • {} [{}] room={}", p.name, p.source, p.room); } let ok = a.nearby().iter().any(|p| p.name == "Patrick's iPhone" && p.room == "room-B") && b.nearby().iter().any(|p| p.name == "Patrick's MacBook" && p.room == "room-A"); println!("{}", if ok { "✅ cross-room discovery by name works" } else { "❌ did not discover" }); a.stop(); b.stop(); if !ok { std::process::exit(1); } }