feat: gracefully handle status request, when server doesn't exist
This commit is contained in:
parent
0d5fec173d
commit
1d9d205d8c
2 changed files with 16 additions and 8 deletions
20
src/main.rs
20
src/main.rs
|
|
@ -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))]
|
||||||
|
|
|
||||||
|
|
@ -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(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue