sfm_sdk/processors/
task_processor.rs1use tokio::sync::mpsc::{channel, Receiver, Sender};
2use tokio::task::JoinHandle;
3use tracing::{info};
4use crate::SysSigReceiver;
5
6pub struct TaskProcessor {
7 sender: Sender<JoinHandle<()>>,
8 receiver: Receiver<JoinHandle<()>>,
9 shutdown_receiver: SysSigReceiver
10}
11
12impl TaskProcessor {
13 pub fn generate_new_sender(&mut self) -> Sender<JoinHandle<()>> {
14 self.sender.clone()
15 }
16
17 pub fn new(
18 buffer: usize,
19 sys_sig_receiver: SysSigReceiver
20 ) -> Self {
21 let (sdx, rcx) = channel::<JoinHandle<()>>(
22 buffer
23 );
24
25 Self {
26 sender: sdx,
27 receiver: rcx,
28 shutdown_receiver: sys_sig_receiver
29 }
30 }
31
32 pub async fn start(&mut self) {
33 while !self.shutdown_receiver.is_shutdown() {
34 let received_task = self.receiver.recv().await;
35
36 match received_task {
37 Some(thread) => {
38 let _ = thread.await;
39 }
40 _ => {}
41 }
42 }
43
44 info!("Shutdown signal was detected, shutting down.");
45 }
46}