Set up a tabletop view for both the GM and the player #260

Merged
savanni merged 15 commits from visions-playfield into main 2024-11-20 04:06:13 +00:00
3 changed files with 35 additions and 34 deletions
Showing only changes of commit 962ea66506 - Show all commits

View File

@ -1,11 +1,13 @@
use std::{io::Read, path::PathBuf}; use std::{io::Read, path::PathBuf};
use authdb::{AuthDB, AuthToken}; use authdb::{AuthDB, AuthToken};
use http::{response::Response, status::StatusCode, Error}; use http::{Error, StatusCode};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use warp::{http::Response, reply::Reply};
use crate::core::Core; use crate::core::Core;
/*
pub async fn handle_auth( pub async fn handle_auth(
auth_ctx: &AuthDB, auth_ctx: &AuthDB,
auth_token: AuthToken, auth_token: AuthToken,
@ -27,18 +29,38 @@ pub async fn handle_auth(
.body("".to_owned()), .body("".to_owned()),
} }
} }
*/
#[derive(Deserialize, Serialize)] #[derive(Deserialize, Serialize)]
pub struct PlayArea { pub struct PlayArea {
pub background_image: PathBuf, pub background_image: PathBuf,
} }
pub fn handle_playing_field() -> PlayArea { pub async fn handle_playing_field() -> impl Reply {
PlayArea { Response::builder()
background_image: PathBuf::from("tower-in-mist.jpg"), .header("application-type", "application/json")
} .body(
serde_json::to_string(&PlayArea {
background_image: PathBuf::from("tower-in-mist.jpg"),
})
.unwrap(),
)
.unwrap()
} }
pub fn handle_file(core: Core, file_name: String) -> Vec<u8> { pub async fn handle_file(core: Core, file_name: String) -> impl Reply {
core.get_file(file_name) let mimetype = mime_guess::from_path(&file_name).first().unwrap();
let bytes = core.get_file(file_name);
Response::builder()
.header("application-type", mimetype.to_string())
.body(bytes)
.unwrap()
}
pub async fn handle_available_images(core: Core) -> impl Reply {
Response::builder()
.header("Access-Control-Allow-Origin", "*")
.header("Content-Type", "application/json")
.body(serde_json::to_string(&core.available_images()).unwrap())
.unwrap()
} }

View File

@ -1,5 +1,5 @@
use authdb::AuthError; use authdb::AuthError;
use handlers::{handle_file, handle_playing_field}; use handlers::{handle_available_images, handle_file, handle_playing_field};
use std::{ use std::{
convert::Infallible, convert::Infallible,
net::{IpAddr, Ipv4Addr, SocketAddr}, net::{IpAddr, Ipv4Addr, SocketAddr},
@ -16,8 +16,6 @@ mod core;
mod handlers; mod handlers;
// use handlers::handle_auth; // use handlers::handle_auth;
mod routes;
#[derive(Debug)] #[derive(Debug)]
struct Unauthorized; struct Unauthorized;
impl warp::reject::Reject for Unauthorized {} impl warp::reject::Reject for Unauthorized {}
@ -95,31 +93,21 @@ async fn handle_rejection(err: warp::Rejection) -> Result<impl Reply, Infallible
pub async fn main() { pub async fn main() {
let core = core::Core::new(); let core = core::Core::new();
let route_playing_field = let route_playing_field = warp::path!("api" / "v1" / "field").then(|| handle_playing_field());
warp::path!("api" / "v1" / "field").map(move || warp::reply::json(&handle_playing_field()));
let route_image = warp::path!("api" / "v1" / "image" / String) let route_image = warp::path!("api" / "v1" / "image" / String)
.and(warp::get()) .and(warp::get())
.map({ .then({
let core = core.clone(); let core = core.clone();
move |file_name| { move |file_name| {
let core = core.clone(); handle_file(core.clone(), file_name)
let mimetype = mime_guess::from_path(&file_name).first().unwrap();
let bytes = handle_file(core, file_name);
Response::builder()
.header("application-type", mimetype.to_string())
.body(bytes)
.unwrap()
} }
}); });
let route_available_images = warp::path!("api" / "v1" / "image").and(warp::get()).map({ let route_available_images = warp::path!("api" / "v1" / "image").and(warp::get()).then({
let core = core.clone(); let core = core.clone();
move || { move || {
let core = core.clone(); handle_available_images(core.clone())
Response::builder()
.header("Access-Control-Allow-Origin", "*")
.body(serde_json::to_string(&core.available_images()).unwrap())
} }
}); });

View File

@ -1,9 +0,0 @@
use crate::{core::Core, handlers::handle_playing_field};
use warp::{reply::Json, Filter};
pub fn route_playing_field(
_app: Core,
) -> impl Filter<Extract = (Json,), Error = warp::Rejection> + Clone {
warp::path!("api" / "v1" / "field").map(move || warp::reply::json(&handle_playing_field()))
}