refact: Discovery callback takes a closure and fix git dependency hash
Some checks failed
Run Check Script / check (push) Failing after 33s
Compile and package harmony_composer / package_harmony_composer (push) Successful in 6m10s

This commit is contained in:
Jean-Gabriel Gill-Couture 2025-08-30 16:48:13 -04:00
parent 269f13ae9b
commit 1eca2cc1a9
3 changed files with 12 additions and 9 deletions

2
Cargo.lock generated
View File

@ -3468,7 +3468,7 @@ dependencies = [
[[package]] [[package]]
name = "mdns-sd" name = "mdns-sd"
version = "0.14.1" version = "0.14.1"
source = "git+https://github.com/jggc/mdns-sd.git?branch=patch-1#9e4619599d1493ec15395d62d82d40a43fbef9e7" source = "git+https://github.com/jggc/mdns-sd.git?branch=patch-1#371b65c0d6207e702dda8a2eb442cff21f0bab90"
dependencies = [ dependencies = [
"fastrand", "fastrand",
"flume", "flume",

View File

@ -1,6 +1,6 @@
use async_trait::async_trait; use async_trait::async_trait;
use harmony_inventory_agent::local_presence::DiscoveryEvent; use harmony_inventory_agent::local_presence::DiscoveryEvent;
use log::info; use log::{debug, info};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use crate::{ use crate::{
@ -45,7 +45,13 @@ impl<T: Topology> Interpret<T> for DiscoverInventoryAgentInterpret {
) -> Result<Outcome, InterpretError> { ) -> Result<Outcome, InterpretError> {
harmony_inventory_agent::local_presence::discover_agents( harmony_inventory_agent::local_presence::discover_agents(
self.score.discovery_timeout, self.score.discovery_timeout,
on_discover_event, |event: DiscoveryEvent| {
println!("Discovery event {event:?}");
match event {
DiscoveryEvent::ServiceResolved(service) => info!("Found instance {service:?}"),
_ => debug!("Unhandled event {event:?}"),
}
},
); );
todo!() todo!()
} }
@ -66,7 +72,3 @@ impl<T: Topology> Interpret<T> for DiscoverInventoryAgentInterpret {
todo!() todo!()
} }
} }
fn on_discover_event(event: &DiscoveryEvent) {
info!("got discovery event {event:?}");
}

View File

@ -4,7 +4,8 @@ use crate::local_presence::SERVICE_NAME;
pub type DiscoveryEvent = ServiceEvent; pub type DiscoveryEvent = ServiceEvent;
pub fn discover_agents(timeout: Option<u64>, on_event: fn(&DiscoveryEvent)) { pub fn discover_agents(timeout: Option<u64>, on_event: impl Fn(DiscoveryEvent) + Send + 'static)
{
// Create a new mDNS daemon. // Create a new mDNS daemon.
let mdns = ServiceDaemon::new().expect("Failed to create mDNS daemon"); let mdns = ServiceDaemon::new().expect("Failed to create mDNS daemon");
@ -14,7 +15,7 @@ pub fn discover_agents(timeout: Option<u64>, on_event: fn(&DiscoveryEvent)) {
std::thread::spawn(move || { std::thread::spawn(move || {
while let Ok(event) = receiver.recv() { while let Ok(event) = receiver.recv() {
on_event(&event); on_event(event.clone());
match event { match event {
ServiceEvent::ServiceResolved(resolved) => { ServiceEvent::ServiceResolved(resolved) => {
println!("Resolved a new service: {}", resolved.fullname); println!("Resolved a new service: {}", resolved.fullname);