Compare commits

..

2 commits

Author SHA1 Message Date
e403d93dc2 fix: login_username_extract span added for extended logging information 2026-01-29 10:24:51 +01:00
bebca902df feat: call start_watcher when connecting to an already running instance
(used to be only when starting the server)
2026-01-29 10:24:51 +01:00
2 changed files with 18 additions and 1 deletions

View file

@ -115,8 +115,18 @@ async fn process_connection<T: MinecraftServerHandle>(
packets::ProtocolState::Login => { packets::ProtocolState::Login => {
// This block of packet parsing is needed here, so the span with the // This block of packet parsing is needed here, so the span with the
// username is correctly propagated due to the async nature of things // username is correctly propagated due to the async nature of things
let packet = Packet::parse(&mut client_stream).await?; let span = tracing::span!(
tracing::Level::INFO,
"login_username_extract",
server_addr = handshake.get_server_address(),
server_port = handshake.server_port.get_value()
);
let packet = Packet::parse(&mut client_stream)
.instrument(span.clone())
.await?;
let login_packet = packets::serverbound::login::LoginStart::parse(packet) let login_packet = packets::serverbound::login::LoginStart::parse(packet)
.instrument(span.clone())
.await .await
.ok_or("Failed to parse login start packet".to_string())?; .ok_or("Failed to parse login start packet".to_string())?;
handle_login(&mut client_stream, &handshake, login_packet, api).await? handle_login(&mut client_stream, &handshake, login_packet, api).await?
@ -240,6 +250,9 @@ async fn handle_login<T: MinecraftServerHandle>(
tracing::debug!(msg = "server status", status = ?status); tracing::debug!(msg = "server status", status = ?status);
match status { match status {
ServerDeploymentStatus::Connectable(mut server_stream) => { ServerDeploymentStatus::Connectable(mut server_stream) => {
api.start_watch(server.clone(), Duration::from_secs(600))
.await?;
// referenced from: // referenced from:
// https://github.com/hanyu-dev/tokio-splice2/blob/fc47199fffde8946b0acf867d1fa0b2222267a34/examples/proxy.rs // https://github.com/hanyu-dev/tokio-splice2/blob/fc47199fffde8946b0acf867d1fa0b2222267a34/examples/proxy.rs
let io_sl2sr = tokio_splice2::context::SpliceIoCtx::prepare() let io_sl2sr = tokio_splice2::context::SpliceIoCtx::prepare()

View file

@ -123,6 +123,10 @@ pub trait MinecraftServerHandle: Clone {
pub trait MinecraftAPI<T> { pub trait MinecraftAPI<T> {
async fn query_server(&self, addr: &str, port: &str) -> Result<T, OpaqueError>; async fn query_server(&self, addr: &str, port: &str) -> Result<T, OpaqueError>;
// TODO: move the implementation to here, but
/// This should be callable even if there is already a watcher,
/// and it should handle the collision itself while returning OK().
async fn start_watch( async fn start_watch(
self, self,
server: impl MinecraftServerHandle, server: impl MinecraftServerHandle,