mirror of
https://github.com/Astatin3/syscall-stream-rs.git
synced 2026-06-09 00:18:01 -06:00
Kinda get network working
This commit is contained in:
+52
@@ -0,0 +1,52 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user