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 (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]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue