battleship game in rust

Add networking

authored by pebloop.dev and committed by knot.nasso.dev 868af628 eaf345d2

Changed files
+40 -1
src
+1
src/main.rs
··· 2 2 3 3 mod cli; 4 4 mod game; 5 + mod network; 5 6 mod parser; 6 7 7 8 fn main() -> ExitCode {
+38
src/network.rs
··· 1 + use std::net::{SocketAddr, TcpListener, TcpStream}; 2 + 3 + pub enum NetworkError { 4 + IO(std::io::Error), 5 + NoIncomingConnexionError, 6 + } 7 + 8 + impl From<std::io::Error> for NetworkError { 9 + fn from(value: std::io::Error) -> Self { 10 + NetworkError::IO(value) 11 + } 12 + } 13 + 14 + struct TcpPlayer { 15 + connexion_stream: TcpStream, 16 + } 17 + 18 + impl TcpPlayer { 19 + pub fn host(addr: SocketAddr) -> Result<TcpPlayer, NetworkError> { 20 + let listener = TcpListener::bind(addr)?; 21 + let mut streams = listener.incoming(); 22 + let stream = streams 23 + .next() 24 + .ok_or(NetworkError::NoIncomingConnexionError)??; 25 + 26 + Ok(TcpPlayer { 27 + connexion_stream: stream, 28 + }) 29 + } 30 + 31 + pub fn join(addr: SocketAddr) -> Result<TcpPlayer, NetworkError> { 32 + let stream = TcpStream::connect(addr)?; 33 + 34 + Ok(TcpPlayer { 35 + connexion_stream: stream, 36 + }) 37 + } 38 + }
+1 -1
src/parser.rs
··· 17 17 18 18 pub fn parse_file(file_path: &Path) -> Result<[Boat; 4], ParserError> { 19 19 let mut file = File::open(file_path)?; 20 - Ok(parse_ships(&mut file)?) 20 + parse_ships(&mut file) 21 21 } 22 22 23 23 pub fn parse_ships<T: Read>(file: &mut T) -> Result<[Boat; 4], ParserError> {