exit axum server when game server quits and vice versa
This commit is contained in:
parent
98ee910ce1
commit
f5a7f9ba9a
1 changed files with 14 additions and 7 deletions
21
src/main.rs
21
src/main.rs
|
@ -18,6 +18,8 @@ async fn main() {
|
||||||
let (bsend, _) = broadcast::channel(10);
|
let (bsend, _) = broadcast::channel(10);
|
||||||
let (msend, mrecv) = mpsc::channel(50);
|
let (msend, mrecv) = mpsc::channel(50);
|
||||||
let bsend2 = bsend.clone();
|
let bsend2 = bsend.clone();
|
||||||
|
|
||||||
|
let listener = tokio::net::TcpListener::bind("0.0.0.0:3001").await.unwrap();
|
||||||
let app = Router::new()
|
let app = Router::new()
|
||||||
.route("/", routing::get(root))
|
.route("/", routing::get(root))
|
||||||
.route("/tavern.js", routing::get(socket))
|
.route("/tavern.js", routing::get(socket))
|
||||||
|
@ -28,20 +30,25 @@ async fn main() {
|
||||||
"/ws",
|
"/ws",
|
||||||
routing::get(move |w| ws_handler(w, msend, bsend2.clone().subscribe())),
|
routing::get(move |w| ws_handler(w, msend, bsend2.clone().subscribe())),
|
||||||
);
|
);
|
||||||
|
|
||||||
let listener = tokio::net::TcpListener::bind("0.0.0.0:3001").await.unwrap();
|
|
||||||
let game = tokio::fs::read_to_string(open_tavern::GAME_SAVE_FILE)
|
let game = tokio::fs::read_to_string(open_tavern::GAME_SAVE_FILE)
|
||||||
.await
|
.await
|
||||||
.map(|s| serde_json::from_str(&s).ok())
|
.map(|s| serde_json::from_str(&s).ok())
|
||||||
.ok()
|
.ok()
|
||||||
.flatten()
|
.flatten()
|
||||||
.unwrap_or(open_tavern::GameServer::new());
|
.unwrap_or(open_tavern::GameServer::new());
|
||||||
tokio::spawn(game.server_loop(mrecv, bsend));
|
let game_server = tokio::spawn(game.server_loop(mrecv, bsend));
|
||||||
|
|
||||||
println!("Server is running at http://localhost:3001");
|
println!("Server is running at http://localhost:3001");
|
||||||
axum::serve(listener, app)
|
let axum_server = tokio::spawn(run_web_server(listener, app));
|
||||||
.await
|
|
||||||
.expect("axum server crashed, yaaaaay (unless i crashed him that yay)");
|
// wait for one of the bunch to finish, then quit
|
||||||
|
tokio::select! {
|
||||||
|
_ = game_server => {},
|
||||||
|
_ = axum_server => {},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
/// Runs the axum server so i would get a JoinHandle<()> instead of whatever axum::serve returns
|
||||||
|
async fn run_web_server(listener: tokio::net::TcpListener, app: Router) {
|
||||||
|
axum::serve(listener, app).await.expect("Axum server crashed???");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Executes on a new WebSocket request, set update to [handle_socket]
|
/// Executes on a new WebSocket request, set update to [handle_socket]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue