use std::thread::JoinHandle;
use crate::{Error, buffer::RingBufReceiver, controller::CtrlSender};
pub struct CtrlRingBufReceiver {
ctrl_sender: CtrlSender,
ring_buf_receiver: RingBufReceiver<f32>,
handle: Option<JoinHandle<()>>,
}
impl Drop for CtrlRingBufReceiver {
fn drop(&mut self) {
let _ = self.ctrl_sender.quit();
if let Some(handle) = self.handle.take() {
let _ = handle.join();
}
}
}
impl CtrlRingBufReceiver {
pub fn new(
ctrl_sender: CtrlSender,
ring_buf_receiver: RingBufReceiver<f32>,
handle: Option<JoinHandle<()>>,
) -> Self {
Self {
ctrl_sender,
ring_buf_receiver,
handle,
}
}
pub fn get(&self, output: &mut [f32]) -> Result<usize, Error> {
self.ring_buf_receiver.get(output)
}
}