use std::time::Duration;
use log::info;
use simpdiscoverylib::{BeaconListener, BeaconSender};
use flowcore::errors::*;
pub const RUNTIME_SERVICE_NAME: &str = "runtime._flowr._tcp.local";
#[cfg(feature = "debugger")]
pub const DEBUG_SERVICE_NAME: &str = "debug._flowr._tcp.local";
pub const JOB_SERVICE_NAME: &str = "jobs._flowr._tcp.local";
pub const CONTEXT_JOB_SERVICE_NAME: &str = "context_jobs._flowr._tcp.local";
pub const RESULTS_JOB_SERVICE_NAME: &str = "results._flowr._tcp.local";
pub const CONTROL_SERVICE_NAME: &str = "control._flowr._tcp.local";
pub const WAIT:i32 = 0;
pub static DONT_WAIT:i32 = zmq::DONTWAIT;
pub const CLIENT_SERVER_DISCOVERY_PORT:u16 = 9002;
pub const JOB_QUEUES_DISCOVERY_PORT:u16 = 9003;
pub fn discover_service(discovery_port: u16, name: &str) -> Result<String> {
let listener = BeaconListener::new(name.as_bytes(), discovery_port)?;
let beacon = listener.wait(None)?;
let server_address = format!("{}:{}", beacon.service_ip, beacon.service_port);
Ok(server_address)
}
pub fn enable_service_discovery(discovery_port: u16, name: &str, service_port: u16) -> Result<()> {
match BeaconSender::new(service_port, name.as_bytes(), discovery_port) {
Ok(beacon) => {
info!(
"Discovery beacon announcing service named '{}', on port: {}",
name, service_port
);
std::thread::spawn(move || {
let _ = beacon.send_loop(Duration::from_secs(1));
});
}
Err(e) => bail!("Error starting discovery beacon: {}", e.to_string()),
}
Ok(())
}