Add config option to enable server probing on start
This commit is contained in:
parent
9b1f2a7011
commit
f513957bff
@ -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
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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());
|
||||
|
Loading…
x
Reference in New Issue
Block a user