aboutsummaryrefslogtreecommitdiff
path: root/minecraft-protocol/src/packets/login
diff options
context:
space:
mode:
authormat <github@matdoes.dev>2021-12-14 23:03:26 -0600
committermat <github@matdoes.dev>2021-12-14 23:03:26 -0600
commit0d6e4179e6cc16594a4be3ecd62d89411115f319 (patch)
tree019284386b7a2540efe440e0c2f3aad27801a5a6 /minecraft-protocol/src/packets/login
parentc96ae8fce4e53ea9fad111ac7f479f2fa33ef859 (diff)
downloadazalea-drasl-0d6e4179e6cc16594a4be3ecd62d89411115f319.tar.xz
progress, ?
Diffstat (limited to 'minecraft-protocol/src/packets/login')
-rw-r--r--minecraft-protocol/src/packets/login/clientbound_hello_packet.rs8
-rw-r--r--minecraft-protocol/src/packets/login/mod.rs56
-rw-r--r--minecraft-protocol/src/packets/login/serverbound_hello_packet.rs7
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)
}