Add networking #4

merged
opened by pebloop.dev targeting main from feat-network

Add networking as player constructor

Changed files
+44 -4
src
+2
src/main.rs
···
use std::process::ExitCode;
mod cli;
+
mod network;
+
mod parser;
fn main() -> ExitCode {
let mut args = std::env::args();
+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,
+
})
+
}
+
}
+4 -4
src/parser.rs
···
impl Vector2u16 {
pub fn new(x: u16, y: u16) -> Self {
-
Vector2u16 { x: x, y: y }
+
Vector2u16 { x, y }
}
}
···
impl Boat {
pub fn new(first_pos: Vector2u16, last_pos: Vector2u16) -> Self {
Boat {
-
first_pos: first_pos,
-
last_pos: last_pos,
+
first_pos,
+
last_pos,
}
}
}
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> {