use std::io;
use std::sync::mpsc;
use mio::{Events, Interest, Poll, Token};
use crate::plugin::EventType;
pub fn poll(mut socket: udev::MonitorSocket, s: mpsc::Sender<EventType>) -> io::Result<()> {
let mut poll = Poll::new()?;
let mut events = Events::with_capacity(1024);
poll.registry().register(
&mut socket,
Token(0),
Interest::READABLE | Interest::WRITABLE,
)?;
loop {
poll.poll(&mut events, None)?;
for event in &events {
if event.token() == Token(0) && event.is_writable() {
for x in socket.clone() {
print_event(x);
s.send(EventType::UDev).unwrap();
}
}
}
}
}
fn print_event(event: udev::Event) {
println!(
"{}: {} {} (subsystem={}, sysname={}, devtype={})",
event.sequence_number(),
event.event_type(),
event.syspath().to_str().unwrap_or("---"),
event
.subsystem()
.map_or("", |s| { s.to_str().unwrap_or("") }),
event.sysname().to_str().unwrap_or(""),
event.devtype().map_or("", |s| { s.to_str().unwrap_or("") })
);
}