Add config option to enable server probing on start

This commit is contained in:
timvisee 2021-11-22 22:57:34 +01:00
parent 9b1f2a7011
commit f513957bff
No known key found for this signature in database
GPG Key ID: B8DB720BC383E172
5 changed files with 32 additions and 12 deletions

View File

@ -39,6 +39,10 @@ command = "java -Xmx1G -Xms1G -jar server.jar --nogui"
# Immediately wake server after crash.
#wake_on_crash = false
# Probe required server details when starting lazymc, wakes server on start.
# Improves client compatibility. Automatically enabled if required by other config properties.
#probe_on_start = false
# Set to true if this server runs Forge.
#forge = false

View File

@ -182,6 +182,10 @@ pub struct Server {
#[serde(default)]
pub wake_on_crash: bool,
/// Probe required server details when starting lazymc, wakes server on start.
#[serde(default)]
pub probe_on_start: bool,
/// Whether this server runs forge.
#[serde(default)]
pub forge: bool,

View File

@ -40,7 +40,7 @@ pub async fn probe(config: Arc<Config>, server: Arc<Server>) -> Result<(), ()> {
// Start server if not starting already
if Server::start(config.clone(), server.clone(), None).await {
warn!(target: "lazymc::probe", "Starting server to probe required details...");
info!(target: "lazymc::probe", "Starting server to probe...");
}
// Wait for server to come online

View File

@ -1,15 +1,13 @@
use std::sync::Arc;
use crate::config::Config;
use crate::config::{Config, Method};
use crate::probe;
use crate::server::Server;
/// Probe server.
pub async fn service(config: Arc<Config>, state: Arc<Server>) {
// Only probe if Forge is enabled
// TODO: do more comprehensive check for probe, only with forge and lobby?
// TODO: add config option to probe on start
if !config.server.forge {
// Only probe if enabled or if we must
if !config.server.probe_on_start && !must_probe(&config) {
return;
}
@ -21,3 +19,15 @@ pub async fn service(config: Arc<Config>, state: Arc<Server>) {
}
}
}
/// Check whether we must probe.
fn must_probe(config: &Config) -> bool {
// Must probe with lobby and Forge
if config.server.forge && config.join.methods.contains(&Method::Lobby) {
warn!(target: "lazymc::probe", "Starting server to probe for Forge lobby...");
warn!(target: "lazymc::probe", "Set 'server.probe_on_start = true' to remove this warning");
return true;
}
false
}

View File

@ -46,20 +46,22 @@ pub async fn service(config: Arc<Config>) -> Result<(), ()> {
);
}
// Spawn server monitor, signal handler, probe and ban services
// Spawn services: monitor, signal handler
tokio::spawn(service::monitor::service(config.clone(), server.clone()));
tokio::spawn(service::signal::service(config.clone(), server.clone()));
tokio::spawn(service::probe::service(config.clone(), server.clone()));
tokio::task::spawn_blocking({
let (config, server) = (config.clone(), server.clone());
|| service::ban_reload::service(config, server)
});
// Initiate server start
if config.server.wake_on_start {
Server::start(config.clone(), server.clone(), None).await;
}
// Spawn additional services: probe and ban manager
tokio::spawn(service::probe::service(config.clone(), server.clone()));
tokio::task::spawn_blocking({
let (config, server) = (config.clone(), server.clone());
|| service::ban_reload::service(config, server)
});
// Route all incomming connections
while let Ok((inbound, _)) = listener.accept().await {
route(inbound, config.clone(), server.clone());