From 3b35da7cb263bf11bdb8077a6a233c121d5d6a59 Mon Sep 17 00:00:00 2001 From: mux Date: Sun, 11 Aug 2024 13:09:21 +0200 Subject: [PATCH] compiled (no) nd --- .gitignore | 2 ++ Cargo.toml | 6 ++++++ src/lib.rs | 0 src/main.rs | 5 +++++ src/tcp_server.rs | 51 +++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 64 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.toml create mode 100644 src/lib.rs create mode 100644 src/main.rs create mode 100644 src/tcp_server.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..96ef6c0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/target +Cargo.lock diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..61224fb --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "Uno" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..ca375f0 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,5 @@ +pub mod tcp_server; + +fn main() { + println!("Hello, world!"); +} diff --git a/src/tcp_server.rs b/src/tcp_server.rs new file mode 100644 index 0000000..9820be4 --- /dev/null +++ b/src/tcp_server.rs @@ -0,0 +1,51 @@ +use std::{ + net::{TcpListener, TcpStream}, + io::{prelude::*, BufReader, BufWriter}, +}; + +fn main(){ + let listener = TcpListener::bind("0.0.0.0:8000").unwrap(); + + for stream in listener{ + let (reader, writer) = create_buffers(stream.unwrap()); + let result = check_protocol(reader, writer).unwrap(); + if result.equals("Uno-Enthusiast99") { + println!("It works!"); + } + + } + +} + +fn create_buffers(&mut stream : TcpStream) -> (BufReader, BufWriter) { + (BufReader::new(stream), BufWriter::new(stream)) + +} + fn check_protocol(&reader : BufReader, &writer : BufWriter) -> Result { + let init_message : Vec<_> = reader + .lines() + .map(|result| result.unwrap()) + .take_while(|line| !line.is_empty()) + .collect() + .iter(); + let mut is_valid = true; + is_valid = init_message.next().unwrap_or_else(|| "invalid") == "app:uno"; + is_valid = init_message.next().unwrap(|| "invalid") == "version:0.1"; + is_valid = init_message.next().unwrap(|| "invalid").contains("player_name:"); + if init_message.next() != None { + is_valid = false; + } + + if !is_valid { + writer.write("Error").unwrap(); + writer.flush().unwrap(); + return Err; + } + writer.write("Ok").unwrap(); + writer.flush().unwrap(); + Ok( item.split(':').unwrap() ) + } + +// fn register_player(player_name : &str, reader : BufReader, writer : BufWriter){ +// +// }