encryption example
This commit is contained in:
+47
-62
@@ -29,72 +29,57 @@ fn main() -> std::io::Result<()> {
|
|||||||
std::thread::spawn({
|
std::thread::spawn({
|
||||||
move || {
|
move || {
|
||||||
let mut stream = encryption::handshake(stream.unwrap(), rsa);
|
let mut stream = encryption::handshake(stream.unwrap(), rsa);
|
||||||
|
let mut last_activity = Instant::now();
|
||||||
|
|
||||||
println!("{:?}", stream.read());
|
match methods::Session::new(stream.clone(), database) {
|
||||||
|
Ok((session, res)) => {
|
||||||
|
stream.send(res);
|
||||||
|
|
||||||
stream.send("Daddy OMG!!!");
|
loop {
|
||||||
|
match stream.read() {
|
||||||
|
None => {
|
||||||
|
// Client disconnected
|
||||||
|
println!("[MOJANG] {} disconnected", session.local_player.name);
|
||||||
|
methods::player::logout(&session).unwrap();
|
||||||
|
println!("[MOJANG] {} went offline", session.local_player.name);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Some(request_string) => {
|
||||||
|
last_activity = Instant::now();
|
||||||
|
let (method, params) = parser::parse(&request_string).unwrap();
|
||||||
|
let response = session.handle_request(&method, ¶ms);
|
||||||
|
|
||||||
println!("OMG sent")
|
stream.send(match response {
|
||||||
// let mut reader = BufReader::new(stream.try_clone().unwrap());
|
Ok(response) => response.to_string(),
|
||||||
// let mut last_activity = Instant::now();
|
Err(e) => format!("!{e}"),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// Err(e) => {
|
||||||
|
// println!(
|
||||||
|
// "[ERROR] Read error for {}: {}",
|
||||||
|
// session.local_player.name, e
|
||||||
|
// );
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
};
|
||||||
|
|
||||||
// match methods::Session::new(&mut reader, database) {
|
// Check for inactivity
|
||||||
// Ok((session, res)) => {
|
if last_activity.elapsed() > Duration::from_secs(60) {
|
||||||
// writeln!(stream, "{res}").unwrap();
|
println!(
|
||||||
// stream.flush().unwrap();
|
"[MOJANG] {} inactive for too long",
|
||||||
|
session.local_player.name
|
||||||
// loop {
|
);
|
||||||
// let mut request_string = String::new();
|
methods::player::logout(&session).unwrap();
|
||||||
// match reader.read_line(&mut request_string) {
|
println!("[MOJANG] {} went offline", session.local_player.name);
|
||||||
// Ok(0) => {
|
break;
|
||||||
// // Client disconnected
|
}
|
||||||
// println!("[MOJANG] {} disconnected", session.local_player.name);
|
}
|
||||||
// methods::player::logout(&session).unwrap();
|
}
|
||||||
// println!("[MOJANG] {} went offline", session.local_player.name);
|
Err(e) => {
|
||||||
// break;
|
// stream.write_all(format!("!{e}").as_bytes()).unwrap();
|
||||||
// }
|
stream.close();
|
||||||
// Ok(_) => {
|
}
|
||||||
// last_activity = Instant::now();
|
}
|
||||||
// let (method, params) = parser::parse(&request_string).unwrap();
|
|
||||||
// let response = session.handle_request(&method, ¶ms);
|
|
||||||
// writeln!(
|
|
||||||
// stream,
|
|
||||||
// "{}",
|
|
||||||
// match response {
|
|
||||||
// Ok(response) => response.to_string(),
|
|
||||||
// Err(e) => format!("!{e}"),
|
|
||||||
// }
|
|
||||||
// )
|
|
||||||
// .unwrap();
|
|
||||||
// }
|
|
||||||
// Err(e) => {
|
|
||||||
// println!(
|
|
||||||
// "[ERROR] Read error for {}: {}",
|
|
||||||
// session.local_player.name, e
|
|
||||||
// );
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// };
|
|
||||||
|
|
||||||
// // Check for inactivity
|
|
||||||
// if last_activity.elapsed() > Duration::from_secs(60) {
|
|
||||||
// println!(
|
|
||||||
// "[MOJANG] {} inactive for too long",
|
|
||||||
// session.local_player.name
|
|
||||||
// );
|
|
||||||
// methods::player::logout(&session).unwrap();
|
|
||||||
// println!("[MOJANG] {} went offline", session.local_player.name);
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// Err(e) => {
|
|
||||||
// stream.write_all(format!("!{e}").as_bytes()).unwrap();
|
|
||||||
// stream
|
|
||||||
// .shutdown(std::net::Shutdown::Both)
|
|
||||||
// .expect("shutdown call failed");
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-13
@@ -12,6 +12,7 @@ use std::{
|
|||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
encryption::ETcp,
|
||||||
parser::ParamMap,
|
parser::ParamMap,
|
||||||
response::{PlayerResponse, Response, Result},
|
response::{PlayerResponse, Response, Result},
|
||||||
};
|
};
|
||||||
@@ -30,24 +31,15 @@ pub struct Session {
|
|||||||
|
|
||||||
impl Session {
|
impl Session {
|
||||||
pub fn new(
|
pub fn new(
|
||||||
reader: &mut BufReader<TcpStream>,
|
mut stream: ETcp,
|
||||||
database: Arc<crate::database::Database>,
|
database: Arc<crate::database::Database>,
|
||||||
) -> Result<(Self, Response)> {
|
) -> Result<(Self, Response)> {
|
||||||
let (token_send, token_recv) =
|
let (token_send, token_recv) =
|
||||||
mpsc::channel::<std::result::Result<String, crate::response::Error>>();
|
mpsc::channel::<std::result::Result<String, crate::response::Error>>();
|
||||||
|
|
||||||
let reader_clone = reader
|
std::thread::spawn(move || match stream.read() {
|
||||||
.get_ref()
|
Some(session_token) => token_send.send(Ok(session_token)),
|
||||||
.try_clone()
|
_ => token_send.send(Err(crate::response::Error::InvalidHandshake)),
|
||||||
.map_err(|_| crate::response::Error::InvalidHandshake)?;
|
|
||||||
std::thread::spawn(move || {
|
|
||||||
let mut reader = BufReader::new(reader_clone);
|
|
||||||
let mut session_token = String::new();
|
|
||||||
if reader.read_line(&mut session_token).is_ok() {
|
|
||||||
token_send.send(Ok(session_token))
|
|
||||||
} else {
|
|
||||||
token_send.send(Err(crate::response::Error::InvalidHandshake))
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
match token_recv.recv_timeout(std::time::Duration::from_secs(20)) {
|
match token_recv.recv_timeout(std::time::Duration::from_secs(20)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user