Skip to content

Commit

Permalink
performance fix
Browse files Browse the repository at this point in the history
  • Loading branch information
shiroyashik committed Jun 16, 2024
1 parent 703a272 commit 3931275
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 19 deletions.
4 changes: 2 additions & 2 deletions Config.example.toml
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,9 @@ authSystem = "elyby"
special = [0,0,0,1,0,0] # 6
pride = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # 25

# Your nickname here
# With advancedUsers you can set additional parameters
# [advancedUsers.your uuid here]
# username = "Bot"
# username = "Your_username_here"
# authSystem = "mojang" # can be: mojang, elyby, internal (cant be authenticated)
# special = [0,1,0,0,0,0] # and set badges what you want! :D
# pride = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
Expand Down
21 changes: 8 additions & 13 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ use axum::{
extract::DefaultBodyLimit, middleware::from_extractor, routing::{delete, get, post, put}, Router
};
use dashmap::DashMap;
use utils::collect_advanced_users;
use std::sync::Arc;
use tokio::sync::{broadcast, Mutex};
use tower_http::trace::TraceLayer;
Expand All @@ -28,9 +27,11 @@ use profile as api_profile;

// Utils
mod utils;
use utils::update_advanced_users;

// Config
mod config;
use config::Config;

#[derive(Debug, Clone)]
pub struct AppState {
Expand Down Expand Up @@ -66,7 +67,7 @@ async fn main() -> Result<()> {

info!("The Sculptor v{}", SCULPTOR_VERSION);
// Config
let config = Arc::new(Mutex::new(config::Config::parse(config_file.clone().into())));
let config = Arc::new(Mutex::new(Config::parse(config_file.clone().into())));
let listen = config.lock().await.listen.clone();

// State
Expand All @@ -77,26 +78,20 @@ async fn main() -> Result<()> {
};

// Automatic update of configuration while the server is running
let config_update = state.config.clone();
let config_update = Arc::clone(&state.config);
let user_manager = Arc::clone(&state.user_manager);
update_advanced_users(&config_update.lock().await.advanced_users, &user_manager);
tokio::spawn(async move {
loop {
let new_config = config::Config::parse(config_file.clone().into());
tokio::time::sleep(std::time::Duration::from_secs(10)).await;
let new_config = Config::parse(config_file.clone().into());
let mut config = config_update.lock().await;

if new_config != *config {
info!("Server configuration modification detected!");
*config = new_config;
// let collected = collect_advanced_users(&config.advanced_users);
// for (uuid, userinfo) in collected {
// user_manager.insert_user(uuid, userinfo);
// }
}
let collected = collect_advanced_users(&config.advanced_users);
for (uuid, userinfo) in collected {
user_manager.insert_user(uuid, userinfo);
update_advanced_users(&config.advanced_users, &user_manager);
}
tokio::time::sleep(std::time::Duration::from_secs(10)).await;
}
});

Expand Down
30 changes: 26 additions & 4 deletions src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use rand::{distributions::Alphanumeric, thread_rng, Rng};
use ring::digest::{self, digest};
use uuid::Uuid;

use crate::auth::{AuthSystem, Userinfo};
use crate::auth::{AuthSystem, UManager, Userinfo};

// Core functions
pub fn rand() -> [u8; 50] {
Expand Down Expand Up @@ -36,8 +36,25 @@ pub fn get_correct_array(value: &toml::Value) -> Vec<u8> {
.map(move |x| x.as_integer().unwrap() as u8)
.collect()
}
pub fn collect_advanced_users(value: &toml::Table) -> Vec<(Uuid, Userinfo)> {
value
// pub fn collect_advanced_users(value: &toml::Table) -> Vec<(Uuid, Userinfo)> {
// value
// .iter()
// .map( |(uuid, userdata)| {
// let auth_system = AuthSystem::from_str(userdata.as_table().unwrap().get("authSystem").expect("Can't find authSystem in advancedUser!").as_str().unwrap()).unwrap();
// let username = userdata.as_table().unwrap().get("username").expect("Can't find username in advancedUser!").as_str().unwrap().to_string();
// (
// Uuid::parse_str(uuid).unwrap(),
// Userinfo { username,
// uuid: Uuid::parse_str(uuid).unwrap(),
// auth_system,
// token: None
// }
// )})
// .collect()
// }

pub fn update_advanced_users(value: &toml::Table, umanager: &UManager) {
let users: Vec<(Uuid, Userinfo)> = value
.iter()
.map( |(uuid, userdata)| {
let auth_system = AuthSystem::from_str(userdata.as_table().unwrap().get("authSystem").expect("Can't find authSystem in advancedUser!").as_str().unwrap()).unwrap();
Expand All @@ -50,9 +67,14 @@ pub fn collect_advanced_users(value: &toml::Table) -> Vec<(Uuid, Userinfo)> {
token: None
}
)})
.collect()
.collect();

for (uuid, userinfo) in users {
umanager.insert_user(uuid, userinfo);
}
}


pub fn format_uuid(uuid: &Uuid) -> String {
// let uuid = Uuid::parse_str(&uuid)?; TODO: Вероятно format_uuid стоит убрать
// .map_err(|_| tide::Error::from_str(StatusCode::InternalServerError, "Failed to parse UUID"))?;
Expand Down

0 comments on commit 3931275

Please sign in to comment.