html terminal
Diffstat (limited to 'src/server.rs')
| -rw-r--r-- | src/server.rs | 47 |
1 files changed, 8 insertions, 39 deletions
diff --git a/src/server.rs b/src/server.rs index 3426530..50b5cbd 100644 --- a/src/server.rs +++ b/src/server.rs @@ -1,37 +1,27 @@ use crate::bot::Bot; use crate::process::Process; -use crate::websocket::WebSocket; use axum::{ - extract::{ - ws::{Message, WebSocketUpgrade}, - Path, State as StateW, - }, http::header::CONTENT_TYPE, - response::{AppendHeaders, Html, IntoResponse}, + response::{AppendHeaders, Html}, routing::get, Router, Server as AxumServer, }; -use futures::sink::SinkExt; + use std::{net::SocketAddr, sync::Arc}; use tokio::sync::broadcast; +// its a arced arcs pub struct State { // sent from the process to the websockets - pub stdout_html: broadcast::Sender<String>, - pub stdout_plain: broadcast::Sender<String>, + pub stdout: broadcast::Sender<String>, // sent to the process pub stdin: broadcast::Sender<String>, } impl State { fn new(stdin: broadcast::Sender<String>) -> Self { - let (stdout_html, _) = broadcast::channel(16); - let (stdout_plain, _) = broadcast::channel(2); - Self { - stdin, - stdout_html, - stdout_plain, - } + let (stdout, _) = broadcast::channel(2); + Self { stdin, stdout } } } @@ -68,10 +58,8 @@ impl Server { let state = Arc::new(State::new(stdin_tx)); let router = Router::new() .route("/", html!(index)) - .route("/panel", html!(panel)) .route("/plaguess.png", png!(plaguess)) .route("/favicon.ico", png!(logo32)) - .route("/connect/:id", get(connect_ws)) .with_state(state.clone()); let mut server_handle = tokio::spawn(async move { AxumServer::bind(&addr) @@ -79,8 +67,8 @@ impl Server { .await .unwrap() }); - let mut process_handle = proc.input(stdin).with_state(&state).link(); - Bot::spawn(state.stdout_plain.subscribe(), state.stdin.clone()).await; + let mut process_handle = proc.input(stdin).output(state.stdout.clone()).link(); + Bot::spawn(state.stdout.subscribe(), state.stdin.clone()).await; tokio::select! { _ = (&mut server_handle) => process_handle.abort(), _ = (&mut process_handle) => server_handle.abort(), @@ -88,22 +76,3 @@ impl Server { panic!("oh no"); } } - -fn matches(id: &str) -> bool { - std::env::var("ID").as_deref().unwrap_or("4") == id -} - -async fn connect_ws( - ws: WebSocketUpgrade, - StateW(state): StateW<Arc<State>>, - Path(id): Path<String>, -) -> impl IntoResponse { - ws.on_upgrade(|socket| async move { - if !matches(&id) { - let mut s = futures::stream::StreamExt::split(socket).0; - let _ = s.send(Message::Text("correct id".to_string())).await; - return; - } - tokio::spawn(WebSocket::spawn(socket, state)); - }) -} |