added admin panel
This commit is contained in:
parent
20fdd480dd
commit
e2a28d43f0
1 changed files with 73 additions and 5 deletions
|
@ -10,6 +10,7 @@ use tracing::{error, info, trace, Level};
|
|||
use tracing_subscriber::{filter, layer::{Filter, SubscriberExt}, util::SubscriberInitExt, Layer};
|
||||
|
||||
const FISH: &'static str = "169.254.2.1:1234";
|
||||
const DOOR: &'static str = "169.254.1.1:1234";
|
||||
|
||||
#[derive(Clone)]
|
||||
struct AppState {
|
||||
|
@ -51,10 +52,13 @@ async fn main() -> Result<()>{
|
|||
|
||||
|
||||
let app: Router = Router::new()
|
||||
.route("/", get(root))
|
||||
.route("/names", get(root))
|
||||
.route("/admin", get(control))
|
||||
.route("/phil", get(phil))
|
||||
.route("/recent", get(recent_badge))
|
||||
.route("/setLast", post(set_last))
|
||||
.route("/openDoor", post(open_door))
|
||||
.route("/setVolume", post(set_volume))
|
||||
//.route("/map", post(set_badge))
|
||||
.with_state(AppState {
|
||||
fish: fish.clone(),
|
||||
|
@ -82,7 +86,7 @@ async fn main() -> Result<()>{
|
|||
}
|
||||
});
|
||||
|
||||
{
|
||||
/*{
|
||||
let _permit = fish.acquire().await?;
|
||||
let mut conn = TcpStream::connect(FISH).await?;
|
||||
|
||||
|
@ -101,7 +105,7 @@ async fn main() -> Result<()>{
|
|||
|
||||
let req = Request::SetVolume(30);
|
||||
conn.write_all(&to_allocvec(&req)?).await?;
|
||||
}
|
||||
}*/
|
||||
|
||||
loop {
|
||||
sleep(Duration::from_secs(2)).await;
|
||||
|
@ -149,14 +153,78 @@ async fn root(state: State<AppState>) -> Html<String> {
|
|||
"Zoey",
|
||||
] {
|
||||
page.push_str(&format!(r#"
|
||||
<form action="setLast" method="post" id="myForm">
|
||||
<button style="font-size:40px;" type="submit" name="name", value="{name}">{name}</button>
|
||||
<form target="output" style="display:inline; margin-right:10px; " action="setLast" method="post" id="myForm">
|
||||
<button style="font-size:40px;" type="submit" name="name" value="{name}" target="output">{name}</button>
|
||||
</form>
|
||||
"#));
|
||||
}
|
||||
|
||||
page.push_str(&format!(r#"
|
||||
<form target="output" style="margin-top:10px;" action="setLast" method="post" id="myForm">
|
||||
<input style="font-size:40px;" name="name" placeholder="other" "type="text"></input>
|
||||
<button style="font-size:40px;" type="submit" target="output">other</button>
|
||||
</form>
|
||||
<iframe name="output"></iframe>
|
||||
"#));
|
||||
Html::from(page)
|
||||
}
|
||||
|
||||
async fn control(state: State<AppState>) -> Html<String> {
|
||||
let (last_badge, time) = *state.last_badge.read().await;
|
||||
let time = time.elapsed();
|
||||
|
||||
let page = format!(r#"
|
||||
<head><title>JOHNADMIN</title></head>
|
||||
<h1>JOHN ADMIN PANEL</h1>
|
||||
<form target="output" action="openDoor" method="post" id="myForm">
|
||||
<button style="font-size:40px;" type="submit" name="name" value="open" target="output">Open noor</button>
|
||||
</form>
|
||||
<form target="output" action="setVolume" method="post" id="myForm">
|
||||
<input type="range" min="0" max="30" value="0" name="volume" class="slider" id="volume">
|
||||
<button style="font-size:30px;" type="submit" target="output">set volume</button>
|
||||
</form>
|
||||
<p>
|
||||
most recent badge {last_badge:#0x}<br>
|
||||
{time:?} ago
|
||||
</p>
|
||||
<iframe name="output"></iframe>
|
||||
"#);
|
||||
|
||||
Html::from(page)
|
||||
}
|
||||
|
||||
#[derive(serde::Deserialize)]
|
||||
struct Volume {
|
||||
volume: u8,
|
||||
}
|
||||
|
||||
async fn open_door(state: State<AppState>) -> Html<&'static str> {
|
||||
info!("opening door");
|
||||
let mut conn = TcpStream::connect(DOOR).await.unwrap();
|
||||
|
||||
|
||||
conn.write_all(b"B f7c31d1603000000 \r\n").await.unwrap();
|
||||
conn.flush().await.unwrap();
|
||||
|
||||
Html::from("<p>opening the noor</p>")
|
||||
}
|
||||
|
||||
async fn set_volume(
|
||||
state: State<AppState>,
|
||||
Form(input): Form<Volume>) -> Html<String> {
|
||||
|
||||
info!("setting volume to {}", input.volume);
|
||||
|
||||
let _fish = state.fish.acquire().await.unwrap();
|
||||
let mut conn = TcpStream::connect(FISH).await.unwrap();
|
||||
|
||||
let req = Request::SetVolume(input.volume);
|
||||
conn.write_all(&to_allocvec(&req).unwrap()).await.unwrap();
|
||||
conn.flush().await.unwrap();
|
||||
|
||||
Html::from(format!("<p>volume is now {}</p></br><a href=\"/\">back</a>", input.volume))
|
||||
}
|
||||
|
||||
#[derive(serde::Deserialize)]
|
||||
struct NameForm {
|
||||
name: String,
|
||||
|
|
Loading…
Reference in a new issue