aboutsummaryrefslogtreecommitdiff
path: root/azalea-protocol/src/packets/mod.rs
diff options
context:
space:
mode:
authormat <github@matdoes.dev>2022-04-24 17:37:57 -0500
committermat <github@matdoes.dev>2022-04-24 17:37:57 -0500
commit3e507f0db4020eaf406ba69aae3d4dc1301d29ac (patch)
treeca6c127c9db6dfd14511e98944fc031fe5f1e43a /azalea-protocol/src/packets/mod.rs
parent9f576c5600ba9a244bc0d433bb7de174284066a2 (diff)
parentb7641ff308aab7840d2a2253ae50f8ee496b2a97 (diff)
downloadazalea-drasl-3e507f0db4020eaf406ba69aae3d4dc1301d29ac.tar.xz
Merge branch 'main' into auth
Diffstat (limited to 'azalea-protocol/src/packets/mod.rs')
-rwxr-xr-x[-rw-r--r--]azalea-protocol/src/packets/mod.rs32
1 files changed, 27 insertions, 5 deletions
diff --git a/azalea-protocol/src/packets/mod.rs b/azalea-protocol/src/packets/mod.rs
index e065b65c..98741a75 100644..100755
--- a/azalea-protocol/src/packets/mod.rs
+++ b/azalea-protocol/src/packets/mod.rs
@@ -3,13 +3,18 @@ pub mod handshake;
pub mod login;
pub mod status;
+use crate::{
+ connect::PacketFlow,
+ mc_buf::{McBufReadable, McBufWritable, Readable, Writable},
+};
use async_trait::async_trait;
+use num_derive::FromPrimitive;
+use num_traits::FromPrimitive;
+use tokio::io::AsyncRead;
-use crate::connect::PacketFlow;
+pub const PROTOCOL_VERSION: u32 = 758;
-pub const PROTOCOL_VERSION: u32 = 757;
-
-#[derive(Debug, Clone, PartialEq, Eq, Hash)]
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, FromPrimitive)]
pub enum ConnectionProtocol {
Handshake = -1,
Game = 0,
@@ -42,5 +47,22 @@ where
where
Self: Sized;
- fn write(&self, buf: &mut Vec<u8>);
+ fn write(&self, buf: &mut Vec<u8>) -> Result<(), std::io::Error>;
+}
+
+#[async_trait]
+impl McBufReadable for ConnectionProtocol {
+ async fn read_into<R>(buf: &mut R) -> Result<Self, String>
+ where
+ R: AsyncRead + std::marker::Unpin + std::marker::Send,
+ {
+ ConnectionProtocol::from_i32(buf.read_varint().await?)
+ .ok_or_else(|| "Invalid intention".to_string())
+ }
+}
+
+impl McBufWritable for ConnectionProtocol {
+ fn write_into(&self, buf: &mut Vec<u8>) -> Result<(), std::io::Error> {
+ buf.write_varint(*self as i32)
+ }
}