#[path = "../../src/leaf/remote_shell/mod.rs"] mod remote_shell; use std::error::Error; use std::net::TcpStream; use std::sync::mpsc::RecvTimeoutError; use std::time::Duration; use unshell::protocol::tree::Ingress; fn main() -> Result<(), Box> { let mut stream = TcpStream::connect(remote_shell::LISTEN_ADDR)?; let frame_rx = remote_shell::spawn_frame_reader(stream.try_clone()?); let mut runtime = remote_shell::build_agent_runtime(); println!("connected to controller at {}", remote_shell::LISTEN_ADDR); loop { match frame_rx.recv_timeout(Duration::from_millis(25)) { Ok(result) => { let frame = result?; let outcome = runtime.receive(&Ingress::Parent, frame)?; remote_shell::write_frames(&mut stream, &outcome.frames)?; } Err(RecvTimeoutError::Timeout) => {} Err(RecvTimeoutError::Disconnected) => break, } let outcome = runtime.poll()?; remote_shell::write_frames(&mut stream, &outcome.frames)?; } Ok(()) }