html terminal
use tcp stream instead of process
| -rw-r--r-- | src/main.rs | 6 | ||||
| -rw-r--r-- | src/process.rs | 33 |
2 files changed, 11 insertions, 28 deletions
diff --git a/src/main.rs b/src/main.rs index 2ab9345..c738a3e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -15,11 +15,7 @@ use std::net::SocketAddr; #[tokio::main] async fn main() { - let process = Process::spawn( - std::env::var("SERVER_DIR") - .unwrap_or("~/mserv".replace('~', &std::env::var("HOME").unwrap_or("/root".into()))) - .into(), - ); + let process = Process::spawn().await; Server::spawn( SocketAddr::from(( [0, 0, 0, 0], diff --git a/src/process.rs b/src/process.rs index 80113db..9a414ff 100644 --- a/src/process.rs +++ b/src/process.rs @@ -1,40 +1,27 @@ use ansi_to_html::convert_escaped; -use std::process::Stdio; use std::sync::Arc; -use std::{ffi::OsString, time::Duration}; -use tokio::io::{AsyncReadExt, AsyncWriteExt, BufReader}; -use tokio::process::{Child, ChildStdin, ChildStdout, Command}; +use std::time::Duration; +use tokio::io::{AsyncReadExt, AsyncWriteExt}; +use tokio::net::TcpStream; use tokio::sync::broadcast; use tokio::sync::broadcast::error::TryRecvError; use tokio::task::JoinHandle; use crate::server::State; pub struct Process { - _inner: Child, + inner: TcpStream, input: Option<broadcast::Receiver<String>>, html_output: Option<broadcast::Sender<String>>, plain_output: Option<broadcast::Sender<String>>, - stdout: BufReader<ChildStdout>, - stdin: ChildStdin, } impl Process { /// spawns the server #[must_use] - pub fn spawn(server_dir: OsString) -> Self { - let mut p = Command::new("bash") - .arg("run.sh") - .current_dir(server_dir) - .stdin(Stdio::piped()) - .stdout(Stdio::piped()) - .spawn() - .expect("failed to spawn"); - + pub async fn spawn() -> Self { + let stream = TcpStream::connect("localhost:6859").await.unwrap(); Self { - // mindus doesnt output stderr - stdout: BufReader::new(p.stdout.take().unwrap()), - stdin: p.stdin.take().unwrap(), - _inner: p, + inner: stream, input: None, html_output: None, plain_output: None, @@ -82,14 +69,14 @@ impl Process { Ok(mut s) => { input!("{s}"); s += "\n"; - self.stdin.write_all(s.as_bytes()).await.unwrap(); - self.stdin.flush().await.unwrap(); + self.inner.write_all(s.as_bytes()).await.unwrap(); + self.inner.flush().await.unwrap(); } } let string = { let n = tokio::select! { - n = {self.stdout.read(&mut stdout)} => n.unwrap(), + n = {self.inner.read(&mut stdout)} => n.unwrap(), _ = async_std::task::sleep(Duration::from_millis(500)) => continue, }; String::from_utf8_lossy(&stdout[..n]).into_owned() |