// harmony-agent/src/main.rs use log::info; use mdns_sd::{ServiceDaemon, ServiceInfo}; use std::collections::HashMap; use crate::SERVICE_TYPE; // The service we are advertising. const SERVICE_PORT: u16 = 43210; // A port for the service. It needs one, even if unused. pub async fn advertise() { info!("Starting Harmony Agent..."); // Get a unique ID for this machine. let motherboard_id = "some motherboard id"; let instance_name = format!("harmony-agent-{}", motherboard_id); info!("This agent's instance name: {}", instance_name); info!("Advertising with ID: {}", motherboard_id); // Create a new mDNS daemon. let mdns = ServiceDaemon::new().expect("Failed to create mDNS daemon"); // Create a TXT record HashMap to hold our metadata. let mut properties = HashMap::new(); properties.insert("id".to_string(), motherboard_id.to_string()); properties.insert("version".to_string(), "1.0".to_string()); // Create the service information. // The instance name should be unique on the network. let local_ip = local_ip_address::local_ip().unwrap(); let service_info = ServiceInfo::new( SERVICE_TYPE, &instance_name, "harmony-host.local.", // A hostname for the service local_ip, // "0.0.0.0", SERVICE_PORT, Some(properties), ) .expect("Failed to create service info"); // Register our service with the daemon. mdns.register(service_info) .expect("Failed to register service"); info!( "Service '{}' registered and now being advertised.", instance_name ); info!("Agent is running. Press Ctrl+C to exit."); for iface in get_if_addrs::get_if_addrs().unwrap() { println!("{:#?}", iface); } // Keep the agent running indefinitely. tokio::signal::ctrl_c().await.unwrap(); info!("Shutting down agent."); }