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