use std::{ fs::read, io::Write, net::{SocketAddr, TcpListener, TcpStream}, result, str::FromStr, }; use crate::buffer::ByteBuffer; mod buffer; const IP: &str = "0.0.0.0"; const PORT: &str = "9696"; type Result = result::Result; fn main() -> Result<()> { let socket = SocketAddr::from_str(&format!("{}:{}", IP, PORT)).unwrap(); let listener = TcpListener::bind(socket).unwrap(); for stream in listener.incoming() { match stream { Ok(conn) => handle_connection(conn)?, Err(e) => eprintln!("Something went wrong while listening {e}"), } } Ok(()) } fn handle_connection(mut conn: TcpStream) -> Result<()> { let files = ["examples/test.md", "examples/test2.md"]; for file in files { let mut buffer = ByteBuffer::default(); match read(format!("./{file}")) { Ok(data) => { buffer.write_string(file); buffer.write_bytes(&data); let _ = conn.write_all(&buffer); let _ = conn.flush(); } Err(_) => eprintln!("No file found"), }; } Ok(()) } #[cfg(test)] mod tests { use std::io::Read; use super::*; #[test] fn test_connection() { let conn = TcpStream::connect(format!("{}:{}", IP, PORT)); assert!(conn.is_ok()); let mut conn = conn.unwrap(); let mut buffer = ByteBuffer::default(); let bytes_read = conn.read_to_end(&mut buffer); assert!(bytes_read.is_ok()); let file_name = buffer.read_string(); assert_eq!(file_name, "examples/test.md"); // let content = buffer.read_bytes(buffer.unread_len()); // println!("{}", String::from_utf8(content).unwrap()); } }