diff --git a/src/card.rs b/src/card.rs index c809c34..e16e85c 100644 --- a/src/card.rs +++ b/src/card.rs @@ -2,13 +2,13 @@ use std::fmt::Display; use serde::{Serialize, Deserialize}; -#[derive(Serialize, Deserialize)] +#[derive(Serialize, Deserialize, PartialEq, Eq, Hash, Clone)] pub struct Card { pub suit: Suit, pub value: u8, } -#[derive(Clone, Copy, Serialize, Deserialize)] +#[derive(Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)] pub enum Suit { Hearts, Diamonds, diff --git a/src/deck.rs b/src/deck.rs index 4d71bff..0376461 100644 --- a/src/deck.rs +++ b/src/deck.rs @@ -4,6 +4,7 @@ use rand::rng; use crate::card::Card; use crate::card::Suit; +#[derive(PartialEq, Eq, Hash, Clone)] pub struct Deck { pub deck: Vec, } diff --git a/src/lobby.rs b/src/lobby.rs index 8af57e4..87e3659 100644 --- a/src/lobby.rs +++ b/src/lobby.rs @@ -1,6 +1,7 @@ use crate::{deck::Deck, player::Player}; use petname::Generator; +#[derive(Eq, PartialEq, Hash, Clone)] pub struct Lobby { pub id: String, pub players: Vec, @@ -32,4 +33,8 @@ impl Lobby { pub fn get_deck(self) -> Deck { self.deck } + + pub fn get_id(&self) -> String { + self.id.clone() + } } diff --git a/src/main.rs b/src/main.rs index e92d200..4b07559 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,4 @@ +use std::collections::HashMap; use std::io::{self, Error}; use std::net::SocketAddr; @@ -50,15 +51,22 @@ async fn main() -> io::Result<()> { let address = "127.0.0.1:8080".to_string(); let listener = TcpListener::bind(&address).await?; - let mut lobbies: Vec = Vec::new(); + let mut lobbies: HashMap = HashMap::new(); loop { let (mut stream, addr) = listener.accept().await?; - tokio::spawn(async move { - println!("new connection from: {}", addr); - let (player, lobby) = handle_connection(stream, addr).await; - }); + println!("new connection from: {}", addr); + + let lobby_player_handle = tokio::spawn(handle_connection(stream, addr)); + + let (player, lobby) = lobby_player_handle.await?; + + match lobby { + Some(lobby) => lobbies.insert(lobby.get_id(), lobby), + None => continue, + }; + } Ok(()) diff --git a/src/player.rs b/src/player.rs index 11d7177..69752b5 100644 --- a/src/player.rs +++ b/src/player.rs @@ -4,7 +4,7 @@ use sha256::digest; use crate::card::Card; -#[derive(Serialize, Deserialize)] +#[derive(Serialize, Deserialize, Eq, PartialEq, Hash, Clone)] pub struct Player { // addr will change because at this stage i really // don't know what i am doing