From 44334fc3852eb832280a335f72e6416c93a9f19f Mon Sep 17 00:00:00 2001 From: Tyler Murphy Date: Fri, 16 Jun 2023 20:38:55 -0400 Subject: ts --- server/src/routes.rs | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 server/src/routes.rs (limited to 'server/src/routes.rs') diff --git a/server/src/routes.rs b/server/src/routes.rs new file mode 100644 index 0000000..a8c96a3 --- /dev/null +++ b/server/src/routes.rs @@ -0,0 +1,51 @@ +use axum::{ + extract::{ws::WebSocketUpgrade, Path}, + routing::get, + response::Response, + Router, Extension, +}; +use tokio::sync::oneshot; +use tower_http::services::ServeDir; + +use super::rooms; + +pub fn routes() -> Router { + let room_server: rooms::RoomService = rooms::start_room_server(); + + Router::new() + .route("/api/check", get(|| async {"ok"})) + .route("/api/exists/:code", get(game_exists)) + .route("/api/join/:code", get(game_join)) + .nest_service("/", ServeDir::new("../client")) + .layer(Extension(room_server)) +} + +// check if a given room code exists already +async fn game_exists( + Path(code): Path, + Extension(room_server): Extension +) -> &'static str { + let (tx, rx) = oneshot::channel(); + room_server.send(rooms::RoomServiceRequest::Exists(code, tx)).await.ok(); + + if let Ok(res) = rx.await { + if res { + "true" + } else { + "false" + } + } else { + return "error"; + } +} + +// start a websocket connection and join it to the room +async fn game_join( + Path(code): Path, + ws: WebSocketUpgrade, + Extension(room_server): Extension +) -> Response { + ws.on_upgrade(|s| async move { + room_server.send(rooms::RoomServiceRequest::Join(code, s)).await.ok(); + }) +} -- cgit v1.2.3-freya