use std::sync::mpsc;
#[derive(Debug, Clone)]
pub enum NetworkEvent {
GatewayChanged {
old: Option<String>,
new: Option<String>,
},
}
fn get_default_gateway() -> Option<String> {
crate::platform::current_platform()
.route_table
.default_gateway()
}
#[must_use]
pub fn spawn_network_monitor(poll_interval: std::time::Duration) -> mpsc::Receiver<NetworkEvent> {
let (tx, rx) = mpsc::channel();
std::thread::spawn(move || {
let mut last_gateway = get_default_gateway();
loop {
std::thread::sleep(poll_interval);
let current = get_default_gateway();
if current != last_gateway {
let event = NetworkEvent::GatewayChanged {
old: last_gateway.clone(),
new: current.clone(),
};
if tx.send(event).is_err() {
break; }
last_gateway = current;
}
}
});
rx
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_get_default_gateway_returns_some_or_none() {
let _gw = get_default_gateway();
}
}