battleship game in rust

Add networking

Changed files
+40 -1
src
+1
src/main.rs
···
mod cli;
mod game;
+
mod network;
mod parser;
fn main() -> ExitCode {
+38
src/network.rs
···
+
use std::net::{SocketAddr, TcpListener, TcpStream};
+
+
pub enum NetworkError {
+
IO(std::io::Error),
+
NoIncomingConnexionError,
+
}
+
+
impl From<std::io::Error> 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<TcpPlayer, NetworkError> {
+
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<TcpPlayer, NetworkError> {
+
let stream = TcpStream::connect(addr)?;
+
+
Ok(TcpPlayer {
+
connexion_stream: stream,
+
})
+
}
+
}
+1 -1
src/parser.rs
···
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<T: Read>(file: &mut T) -> Result<[Boat; 4], ParserError> {