fix: if server couldn't be found and the next packets are bad, only emit one line

This commit is contained in:
Tamipes 2025-12-11 23:41:25 +01:00
parent 1454945f32
commit 7f6bd226a7

View file

@ -3,6 +3,7 @@ use std::net::SocketAddr;
use std::time::Duration;
use tokio::net::{TcpListener, TcpStream};
use tracing::Instrument;
use tracing_subscriber::{prelude::*, EnvFilter};
use crate::mc_server::{MinecraftAPI, MinecraftServerHandle, ServerDeploymentStatus};
@ -138,24 +139,33 @@ async fn handle_status<T: MinecraftServerHandle>(
{
Ok(x) => x,
Err(e) => {
tracing::warn!(err = e.context);
let span = tracing::span!(tracing::Level::WARN, "not_found", err = e.context);
status_struct.players.max = 0;
status_struct.players.online = 0;
status_struct.description.text = format!(
"Could not find §kserver§r: §f§o{server_addr}§r\nMinecraft Ingress {bye_message}"
);
mc_server::complete_status_request(client_stream, status_struct).await?;
mc_server::complete_status_request(client_stream, status_struct)
.instrument(span.clone())
.await?;
// Recieve the ping packet, so the client does not send it again
let _ping = Packet::parse(client_stream).await?;
let _ping = Packet::parse(client_stream).instrument(span.clone()).await;
// Send a bad ping packet back, so the client shows *searching* icon
let _pong = Packet::new(9, vec![0; 8])
.ok_or("failed to create empty pong packet?")?
.send_packet(client_stream)
.await
.map_err(|_| "failed to send pong packet")?;
let _guard = span.enter();
match _ping {
Ok(_) => tracing::info!("sent status with error"),
Err(err) => {
tracing::warn!(err = OpaqueError::from(err).context)
}
};
return Ok(());
}
};
@ -181,7 +191,7 @@ async fn handle_status<T: MinecraftServerHandle>(
ServerDeploymentStatus::Offline => {
status_struct.players.max = 1;
status_struct.description.text =
format!("{motd}\n§4Offline§r §oJoin to start!§r{bye_message}");
format!("{motd}\n§4Offline§r §oJoin to start!§r{bye_message}");
}
};