From f9f7e3498e63d6553b67cefc3958c98f009b33a2 Mon Sep 17 00:00:00 2001 From: mat Date: Fri, 10 Dec 2021 16:27:51 +0000 Subject: [PATCH] reading packets works --- minecraft-protocol/src/connection.rs | 15 +++++++++------ minecraft-protocol/src/mc_buf.rs | 2 -- .../packets/handshake/client_intention_packet.rs | 2 +- minecraft-protocol/src/packets/mod.rs | 6 +++--- .../status/clientbound_status_response_packet.rs | 2 +- .../status/serverbound_status_request_packet.rs | 2 +- 6 files changed, 15 insertions(+), 14 deletions(-) diff --git a/minecraft-protocol/src/connection.rs b/minecraft-protocol/src/connection.rs index d5cee708..a8319fe1 100644 --- a/minecraft-protocol/src/connection.rs +++ b/minecraft-protocol/src/connection.rs @@ -36,7 +36,7 @@ impl Connection { Ok(Connection { state: ConnectionProtocol::Handshake, - flow: PacketFlow::ClientToServer, + flow: PacketFlow::ServerToClient, stream, }) } @@ -61,12 +61,15 @@ impl Connection { // if we recognize the packet id, parse it - // TODO + let packet = Packet::read( + packet_id.try_into().unwrap(), + &self.state, + &self.flow, + &mut buf, + ) + .await?; - // otherwise, read the rest of the packet and throw it away - let mut packet_data = Vec::with_capacity((packet_size - packet_id_size as i32) as usize); - buf.read_buf(&mut packet_data).await.unwrap(); - println!("packet {:?}", packet_data); + println!("packet: {:?}", packet); Ok(()) } diff --git a/minecraft-protocol/src/mc_buf.rs b/minecraft-protocol/src/mc_buf.rs index b83a9599..68ce6de4 100644 --- a/minecraft-protocol/src/mc_buf.rs +++ b/minecraft-protocol/src/mc_buf.rs @@ -5,8 +5,6 @@ use std::io::{Cursor, Write}; use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt}; use tokio::io::{AsyncRead, AsyncReadExt, BufReader}; -// const MAX_VARINT_SIZE: u32 = 5; -// const MAX_VARLONG_SIZE: u32 = 10; // const DEFAULT_NBT_QUOTA: u32 = 2097152; const MAX_STRING_LENGTH: u16 = 32767; // const MAX_COMPONENT_STRING_LENGTH: u32 = 262144; diff --git a/minecraft-protocol/src/packets/handshake/client_intention_packet.rs b/minecraft-protocol/src/packets/handshake/client_intention_packet.rs index 0f14ed48..c6a940e3 100644 --- a/minecraft-protocol/src/packets/handshake/client_intention_packet.rs +++ b/minecraft-protocol/src/packets/handshake/client_intention_packet.rs @@ -8,7 +8,7 @@ use crate::{ packets::{ConnectionProtocol, Packet, PacketTrait}, }; -#[derive(Hash, Clone)] +#[derive(Hash, Clone, Debug)] pub struct ClientIntentionPacket { pub protocol_version: u32, pub hostname: String, diff --git a/minecraft-protocol/src/packets/mod.rs b/minecraft-protocol/src/packets/mod.rs index 0d8b6883..1fac2a3b 100644 --- a/minecraft-protocol/src/packets/mod.rs +++ b/minecraft-protocol/src/packets/mod.rs @@ -16,7 +16,7 @@ pub enum ConnectionProtocol { Login = 2, } -#[derive(Clone)] +#[derive(Clone, Debug)] pub enum Packet { // game @@ -55,8 +55,8 @@ impl Packet { /// Read a packet by its id, ConnectionProtocol, and flow pub async fn read( id: u32, - protocol: ConnectionProtocol, - flow: PacketFlow, + protocol: &ConnectionProtocol, + flow: &PacketFlow, buf: &mut BufReader, ) -> Result { match protocol { diff --git a/minecraft-protocol/src/packets/status/clientbound_status_response_packet.rs b/minecraft-protocol/src/packets/status/clientbound_status_response_packet.rs index 28ac9b16..b61562cf 100644 --- a/minecraft-protocol/src/packets/status/clientbound_status_response_packet.rs +++ b/minecraft-protocol/src/packets/status/clientbound_status_response_packet.rs @@ -7,7 +7,7 @@ use crate::{ packets::{Packet, PacketTrait}, }; -#[derive(Hash, Clone)] +#[derive(Hash, Clone, Debug)] pub struct ClientboundStatusResponsePacket { status: String, } diff --git a/minecraft-protocol/src/packets/status/serverbound_status_request_packet.rs b/minecraft-protocol/src/packets/status/serverbound_status_request_packet.rs index 1a301a4d..a08ffdff 100644 --- a/minecraft-protocol/src/packets/status/serverbound_status_request_packet.rs +++ b/minecraft-protocol/src/packets/status/serverbound_status_request_packet.rs @@ -7,7 +7,7 @@ use crate::{ packets::{Packet, PacketTrait}, }; -#[derive(Hash, Clone)] +#[derive(Hash, Clone, Debug)] pub struct ServerboundStatusRequestPacket {} #[async_trait]