52 lines
1.8 KiB
Rust
52 lines
1.8 KiB
Rust
use crate::{srvmgr::start_server, minecraft::client::client::Client};
|
|
|
|
use diesel::result::Error::NotFound;
|
|
use json::object;
|
|
use crate::minecraft::varint::varint_write;
|
|
use std::collections::VecDeque;
|
|
|
|
|
|
impl Client {
|
|
pub async fn login_intent_handle(&mut self, mut _packet: &mut VecDeque<u8>, _packet_id: i32) -> Result<(),String> {
|
|
match self.login_start_server().await {
|
|
Ok(_) => {
|
|
self.login_send_disconnect(&"Start request successful, the server will start soon".to_string(), &"green".to_string()).await?;
|
|
return Ok(());
|
|
}
|
|
Err(e) => {
|
|
self.login_send_disconnect(&e, &"red".to_string()).await?;
|
|
return Err(e);
|
|
},
|
|
}
|
|
}
|
|
|
|
async fn login_start_server(&mut self) -> Result<(), String> {
|
|
let server = match self.server.as_ref().unwrap().as_ref() {
|
|
Ok(server) => { server },
|
|
Err(NotFound) => { return Err("This server was not found".to_string()); },
|
|
Err(e) => { return Err(format!("db fetch error : {}", e)); }
|
|
};
|
|
|
|
start_server(&self.docker, &self.db_pool, &server.name).await?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
async fn login_send_disconnect(&mut self, message: &String, color: &String) -> Result<(), String> {
|
|
let reason_json = object! {
|
|
"type": "text",
|
|
"text": *message.clone(),
|
|
"color": *color.clone()
|
|
};
|
|
|
|
let mut response: Vec<u8> = vec![];
|
|
let response_json = json::stringify(reason_json);
|
|
let mut response_json_len = varint_write(response_json.len() as i32);
|
|
|
|
response.append(&mut response_json_len);
|
|
response.append(&mut response_json.as_bytes().into());
|
|
self.send_packet(0x0, response).await;
|
|
Ok(())
|
|
}
|
|
}
|