File tree Expand file tree Collapse file tree 1 file changed +28
-3
lines changed Expand file tree Collapse file tree 1 file changed +28
-3
lines changed Original file line number Diff line number Diff line change 9
9
10
10
use env_logger;
11
11
12
+ use futures:: future:: FutureExt ;
12
13
use parking_lot:: RwLock ;
13
14
use site:: { load, util} ;
14
15
use std:: env;
@@ -26,13 +27,37 @@ async fn main() {
26
27
let data_ = data. clone ( ) ;
27
28
let fut = tokio:: task:: spawn ( async move {
28
29
* data_. write ( ) = Some ( Arc :: new (
29
- load:: InputData :: from_fs ( & util:: get_repo_path ( ) . unwrap ( ) ) . await . unwrap ( ) ,
30
+ load:: InputData :: from_fs ( & util:: get_repo_path ( ) . unwrap ( ) )
31
+ . await
32
+ . unwrap ( ) ,
30
33
) ) ;
31
- } ) ;
34
+ } )
35
+ . fuse ( ) ;
32
36
let port = env:: var ( "PORT" )
33
37
. ok ( )
34
38
. and_then ( |x| x. parse ( ) . ok ( ) )
35
39
. unwrap_or ( 2346 ) ;
36
40
println ! ( "Starting server with port={:?}" , port) ;
37
- futures:: join!( fut, site:: server:: start( data, port) ) . 0 . unwrap ( ) ;
41
+
42
+ let server = site:: server:: start ( data, port) . fuse ( ) ;
43
+ futures:: pin_mut!( server) ;
44
+ futures:: pin_mut!( fut) ;
45
+ loop {
46
+ futures:: select! {
47
+ s = server => {
48
+ eprintln!( "Server completed unexpectedly." ) ;
49
+ return ;
50
+ }
51
+ l = fut => {
52
+ if let Err ( e) = l {
53
+ eprintln!( "Loading failed, exiting." ) ;
54
+ if let Ok ( panic) = e. try_into_panic( ) {
55
+ std:: panic:: resume_unwind( panic) ;
56
+ }
57
+ } else {
58
+ eprintln!( "Loading complete." ) ;
59
+ }
60
+ }
61
+ }
62
+ }
38
63
}
You can’t perform that action at this time.
0 commit comments