From e9c4ae16f243cb000e2796837b0088a5de505dd7 Mon Sep 17 00:00:00 2001 From: pebloop Date: Sat, 5 Jul 2025 19:16:39 +0200 Subject: [PATCH] Add networking --- src/main.rs | 1 + src/network.rs | 38 ++++++++++++++++++++++++++++++++++++++ src/parser.rs | 2 +- 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 src/network.rs diff --git a/src/main.rs b/src/main.rs index 6550562..d6f0844 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,7 @@ use std::process::ExitCode; mod cli; mod game; +mod network; mod parser; fn main() -> ExitCode { diff --git a/src/network.rs b/src/network.rs new file mode 100644 index 0000000..45e0450 --- /dev/null +++ b/src/network.rs @@ -0,0 +1,38 @@ +use std::net::{SocketAddr, TcpListener, TcpStream}; + +pub enum NetworkError { + IO(std::io::Error), + NoIncomingConnexionError, +} + +impl From for NetworkError { + fn from(value: std::io::Error) -> Self { + NetworkError::IO(value) + } +} + +struct TcpPlayer { + connexion_stream: TcpStream, +} + +impl TcpPlayer { + pub fn host(addr: SocketAddr) -> Result { + let listener = TcpListener::bind(addr)?; + let mut streams = listener.incoming(); + let stream = streams + .next() + .ok_or(NetworkError::NoIncomingConnexionError)??; + + Ok(TcpPlayer { + connexion_stream: stream, + }) + } + + pub fn join(addr: SocketAddr) -> Result { + let stream = TcpStream::connect(addr)?; + + Ok(TcpPlayer { + connexion_stream: stream, + }) + } +} diff --git a/src/parser.rs b/src/parser.rs index 6f0728e..6a58412 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -17,7 +17,7 @@ impl From for ParserError { pub fn parse_file(file_path: &Path) -> Result<[Boat; 4], ParserError> { let mut file = File::open(file_path)?; - Ok(parse_ships(&mut file)?) + parse_ships(&mut file) } pub fn parse_ships(file: &mut T) -> Result<[Boat; 4], ParserError> { -- 2.49.0