exit axum server when game server quits and vice versa

This commit is contained in:
Rusty Striker 2025-07-14 22:00:32 +03:00
parent 98ee910ce1
commit f5a7f9ba9a
Signed by: RustyStriker
GPG key ID: 87E4D691632DFF15

View file

@ -18,6 +18,8 @@ async fn main() {
let (bsend, _) = broadcast::channel(10);
let (msend, mrecv) = mpsc::channel(50);
let bsend2 = bsend.clone();
let listener = tokio::net::TcpListener::bind("0.0.0.0:3001").await.unwrap();
let app = Router::new()
.route("/", routing::get(root))
.route("/tavern.js", routing::get(socket))
@ -28,20 +30,25 @@ async fn main() {
"/ws",
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)
.await
.map(|s| serde_json::from_str(&s).ok())
.ok()
.flatten()
.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");
axum::serve(listener, app)
.await
.expect("axum server crashed, yaaaaay (unless i crashed him that yay)");
let axum_server = tokio::spawn(run_web_server(listener, app));
// 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]