sfm-sdk 0.2.32

A simple SDK for reusing SFM entities.
Documentation
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.");
    }
}