diff --git a/src/main.rs b/src/main.rs index fd2317c..47271bb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,7 +13,7 @@ fn main() -> std::io::Result<()> { let client = mongodb::sync::Client::with_uri_str("mongodb://admin:admin@localhost/").unwrap(); let database = Arc::new(database::Database::new(&client)); - let listener = TcpListener::bind("127.0.0.1:8080").unwrap(); + let listener = TcpListener::bind("0.0.0.0:8080").unwrap(); for stream in listener.incoming() { println!("New connection"); diff --git a/src/methods/player.rs b/src/methods/player.rs index 359f707..223c49b 100644 --- a/src/methods/player.rs +++ b/src/methods/player.rs @@ -8,22 +8,46 @@ use crate::{ use super::Session; pub fn player(session: &Session, uuid: String) -> Result { - let player = session + // First, try to find the existing player + match session .database .players - .find(doc! { - "uuid": uuid.clone(), - }) + .find(doc! { "uuid": uuid.clone() }) .run()? - .deserialize_current()?; + .deserialize_current() + { + // Player exists, return their data + Ok(player) => Ok(Response::Player { + cloak: player.cloak, + uuid, + cloaks: player.cloaks, + hats: player.hats, + hat: player.hat, + }), - Ok(Response::Player { - cloak: player.cloak, - uuid, - cloaks: player.cloaks, - hats: player.hats, - hat: player.hat, - }) + // Player doesn't exist, create a new player + Err(_) => { + let player = Player { + uuid: uuid.clone(), + cloaks: Vec::new(), + cloak: "".to_string(), + hats: Vec::new(), + hat: String::new(), + }; + + // Insert the new player + session.database.players.insert_one(player.clone()).run()?; + + // Return the newly created player's data + Ok(Response::Player { + cloak: player.cloak, + uuid, + cloaks: player.cloaks, + hats: player.hats, + hat: player.hat, + }) + } + } } pub fn create(session: &Session) -> Result {