Skip to content

Commit 3b8dffa

Browse files
committed
Impl: client never down
1 parent f21e781 commit 3b8dffa

File tree

1 file changed

+27
-23
lines changed

1 file changed

+27
-23
lines changed

client/src/main.rs

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
use core::client::Client;
22
use core::client_p2p::ClientP2P;
33
use core::log::*;
4+
use core::panic;
5+
use std::future::Future;
46

57
pub static mut SERVER: Option<String> = None;
68
pub static mut PORT: u16 = 0;
@@ -18,6 +20,7 @@ fn print_help() {
1820
}
1921

2022
fn main() {
23+
panic::custom_panic();
2124
let mut args = std::env::args();
2225
if args.len() < 5 {
2326
return print_help();
@@ -31,7 +34,6 @@ fn main() {
3134
}
3235
v => v,
3336
};
34-
// Some(args.nth(1).unwrap());
3537
let port = args.next().unwrap();
3638
PORT = match port.parse() {
3739
Ok(p) => p,
@@ -48,45 +50,47 @@ fn main() {
4850
}
4951
LOCAL_SERVICE = args.next().map(|s| s.to_string());
5052
}
51-
if is_p2p {
52-
serv_p2p();
53-
return;
54-
}
5553
loop {
56-
serv();
54+
if is_p2p {
55+
serv_p2p();
56+
} else {
57+
serv();
58+
}
5759
std::thread::sleep(std::time::Duration::from_millis(5000));
5860
}
5961
}
6062

61-
fn serv_p2p() {
62-
let server = unsafe { SERVER.as_ref().unwrap() };
63-
let port = unsafe { PORT };
64-
let local_service = unsafe { LOCAL_SERVICE.as_ref().unwrap() };
63+
fn task_guard(future: impl Future<Output = ()> + Send + 'static) {
6564
tokio::runtime::Builder::new_multi_thread()
6665
.enable_all()
6766
.build()
6867
.unwrap()
69-
.block_on(async {
70-
let p2p = ClientP2P::new(server.into(), port, local_service.into());
71-
match p2p.serv().await {
72-
Err(e) => {
73-
e!("启动失败:{e}");
74-
},
75-
_ => ()
76-
};
68+
.block_on(async move {
69+
let _ = tokio::spawn(future).await;
7770
});
7871
}
7972

73+
fn serv_p2p() {
74+
let server = unsafe { SERVER.as_ref().unwrap() };
75+
let port = unsafe { PORT };
76+
let local_service = unsafe { LOCAL_SERVICE.as_ref().unwrap() };
77+
task_guard(async move {
78+
let p2p = ClientP2P::new(server.into(), port, local_service.into());
79+
match p2p.serv().await {
80+
Err(e) => {
81+
e!("启动失败:{e}");
82+
},
83+
_ => ()
84+
};
85+
});
86+
}
87+
8088
fn serv() {
8189
let server = unsafe { SERVER.as_ref().unwrap() };
8290
let port = unsafe { PORT };
8391
let password = unsafe { PASSWORD.as_ref().unwrap() };
8492
let local_service = unsafe { LOCAL_SERVICE.as_ref().unwrap() };
85-
tokio::runtime::Builder::new_multi_thread()
86-
.enable_all()
87-
.build()
88-
.unwrap()
89-
.block_on(boot(server.into(), port, password.into(), local_service.into()));
93+
task_guard(boot(server.into(), port, password.into(), local_service.into()));
9094
}
9195

9296
async fn boot(server: String, port: u16, password: String, local_service: String) {

0 commit comments

Comments
 (0)