From 0d6e4179e6cc16594a4be3ecd62d89411115f319 Mon Sep 17 00:00:00 2001 From: mat Date: Tue, 14 Dec 2021 23:03:26 -0600 Subject: progress, ? --- .../src/packets/login/clientbound_hello_packet.rs | 8 +--- minecraft-protocol/src/packets/login/mod.rs | 56 +++++++++++++++++++++- .../src/packets/login/serverbound_hello_packet.rs | 7 +-- 3 files changed, 59 insertions(+), 12 deletions(-) (limited to 'minecraft-protocol/src/packets/login') 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, } -#[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) { + 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)), + }, + } + } +} 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) } -- cgit v1.2.3