html terminal
Diffstat (limited to 'src/server.rs')
-rw-r--r--src/server.rs47
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));
- })
-}