use super::service_ref::ManagedDNSServiceRef;
use crate::event_loop::TEventLoop;
use crate::{ffi, Result};
use std::marker::PhantomData;
use std::sync::{Arc, Mutex};
use std::time::Duration;
#[derive(new)]
pub struct BonjourEventLoop<'a> {
service: Arc<Mutex<ManagedDNSServiceRef>>,
phantom: PhantomData<&'a ManagedDNSServiceRef>,
}
impl<'a> TEventLoop for BonjourEventLoop<'a> {
fn poll(&self, timeout: Duration) -> Result<()> {
let service = self.service.lock().unwrap();
let select = unsafe { ffi::macos::read_select(service.sock_fd(), timeout)? };
if select > 0 {
service.process_result()
} else {
Ok(())
}
}
}