use crate::net::OutgoingDatagram;
use super::Registry;
impl Registry {
pub fn drain_transmits<F: FnMut(OutgoingDatagram)>(&mut self, mut sink: F) {
for client in self.clients.iter_mut() {
for t in client.drain_pending_out() {
sink(t);
}
}
}
pub fn reap_dead(&mut self) {
#[cfg(feature = "active-speaker")]
let detector = &mut self.detector;
let metrics = &self.metrics;
#[cfg(feature = "kalman-bwe")]
let bandwidth = &mut self.bandwidth;
self.clients.retain(|c| {
let alive = c.is_alive();
if !alive {
#[cfg(feature = "active-speaker")]
{
if c.in_speaker_detector {
detector.remove_peer(&*c.id);
}
}
#[cfg(feature = "kalman-bwe")]
bandwidth.reap_dead(c.id);
metrics.inc_client_disconnect();
metrics.dec_active_participants();
metrics.reap_dead_peer(*c.id);
}
alive
});
}
}