Add option for protocol version hints, clean up configuration
This commit is contained in:
parent
86c88d85f2
commit
bbecb43639
@ -1,21 +1,37 @@
|
|||||||
# lazymc configuration
|
# lazymc configuration
|
||||||
|
#
|
||||||
|
# You must configure your server directory and start command, see:
|
||||||
|
# - server.directory
|
||||||
|
# - server.command
|
||||||
|
#
|
||||||
|
# You can probably leave the rest as-is.
|
||||||
|
#
|
||||||
|
# You may generate a new configuration with: lazymc config generate
|
||||||
|
# Or find the latest at: https://is.gd/WWBIQu
|
||||||
|
|
||||||
[public]
|
[public]
|
||||||
# Public address. IP and port users connect to.
|
# Public address. IP and port users connect to.
|
||||||
# Shows sleeping status, starts server on connect, and proxies to server.
|
# Shows sleeping status, starts server on connect, and proxies to server.
|
||||||
address = "0.0.0.0:25565"
|
address = "0.0.0.0:25565"
|
||||||
|
|
||||||
|
# Server version & protocol hint.
|
||||||
|
# Sent to clients until actual server version is known.
|
||||||
|
# See: https://is.gd/FTQKTP
|
||||||
|
version = "1.17.1"
|
||||||
|
protocol = 756
|
||||||
|
|
||||||
[server]
|
[server]
|
||||||
# Server directory.
|
# Server address. Internal IP and port of server started by lazymc to proxy to.
|
||||||
|
# Port must be different from public port.
|
||||||
|
address = "127.0.0.1:25566"
|
||||||
|
|
||||||
|
# Server directory, defaults to current directory.
|
||||||
directory = "."
|
directory = "."
|
||||||
|
|
||||||
# Command to start the server.
|
# Command to start the server.
|
||||||
# Warning: if using a bash script read: https://github.com/timvisee/lazymc/blob/master/docs/command_bash.md
|
# Warning: if using a bash script read: https://is.gd/k8SQYv
|
||||||
command = "java -Xmx1G -Xms1G -jar server.jar --nogui"
|
command = "java -Xmx1G -Xms1G -jar server.jar --nogui"
|
||||||
|
|
||||||
# Server address. Internal IP and port of server started by lazymc to proxy to.
|
|
||||||
address = "127.0.0.1:25566"
|
|
||||||
|
|
||||||
# Immediately wake server when starting lazymc.
|
# Immediately wake server when starting lazymc.
|
||||||
wake_on_start = false
|
wake_on_start = false
|
||||||
|
|
||||||
@ -27,19 +43,13 @@ sleep_after = 60
|
|||||||
minimum_online_time = 60
|
minimum_online_time = 60
|
||||||
|
|
||||||
[messages]
|
[messages]
|
||||||
# MOTD when server is sleeping.
|
# MOTDs, shown in server browser.
|
||||||
motd_sleeping = "☠ Server is sleeping\n§2☻ Join to start it up"
|
motd_sleeping = "☠ Server is sleeping\n§2☻ Join to start it up"
|
||||||
|
|
||||||
# MOTD when server is starting.
|
|
||||||
motd_starting = "§2☻ Server is starting...\n§7⌛ Please wait..."
|
motd_starting = "§2☻ Server is starting...\n§7⌛ Please wait..."
|
||||||
|
|
||||||
# MOTD when server is stopping.
|
|
||||||
motd_stopping = "☠ Server going to sleep...\n⌛ Please wait..."
|
motd_stopping = "☠ Server going to sleep...\n⌛ Please wait..."
|
||||||
|
|
||||||
# Login (kick) message when server is starting.
|
# Login messages, when user tries to connect.
|
||||||
login_starting = "Server is starting... §c♥§r\n\nThis may take some time.\n\nPlease try to reconnect in a minute."
|
login_starting = "Server is starting... §c♥§r\n\nThis may take some time.\n\nPlease try to reconnect in a minute."
|
||||||
|
|
||||||
# Login (kick) message when server is stopping.
|
|
||||||
login_stopping = "Server is going to sleep... §7☠§r\n\nPlease try to reconnect in a minute to wake it again."
|
login_stopping = "Server is going to sleep... §7☠§r\n\nPlease try to reconnect in a minute to wake it again."
|
||||||
|
|
||||||
[rcon]
|
[rcon]
|
||||||
@ -47,13 +57,12 @@ login_stopping = "Server is going to sleep... §7☠§r\n\nPlease try to reconne
|
|||||||
# Must be enabled on Windows.
|
# Must be enabled on Windows.
|
||||||
enabled = true
|
enabled = true
|
||||||
|
|
||||||
# Server RCON port. Must differ from Minecraft server port.
|
# Server RCON port. Must differ from public and server port.
|
||||||
port = 25575
|
port = 25575
|
||||||
|
|
||||||
# Server RCON password.
|
# Server RCON password.
|
||||||
|
# Or whether to randomize password each start (recommended).
|
||||||
password = ""
|
password = ""
|
||||||
|
|
||||||
# Randomize ingress server RCON password on each start.
|
|
||||||
randomize_password = true
|
randomize_password = true
|
||||||
|
|
||||||
[advanced]
|
[advanced]
|
||||||
|
@ -91,6 +91,12 @@ pub struct Public {
|
|||||||
/// Egress address.
|
/// Egress address.
|
||||||
#[serde(alias = "address_egress")]
|
#[serde(alias = "address_egress")]
|
||||||
pub address: SocketAddr,
|
pub address: SocketAddr,
|
||||||
|
|
||||||
|
/// Minecraft protocol version name hint.
|
||||||
|
pub version: String,
|
||||||
|
|
||||||
|
/// Minecraft protocol version hint.
|
||||||
|
pub protocol: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Server configuration.
|
/// Server configuration.
|
||||||
|
@ -14,7 +14,7 @@ use tokio::io::AsyncWriteExt;
|
|||||||
use tokio::net::TcpStream;
|
use tokio::net::TcpStream;
|
||||||
|
|
||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
use crate::proto::{self, ClientState, RawPacket, PROTO_DEFAULT_PROTOCOL};
|
use crate::proto::{self, ClientState, RawPacket};
|
||||||
use crate::server::Server;
|
use crate::server::Server;
|
||||||
|
|
||||||
/// Monitor ping inverval in seconds.
|
/// Monitor ping inverval in seconds.
|
||||||
@ -31,7 +31,7 @@ pub async fn monitor_server(config: Arc<Config>, state: Arc<Server>) {
|
|||||||
loop {
|
loop {
|
||||||
// Poll server state and update internal status
|
// Poll server state and update internal status
|
||||||
trace!(target: "lazymc::monitor", "Fetching status for {} ... ", addr);
|
trace!(target: "lazymc::monitor", "Fetching status for {} ... ", addr);
|
||||||
let status = poll_server(addr).await;
|
let status = poll_server(&config, addr).await;
|
||||||
state.update_status(&config, status);
|
state.update_status(&config, status);
|
||||||
|
|
||||||
// Sleep server when it's bedtime
|
// Sleep server when it's bedtime
|
||||||
@ -50,23 +50,27 @@ pub async fn monitor_server(config: Arc<Config>, state: Arc<Server>) {
|
|||||||
/// Poll server state.
|
/// Poll server state.
|
||||||
///
|
///
|
||||||
/// Returns server status if connection succeeded.
|
/// Returns server status if connection succeeded.
|
||||||
pub async fn poll_server(addr: SocketAddr) -> Option<ServerStatus> {
|
pub async fn poll_server(config: &Config, addr: SocketAddr) -> Option<ServerStatus> {
|
||||||
fetch_status(addr).await.ok()
|
fetch_status(config, addr).await.ok()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Attemp to fetch status from server.
|
/// Attemp to fetch status from server.
|
||||||
async fn fetch_status(addr: SocketAddr) -> Result<ServerStatus, ()> {
|
async fn fetch_status(config: &Config, addr: SocketAddr) -> Result<ServerStatus, ()> {
|
||||||
let mut stream = TcpStream::connect(addr).await.map_err(|_| ())?;
|
let mut stream = TcpStream::connect(addr).await.map_err(|_| ())?;
|
||||||
|
|
||||||
send_handshake(&mut stream, addr).await?;
|
send_handshake(&mut stream, &config, addr).await?;
|
||||||
request_status(&mut stream).await?;
|
request_status(&mut stream).await?;
|
||||||
wait_for_status_timeout(&mut stream).await
|
wait_for_status_timeout(&mut stream).await
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Send handshake.
|
/// Send handshake.
|
||||||
async fn send_handshake(stream: &mut TcpStream, addr: SocketAddr) -> Result<(), ()> {
|
async fn send_handshake(
|
||||||
|
stream: &mut TcpStream,
|
||||||
|
config: &Config,
|
||||||
|
addr: SocketAddr,
|
||||||
|
) -> Result<(), ()> {
|
||||||
let handshake = Handshake {
|
let handshake = Handshake {
|
||||||
protocol_version: PROTO_DEFAULT_PROTOCOL as i32,
|
protocol_version: config.public.protocol as i32,
|
||||||
server_addr: addr.ip().to_string(),
|
server_addr: addr.ip().to_string(),
|
||||||
server_port: addr.port(),
|
server_port: addr.port(),
|
||||||
next_state: ClientState::Status.to_id(),
|
next_state: ClientState::Status.to_id(),
|
||||||
|
@ -10,13 +10,13 @@ use crate::types;
|
|||||||
/// Default minecraft protocol version name.
|
/// Default minecraft protocol version name.
|
||||||
///
|
///
|
||||||
/// Send to clients when the server is sleeping when the real server version is not known yet.
|
/// Send to clients when the server is sleeping when the real server version is not known yet.
|
||||||
pub const PROTO_DEFAULT_VERSION: &str = "1.16.5";
|
pub const PROTO_DEFAULT_VERSION: &str = "1.17.1";
|
||||||
|
|
||||||
/// Default minecraft protocol version.
|
/// Default minecraft protocol version.
|
||||||
///
|
///
|
||||||
/// Send to clients when the server is sleeping when the real server version is not known yet, and
|
/// Send to clients when the server is sleeping when the real server version is not known yet, and
|
||||||
/// with server status polling requests.
|
/// with server status polling requests.
|
||||||
pub const PROTO_DEFAULT_PROTOCOL: u32 = 754;
|
pub const PROTO_DEFAULT_PROTOCOL: u32 = 756;
|
||||||
|
|
||||||
/// Handshake state, handshake packet ID.
|
/// Handshake state, handshake packet ID.
|
||||||
pub const HANDSHAKE_PACKET_ID_HANDSHAKE: i32 = 0;
|
pub const HANDSHAKE_PACKET_ID_HANDSHAKE: i32 = 0;
|
||||||
|
@ -13,9 +13,7 @@ use tokio::io::AsyncWriteExt;
|
|||||||
use tokio::net::TcpStream;
|
use tokio::net::TcpStream;
|
||||||
|
|
||||||
use crate::config::*;
|
use crate::config::*;
|
||||||
use crate::proto::{
|
use crate::proto::{self, Client, ClientState, RawPacket};
|
||||||
self, Client, ClientState, RawPacket, PROTO_DEFAULT_PROTOCOL, PROTO_DEFAULT_VERSION,
|
|
||||||
};
|
|
||||||
use crate::server::{self, Server};
|
use crate::server::{self, Server};
|
||||||
|
|
||||||
/// Proxy the given inbound stream to a target address.
|
/// Proxy the given inbound stream to a target address.
|
||||||
@ -88,8 +86,8 @@ pub async fn serve(
|
|||||||
Some(status) => (status.version, status.players.max),
|
Some(status) => (status.version, status.players.max),
|
||||||
None => (
|
None => (
|
||||||
ServerVersion {
|
ServerVersion {
|
||||||
name: String::from(PROTO_DEFAULT_VERSION),
|
name: config.public.version.clone(),
|
||||||
protocol: PROTO_DEFAULT_PROTOCOL,
|
protocol: config.public.protocol,
|
||||||
},
|
},
|
||||||
0,
|
0,
|
||||||
),
|
),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user