-
Notifications
You must be signed in to change notification settings - Fork 1
/
lib.rs
60 lines (52 loc) · 1.85 KB
/
lib.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
use std::sync::{Arc, Mutex};
use std::*;
#[macro_use]
extern crate log;
#[derive(Debug)]
pub enum Message {
RunCheck,
Terminate,
}
#[derive(Debug)]
pub struct ServiceController {
receiver: Arc<Mutex<tokio::sync::mpsc::Receiver<Message>>>,
//sender: Arc<Mutex<tokio::sync::mpsc::Sender<Message>>>,
}
impl ServiceController {
pub fn new(receiver: Arc<Mutex<tokio::sync::mpsc::Receiver<Message>>>) -> Self {
// pub fn new(receiver: tokio::sync::mpsc::Receiver<Message>, sender: Arc<Mutex<tokio::sync::mpsc::Sender<Message>>>) -> Self {
//pub fn new(sender: Arc<Mutex<tokio::sync::mpsc::Sender<Message>>>) -> Self {
ServiceController { receiver }
}
pub async fn run(&mut self) -> Result<(), Box<dyn std::error::Error>> {
let receiver = Arc::clone(&self.receiver);
// let receiver = self.
// tokio::spawn(async move {
while let Some(message) = receiver.lock().unwrap().recv().await {
// let message = receiver.lock().unwrap().recv().await.unwrap();
trace!("ServiceController: message received {:?}", &message);
match message {
Message::RunCheck => {
test();
info!("ServiceController: now should be able to run task");
}
Message::Terminate => {
info!("ServiceController: now terminating project");
break; // loop
}
}
}
// trace!("ServiceController: tokio loop finishes");
// });
Ok(())
}
}
impl Drop for ServiceController {
fn drop(&mut self) {
trace!("dropping service controller");
// self.sender.lock().unwrap().send(Message::Terminate).unwrap();
}
}
fn test() {
info!("test function");
}