From 0d6e4179e6cc16594a4be3ecd62d89411115f319 Mon Sep 17 00:00:00 2001 From: mat Date: Tue, 14 Dec 2021 23:03:26 -0600 Subject: progress, ? --- .../status/clientbound_status_response_packet.rs | 22 +++++++-------- minecraft-protocol/src/packets/status/mod.rs | 32 ++++++---------------- .../status/serverbound_status_request_packet.rs | 14 +++++----- 3 files changed, 26 insertions(+), 42 deletions(-) (limited to 'minecraft-protocol/src/packets/status') 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 30b1403c..f19ab024 100644 --- a/minecraft-protocol/src/packets/status/clientbound_status_response_packet.rs +++ b/minecraft-protocol/src/packets/status/clientbound_status_response_packet.rs @@ -4,10 +4,7 @@ use serde::{Deserialize, Deserializer}; use serde_json::Value; use tokio::io::BufReader; -use crate::{ - mc_buf, - packets::{Packet, PacketTrait}, -}; +use crate::{mc_buf, packets::Packet}; use super::StatusPacket; @@ -39,23 +36,24 @@ pub struct ClientboundStatusResponsePacket { pub version: Version, } -#[async_trait] -impl PacketTrait for ClientboundStatusResponsePacket { - fn get(self) -> StatusPacket { +impl ClientboundStatusResponsePacket { + pub fn get(self) -> StatusPacket { StatusPacket::ClientboundStatusResponsePacket(self) } - fn write(&self, _buf: &mut Vec) {} + pub fn write(&self, _buf: &mut Vec) {} - async fn read( + pub async fn read( buf: &mut BufReader, - ) -> Result { + ) -> Result { let status_string = mc_buf::read_utf(buf).await?; let status_json: Value = serde_json::from_str(status_string.as_str()).expect("Server status isn't valid JSON"); - Ok(ClientboundStatusResponsePacket::deserialize(status_json) + let packet = ClientboundStatusResponsePacket::deserialize(status_json) .map_err(|e| e.to_string())? - .get()) + .get(); + + Ok(packet) } } diff --git a/minecraft-protocol/src/packets/status/mod.rs b/minecraft-protocol/src/packets/status/mod.rs index 7e327ca7..aa302e58 100644 --- a/minecraft-protocol/src/packets/status/mod.rs +++ b/minecraft-protocol/src/packets/status/mod.rs @@ -6,10 +6,13 @@ use tokio::io::BufReader; use crate::connect::PacketFlow; -use super::{ConnectionProtocol, PacketTrait, ProtocolPacket}; +use super::{ProtocolPacket}; #[derive(Clone, Debug)] -pub enum StatusPacket { +pub enum StatusPacket +where + Self: Sized, +{ ServerboundStatusRequestPacket( serverbound_status_request_packet::ServerboundStatusRequestPacket, ), @@ -18,22 +21,8 @@ pub enum StatusPacket { ), } -// #[async_trait] -// impl ProtocolPacket for StatusPacket { -impl StatusPacket { - fn get_inner(self) -> impl PacketTrait { - match self { - StatusPacket::ServerboundStatusRequestPacket(packet) => packet, - StatusPacket::ClientboundStatusResponsePacket(packet) => packet, - } - } - // fn get_inner(&self) -> StatusPacket { - // match self { - // StatusPacket::ServerboundStatusRequestPacket(packet) => packet, - // StatusPacket::ClientboundStatusResponsePacket(packet) => packet, - // } - // } - +#[async_trait] +impl ProtocolPacket for StatusPacket { fn id(&self) -> u32 { match self { StatusPacket::ServerboundStatusRequestPacket(_packet) => 0x00, @@ -49,14 +38,11 @@ impl StatusPacket { } /// Read a packet by its id, ConnectionProtocol, and flow - async fn read< - T: tokio::io::AsyncRead + std::marker::Unpin + std::marker::Send, - P: ProtocolPacket, - >( + async fn read( id: u32, flow: &PacketFlow, buf: &mut BufReader, - ) -> Result + ) -> Result where Self: Sized, { 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 066131cc..8b29391a 100644 --- a/minecraft-protocol/src/packets/status/serverbound_status_request_packet.rs +++ b/minecraft-protocol/src/packets/status/serverbound_status_request_packet.rs @@ -2,25 +2,25 @@ use async_trait::async_trait; use std::hash::Hash; use tokio::io::BufReader; -use crate::packets::{Packet, PacketTrait, ProtocolPacket}; +use crate::packets::{Packet, ProtocolPacket}; use super::StatusPacket; #[derive(Hash, Clone, Debug)] pub struct ServerboundStatusRequestPacket {} -#[async_trait] -impl PacketTrait for ServerboundStatusRequestPacket { - fn get(self) -> StatusPacket { +impl ServerboundStatusRequestPacket { + pub fn get(self) -> StatusPacket { StatusPacket::ServerboundStatusRequestPacket(self) } - fn write(&self, _buf: &mut Vec) { + + pub fn write(&self, _buf: &mut Vec) { panic!("ServerboundStatusRequestPacket::write not implemented") } - async fn read( + pub async fn read( _buf: &mut BufReader, - ) -> Result { + ) -> Result { Err("ServerboundStatusRequestPacket::read not implemented".to_string()) } } -- cgit v1.2.3