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.
|
# Immediately wake server after crash.
|
||||||
#wake_on_crash = false
|
#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.
|
# Set to true if this server runs Forge.
|
||||||
#forge = false
|
#forge = false
|
||||||
|
|
||||||
|
@ -182,6 +182,10 @@ pub struct Server {
|
|||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub wake_on_crash: bool,
|
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.
|
/// Whether this server runs forge.
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub forge: bool,
|
pub forge: bool,
|
||||||
|
@ -40,7 +40,7 @@ pub async fn probe(config: Arc<Config>, server: Arc<Server>) -> Result<(), ()> {
|
|||||||
|
|
||||||
// Start server if not starting already
|
// Start server if not starting already
|
||||||
if Server::start(config.clone(), server.clone(), None).await {
|
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
|
// Wait for server to come online
|
||||||
|
@ -1,15 +1,13 @@
|
|||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use crate::config::Config;
|
use crate::config::{Config, Method};
|
||||||
use crate::probe;
|
use crate::probe;
|
||||||
use crate::server::Server;
|
use crate::server::Server;
|
||||||
|
|
||||||
/// Probe server.
|
/// Probe server.
|
||||||
pub async fn service(config: Arc<Config>, state: Arc<Server>) {
|
pub async fn service(config: Arc<Config>, state: Arc<Server>) {
|
||||||
// Only probe if Forge is enabled
|
// Only probe if enabled or if we must
|
||||||
// TODO: do more comprehensive check for probe, only with forge and lobby?
|
if !config.server.probe_on_start && !must_probe(&config) {
|
||||||
// TODO: add config option to probe on start
|
|
||||||
if !config.server.forge {
|
|
||||||
return;
|
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::monitor::service(config.clone(), server.clone()));
|
||||||
tokio::spawn(service::signal::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
|
// Initiate server start
|
||||||
if config.server.wake_on_start {
|
if config.server.wake_on_start {
|
||||||
Server::start(config.clone(), server.clone(), None).await;
|
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
|
// Route all incomming connections
|
||||||
while let Ok((inbound, _)) = listener.accept().await {
|
while let Ok((inbound, _)) = listener.accept().await {
|
||||||
route(inbound, config.clone(), server.clone());
|
route(inbound, config.clone(), server.clone());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user