diff options
| author | mat <github@matdoes.dev> | 2021-12-14 23:03:26 -0600 |
|---|---|---|
| committer | mat <github@matdoes.dev> | 2021-12-14 23:03:26 -0600 |
| commit | 0d6e4179e6cc16594a4be3ecd62d89411115f319 (patch) | |
| tree | 019284386b7a2540efe440e0c2f3aad27801a5a6 /minecraft-protocol/src/packets/login | |
| parent | c96ae8fce4e53ea9fad111ac7f479f2fa33ef859 (diff) | |
| download | azalea-drasl-0d6e4179e6cc16594a4be3ecd62d89411115f319.tar.xz | |
progress, ?
Diffstat (limited to 'minecraft-protocol/src/packets/login')
3 files changed, 59 insertions, 12 deletions
diff --git a/minecraft-protocol/src/packets/login/clientbound_hello_packet.rs b/minecraft-protocol/src/packets/login/clientbound_hello_packet.rs index 878ca456..c0ec85f3 100644 --- a/minecraft-protocol/src/packets/login/clientbound_hello_packet.rs +++ b/minecraft-protocol/src/packets/login/clientbound_hello_packet.rs @@ -2,10 +2,7 @@ use async_trait::async_trait; use std::hash::Hash; use tokio::io::BufReader; -use crate::{ - mc_buf, - packets::{Packet, PacketTrait}, -}; +use crate::{mc_buf, packets::Packet}; #[derive(Hash, Clone, Debug)] pub struct ClientboundHelloPacket { @@ -14,8 +11,7 @@ pub struct ClientboundHelloPacket { pub nonce: Vec<u8>, } -#[async_trait] -impl PacketTrait for ClientboundHelloPacket { +impl ClientboundHelloPacket { fn get(self) -> Packet { Packet::ClientboundHelloPacket(self) } 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<u8>) { + 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<T: tokio::io::AsyncRead + std::marker::Unpin + std::marker::Send>( + id: u32, + flow: &PacketFlow, + buf: &mut BufReader<T>, + ) -> Result<LoginPacket, String> + 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)), + }, + } + } +} diff --git a/minecraft-protocol/src/packets/login/serverbound_hello_packet.rs b/minecraft-protocol/src/packets/login/serverbound_hello_packet.rs index cadf9f7b..345b11f6 100644 --- a/minecraft-protocol/src/packets/login/serverbound_hello_packet.rs +++ b/minecraft-protocol/src/packets/login/serverbound_hello_packet.rs @@ -2,10 +2,7 @@ use async_trait::async_trait; use std::hash::Hash; use tokio::io::BufReader; -use crate::{ - mc_buf, - packets::{Packet, PacketTrait}, -}; +use crate::{mc_buf, packets::Packet}; #[derive(Hash, Clone, Debug)] pub struct ServerboundHelloPacket { @@ -13,7 +10,7 @@ pub struct ServerboundHelloPacket { } #[async_trait] -impl PacketTrait for ServerboundHelloPacket { +impl ServerboundHelloPacket { fn get(self) -> Packet { Packet::ServerboundHelloPacket(self) } |
