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