Files
syscall-stream-rs/src/host.rs
T
2025-08-12 22:24:00 -06:00

53 lines
1.3 KiB
Rust

use std::{
io::{BufReader, BufWriter, Read, Write},
net::TcpStream,
};
use syscall_lib::{ProgramMemory, Syscall};
use crate::syscall_exec;
pub struct Host {
stream: TcpStream,
reader: BufReader<TcpStream>,
writer: BufWriter<TcpStream>,
// memory: ProgramMemory,
}
impl Host {
pub fn new() -> Result<Host, std::io::Error> {
let stream = TcpStream::connect("localhost:1234")?;
let reader = BufReader::new(stream.try_clone()?);
let writer = BufWriter::new(stream.try_clone()?);
Ok(Host {
stream,
reader,
writer,
// memory: ProgramMemory::new(),
})
}
pub fn execute(&mut self, syscall: &Syscall) -> isize {
let bytes = syscall.encode();
self.writer
.write_all(&u32::to_be_bytes(bytes.len() as u32))
.unwrap();
self.writer.write_all(&bytes).unwrap();
self.writer.flush().unwrap();
println!("{:?} -> ", syscall);
// let response = syscall_exec::execute_syscall(syscall);
let mut response = [0u8; 8];
self.reader.read_exact(&mut response).unwrap();
let response = isize::from_be_bytes(response);
println!("{:?}", response);
response
}
}