Added caching motds
This commit is contained in:
parent
927e29bb43
commit
8413e4d864
|
@ -14,3 +14,4 @@ serde = { version = "1", features = ["derive"] }
|
|||
serde_json = "1"
|
||||
base64 = "0.21.5"
|
||||
rand = "0.8.5"
|
||||
lazy_static = "1.4"
|
||||
|
|
|
@ -2,12 +2,14 @@
|
|||
|
||||
use std::fs::{self, File};
|
||||
use std::io::Read;
|
||||
use std::sync::{Arc, Mutex};
|
||||
|
||||
use tokio::net::tcp::{OwnedReadHalf, OwnedWriteHalf};
|
||||
use tokio::io::AsyncWriteExt;
|
||||
use serde_json::Value;
|
||||
use base64::{Engine as _, engine::general_purpose};
|
||||
use rand::Rng;
|
||||
use lazy_static::lazy_static;
|
||||
|
||||
use purple_cello_mc_protocol::{
|
||||
mc_types::{self, Result, Packet},
|
||||
|
@ -22,20 +24,49 @@ async fn online_players(
|
|||
Ok(get_upstream_status(server_reader, server_writer).await?.players)
|
||||
}
|
||||
|
||||
fn motd() -> String {
|
||||
let default = "A Minecraft Server Proxy".to_string();
|
||||
fn load_motds() -> Value {
|
||||
let file_path = "./motd.json";
|
||||
|
||||
let data = match fs::read_to_string(file_path) {
|
||||
Ok(data) => data,
|
||||
Err(_) => return default,
|
||||
Err(_) => return Value::Null,
|
||||
};
|
||||
|
||||
let motd_data: Value = match serde_json::from_str(&data) {
|
||||
Ok(value) => value,
|
||||
Err(_) => return default,
|
||||
Err(_) => return Value::Null,
|
||||
};
|
||||
|
||||
motd_data
|
||||
}
|
||||
|
||||
fn get_motds() -> Value {
|
||||
lazy_static! {
|
||||
static ref MOTDS_CACHE: Arc<Mutex<Value>> =
|
||||
Arc::new(Mutex::new(load_motds()));
|
||||
}
|
||||
|
||||
let motds_guard = match MOTDS_CACHE.lock() {
|
||||
Ok(guard) => guard,
|
||||
Err(_) => { return Value::Null; }
|
||||
};
|
||||
|
||||
let motds = (*motds_guard).clone();
|
||||
|
||||
std::mem::drop(motds_guard);
|
||||
|
||||
motds
|
||||
}
|
||||
|
||||
fn motd() -> String {
|
||||
let default = "A Minecraft Server Proxy".to_string();
|
||||
|
||||
let motd_data = get_motds();
|
||||
|
||||
if motd_data == Value::Null {
|
||||
return default;
|
||||
}
|
||||
|
||||
let length1 = motd_data["line1"].as_array().map_or(0, |v| v.len());
|
||||
let length2 = motd_data["line2"].as_array().map_or(0, |v| v.len());
|
||||
|
||||
|
|
Loading…
Reference in New Issue