use tokio::sync::mpsc::{channel, Receiver, Sender};
use tokio::task::JoinHandle;
use tracing::{info};
use crate::SysSigReceiver;
pub struct TaskProcessor {
sender: Sender<JoinHandle<()>>,
receiver: Receiver<JoinHandle<()>>,
shutdown_receiver: SysSigReceiver
}
impl TaskProcessor {
pub fn generate_new_sender(&mut self) -> Sender<JoinHandle<()>> {
self.sender.clone()
}
pub fn new(
buffer: usize,
sys_sig_receiver: SysSigReceiver
) -> Self {
let (sdx, rcx) = channel::<JoinHandle<()>>(
buffer
);
Self {
sender: sdx,
receiver: rcx,
shutdown_receiver: sys_sig_receiver
}
}
pub async fn start(&mut self) {
while !self.shutdown_receiver.is_shutdown() {
let received_task = self.receiver.recv().await;
match received_task {
Some(thread) => {
let _ = thread.await;
}
_ => {}
}
}
info!("Shutdown signal was detected, shutting down.");
}
}