feat: gracefully handle status request, when server doesn't exist

This commit is contained in:
Tamipes 2025-12-11 01:43:51 +01:00
parent 0d5fec173d
commit 1d9d205d8c
2 changed files with 16 additions and 8 deletions

View file

@ -5,9 +5,7 @@ use std::time::Duration;
use tokio::net::{TcpListener, TcpStream}; use tokio::net::{TcpListener, TcpStream};
use tracing_subscriber::{prelude::*, EnvFilter}; use tracing_subscriber::{prelude::*, EnvFilter};
use crate::mc_server::{ use crate::mc_server::{MinecraftAPI, MinecraftServerHandle, ServerDeploymentStatus};
complete_status_request, MinecraftAPI, MinecraftServerHandle, ServerDeploymentStatus,
};
use crate::opaque_error::OpaqueError; use crate::opaque_error::OpaqueError;
use crate::packets::clientbound::status::StatusStructNew; use crate::packets::clientbound::status::StatusStructNew;
use crate::packets::serverbound::handshake::Handshake; use crate::packets::serverbound::handshake::Handshake;
@ -141,7 +139,18 @@ async fn handle_status<T: MinecraftServerHandle>(
"Could not find §kserver§r: §f§o{server_addr}§r\nMinecraft Ingress{bye_message}" "Could not find §kserver§r: §f§o{server_addr}§r\nMinecraft Ingress{bye_message}"
); );
return complete_status_request(client_stream, status_struct).await; mc_server::complete_status_request(client_stream, status_struct).await?;
// Recieve the ping packet, so the client does not send it again
let _ping = Packet::parse(client_stream).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")?;
return Ok(());
} }
}; };
tracing::debug!("kube server status: {:?}", server.query_status().await?); tracing::debug!("kube server status: {:?}", server.query_status().await?);
@ -167,7 +176,8 @@ async fn handle_status<T: MinecraftServerHandle>(
} }
}; };
return complete_status_request(client_stream, status_struct).await; mc_server::complete_status_request(client_stream, status_struct).await?;
return mc_server::handle_ping(client_stream).await;
} }
#[tracing::instrument(level = "info", fields(server_addr = handshake.get_server_address()),skip(client_stream, handshake, api))] #[tracing::instrument(level = "info", fields(server_addr = handshake.get_server_address()),skip(client_stream, handshake, api))]

View file

@ -39,8 +39,6 @@ pub async fn complete_status_request(
.send_packet(client_stream) .send_packet(client_stream)
.await .await
.map_err(|_| "Failed to send status packet")?; .map_err(|_| "Failed to send status packet")?;
mc_server::handle_ping(client_stream).await?;
Ok(()) Ok(())
} }