few bug fixes

This commit is contained in:
2025-03-14 03:33:48 +01:00
parent 663f395c6e
commit 2eaa843016
5 changed files with 46 additions and 30 deletions
+18 -13
View File
@@ -25,25 +25,30 @@ fn main() -> std::io::Result<()> {
let mut reader = BufReader::new(stream.try_clone().unwrap()); let mut reader = BufReader::new(stream.try_clone().unwrap());
match methods::Session::new(&mut reader, database) { match methods::Session::new(&mut reader, database) {
Ok(session) => loop { Ok((session, res)) => {
let mut request_string = String::new(); writeln!(stream, "{res}").unwrap();
match reader.read_line(&mut request_string).unwrap() { stream.flush().unwrap();
0 => break,
_ => { loop {
let (method, params) = parser::parse(&request_string).unwrap(); let mut request_string = String::new();
let response = session.handle_request(&method, &params); match reader.read_line(&mut request_string).unwrap() {
stream 0 => break,
.write_all( _ => {
let (method, params) = parser::parse(&request_string).unwrap();
let response = session.handle_request(&method, &params);
writeln!(
stream,
"{}",
match response { match response {
Ok(response) => response.to_string(), Ok(response) => response.to_string(),
Err(e) => format!("!{e}"), Err(e) => format!("!{e}"),
} }
.as_bytes(),
) )
.unwrap(); .unwrap();
} }
}; };
}, }
}
Err(e) => { Err(e) => {
stream.write_all(format!("!{e}").as_bytes()).unwrap(); stream.write_all(format!("!{e}").as_bytes()).unwrap();
stream stream
+12 -6
View File
@@ -24,14 +24,14 @@ pub struct LocalPlayer {
pub struct Session { pub struct Session {
pub session_token: String, pub session_token: String,
pub database: Arc<crate::database::Database>, pub database: Arc<crate::database::Database>,
pub player: LocalPlayer, pub local_player: LocalPlayer,
} }
impl Session { impl Session {
pub fn new( pub fn new(
reader: &mut BufReader<TcpStream>, reader: &mut BufReader<TcpStream>,
database: Arc<crate::database::Database>, database: Arc<crate::database::Database>,
) -> Result<Self> { ) -> Result<(Self, Response)> {
// Read the session token // Read the session token
let mut session_token = String::new(); let mut session_token = String::new();
reader reader
@@ -50,15 +50,21 @@ impl Session {
} }
// Parse the player data // Parse the player data
let player: LocalPlayer = response let local_player: LocalPlayer = response
.json() .json()
.map_err(|_| crate::response::Error::InvalidSession)?; .map_err(|_| crate::response::Error::InvalidSession)?;
Ok(Self { let uuid = local_player.id.clone();
let session = Self {
session_token, session_token,
database, database,
player, local_player,
}) };
let player = player::player(&session, uuid)?;
Ok((session, player))
} }
pub fn handle_request(&self, method: &str, params: &HashMap<String, String>) -> Result { pub fn handle_request(&self, method: &str, params: &HashMap<String, String>) -> Result {
+1
View File
@@ -17,5 +17,6 @@ pub fn player(session: &Session, uuid: String) -> Result {
Ok(Response::Player { Ok(Response::Player {
cloak: player.cloak, cloak: player.cloak,
uuid,
}) })
} }
+13 -9
View File
@@ -5,16 +5,20 @@ use crate::response::{Response, Result};
use super::Session; use super::Session;
pub fn set_cloak(session: &Session, cloak: String) -> Result { pub fn set_cloak(session: &Session, cloak: String) -> Result {
session.database.players.update_one( session
doc! { .database
"uuid": session.player.id.clone(), .players
}, .update_one(
doc! { doc! {
"$set": { "uuid": session.local_player.id.clone(),
"cloak": cloak,
}, },
}, doc! {
).run()?; "$set": {
"cloak": cloak,
},
},
)
.run()?;
Ok(Response::Success) Ok(Response::Success)
} }
+2 -2
View File
@@ -4,7 +4,7 @@ pub type Result<T = Response> = std::result::Result<T, Error>;
pub enum Response { pub enum Response {
Pong, Pong,
Success, Success,
Player { cloak: String }, Player { cloak: String, uuid: String },
} }
impl std::fmt::Display for Response { impl std::fmt::Display for Response {
@@ -12,7 +12,7 @@ impl std::fmt::Display for Response {
match self { match self {
Response::Pong => write!(f, "Pong"), Response::Pong => write!(f, "Pong"),
Response::Success => write!(f, "Success"), Response::Success => write!(f, "Success"),
Response::Player { cloak } => write!(f, "@cloak={cloak}"), Response::Player { cloak, uuid } => write!(f, "@cloak={cloak}@uuid={uuid}"),
} }
} }
} }