|
|
@@ -1,8 +1,10 @@
|
|
1
|
1
|
use std::fs::create_dir_all;
|
|
2
|
|
-use std::io::{self, Read, Write};
|
|
3
|
|
-use std::os::unix::net::{UnixListener, UnixStream};
|
|
|
2
|
+use std::io;
|
|
4
|
3
|
use std::sync::{Arc, Mutex};
|
|
5
|
|
-use std::thread;
|
|
|
4
|
+
|
|
|
5
|
+use async_std::os::unix::net::{UnixListener, UnixStream};
|
|
|
6
|
+use async_std::prelude::*;
|
|
|
7
|
+use async_std::task;
|
|
6
|
8
|
|
|
7
|
9
|
use twfss::{Database, SynchronizedDirectory};
|
|
8
|
10
|
|
|
|
@@ -27,6 +29,10 @@ fn db_path() -> String {
|
|
27
|
29
|
}
|
|
28
|
30
|
|
|
29
|
31
|
fn main() {
|
|
|
32
|
+ task::block_on(run());
|
|
|
33
|
+}
|
|
|
34
|
+
|
|
|
35
|
+async fn run() {
|
|
30
|
36
|
// Create the data directories if necessary.
|
|
31
|
37
|
create_dir_all(config_dir()).unwrap();
|
|
32
|
38
|
create_dir_all(data_dir()).unwrap();
|
|
|
@@ -47,21 +53,20 @@ fn main() {
|
|
47
|
53
|
|
|
48
|
54
|
// Listen for CLI commands.
|
|
49
|
55
|
// TODO: Graceful shutdown on errors.
|
|
50
|
|
- let listener = UnixListener::bind(cli::socket_path()).unwrap();
|
|
51
|
|
- for stream in listener.incoming() {
|
|
|
56
|
+ let listener = UnixListener::bind(cli::socket_path()).await.unwrap();
|
|
|
57
|
+ let mut incoming = listener.incoming();
|
|
|
58
|
+ while let Some(stream) = incoming.next().await {
|
|
52
|
59
|
match stream {
|
|
53
|
60
|
Ok(stream) => {
|
|
54
|
|
- thread::spawn(move || {
|
|
55
|
|
- let mut stream = stream;
|
|
56
|
|
- match handle_cli_client(&mut stream) {
|
|
57
|
|
- Ok(()) => {}
|
|
58
|
|
- Err(e) => {
|
|
59
|
|
- // Log error and try to send it to the stream.
|
|
60
|
|
- // TODO
|
|
61
|
|
- write!(stream, "Error: {:?}", e).ok();
|
|
62
|
|
- }
|
|
63
|
|
- };
|
|
64
|
|
- });
|
|
|
61
|
+ let mut stream = stream;
|
|
|
62
|
+ match handle_cli_client(&mut stream).await {
|
|
|
63
|
+ Ok(()) => {}
|
|
|
64
|
+ Err(e) => {
|
|
|
65
|
+ // Log error and try to send it to the stream.
|
|
|
66
|
+ // TODO
|
|
|
67
|
+ write!(stream, "Error: {:?}", e).await.ok();
|
|
|
68
|
+ }
|
|
|
69
|
+ };
|
|
65
|
70
|
}
|
|
66
|
71
|
Err(err) => {
|
|
67
|
72
|
eprintln!("Error while listening on the local unix socket: {:?}", err);
|
|
|
@@ -71,9 +76,9 @@ fn main() {
|
|
71
|
76
|
}
|
|
72
|
77
|
}
|
|
73
|
78
|
|
|
74
|
|
-fn handle_cli_client(stream: &mut UnixStream) -> Result<(), Error> {
|
|
|
79
|
+async fn handle_cli_client(stream: &mut UnixStream) -> Result<(), Error> {
|
|
75
|
80
|
let mut request = String::new();
|
|
76
|
|
- stream.read_to_string(&mut request)?;
|
|
|
81
|
+ stream.read_to_string(&mut request).await?;
|
|
77
|
82
|
|
|
78
|
83
|
let options: cli::Options = serde_json::from_str(&request)?;
|
|
79
|
84
|
let _verbose = options.verbose;
|