From 0d6e4179e6cc16594a4be3ecd62d89411115f319 Mon Sep 17 00:00:00 2001 From: mat Date: Tue, 14 Dec 2021 23:03:26 -0600 Subject: progress, ? --- minecraft-protocol/src/packets/login/mod.rs | 56 ++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) (limited to 'minecraft-protocol/src/packets/login/mod.rs') diff --git a/minecraft-protocol/src/packets/login/mod.rs b/minecraft-protocol/src/packets/login/mod.rs index 47193f92..4d4f13d3 100644 --- a/minecraft-protocol/src/packets/login/mod.rs +++ b/minecraft-protocol/src/packets/login/mod.rs @@ -1,8 +1,62 @@ pub mod clientbound_hello_packet; pub mod serverbound_hello_packet; +use async_trait::async_trait; +use tokio::io::BufReader; + +use crate::connect::PacketFlow; + +use super::ProtocolPacket; + #[derive(Clone, Debug)] -pub enum LoginPacket { +pub enum LoginPacket +where + Self: Sized, +{ ServerboundHelloPacket(serverbound_hello_packet::ServerboundHelloPacket), ClientboundHelloPacket(clientbound_hello_packet::ClientboundHelloPacket), } + +#[async_trait] +impl ProtocolPacket for LoginPacket { + fn id(&self) -> u32 { + match self { + LoginPacket::ServerboundStatusRequestPacket(_packet) => 0x00, + LoginPacket::ClientboundStatusResponsePacket(_packet) => 0x00, + } + } + + fn write(&self, buf: &mut Vec) { + match self { + LoginPacket::ServerboundStatusRequestPacket(packet) => packet.write(buf), + LoginPacket::ClientboundStatusResponsePacket(packet) => packet.write(buf), + } + } + + /// Read a packet by its id, ConnectionProtocol, and flow + async fn read( + id: u32, + flow: &PacketFlow, + buf: &mut BufReader, + ) -> Result + where + Self: Sized, + { + match flow { + PacketFlow::ServerToClient => match id { + 0x00 => Ok( + clientbound_status_response_packet::ClientboundStatusResponsePacket::read(buf) + .await?, + ), + _ => Err(format!("Unknown ServerToClient status packet id: {}", id)), + }, + PacketFlow::ClientToServer => match id { + 0x00 => Ok( + serverbound_status_request_packet::ServerboundStatusRequestPacket::read(buf) + .await?, + ), + _ => Err(format!("Unknown ClientToServer status packet id: {}", id)), + }, + } + } +} -- cgit v1.2.3