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, _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 = 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(()) } }