Compare commits
2 commits
c70527ded5
...
e403d93dc2
| Author | SHA1 | Date | |
|---|---|---|---|
| e403d93dc2 | |||
| bebca902df |
2 changed files with 18 additions and 1 deletions
15
src/main.rs
15
src/main.rs
|
|
@ -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()
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue