diff options
| author | mat <github@matdoes.dev> | 2022-04-19 18:53:13 -0500 |
|---|---|---|
| committer | mat <github@matdoes.dev> | 2022-04-19 18:53:13 -0500 |
| commit | 9633874d23f3baa8e5d5c33f3fd51ae6aa880a88 (patch) | |
| tree | aa0fdc9816bb8a69c1ce7531df33cc6fc9aaed22 | |
| parent | c04a28621e53129c03f8aee8cbee89556abf137f (diff) | |
| download | azalea-drasl-9633874d23f3baa8e5d5c33f3fd51ae6aa880a88.tar.xz | |
finish declare_state_packets implementation
| -rw-r--r-- | azalea-protocol/packet-macros/src/lib.rs | 35 | ||||
| -rw-r--r-- | azalea-protocol/src/packets/game/mod.rs | 67 |
2 files changed, 17 insertions, 85 deletions
diff --git a/azalea-protocol/packet-macros/src/lib.rs b/azalea-protocol/packet-macros/src/lib.rs index 8442b921..ab062550 100644 --- a/azalea-protocol/packet-macros/src/lib.rs +++ b/azalea-protocol/packet-macros/src/lib.rs @@ -1,11 +1,9 @@ -use std::collections::{BTreeMap, HashMap}; - use proc_macro::TokenStream; use quote::{quote, ToTokens}; use syn::{ self, braced, parse::{Parse, ParseStream, Result}, - parse_macro_input, DeriveInput, Expr, FieldsNamed, Ident, LitInt, Token, Type, Visibility, + parse_macro_input, DeriveInput, FieldsNamed, Ident, LitInt, Token, }; fn as_packet_derive(input: TokenStream, state: proc_macro2::TokenStream) -> TokenStream { @@ -215,10 +213,13 @@ pub fn declare_state_packets(input: TokenStream) -> TokenStream { let input = parse_macro_input!(input as DeclareStatePackets); let state_name = input.name; + let state_name_litstr = syn::LitStr::new(&state_name.to_string(), state_name.span()); let mut enum_contents = quote!(); let mut id_match_contents = quote!(); let mut write_match_contents = quote!(); + let mut serverbound_read_match_contents = quote!(); + let mut clientbound_read_match_contents = quote!(); for PacketIdPair { id, module, name } in input.serverbound.packets { enum_contents.extend(quote! { #name(#module::#name) @@ -229,16 +230,22 @@ pub fn declare_state_packets(input: TokenStream) -> TokenStream { write_match_contents.extend(quote! { #state_name::#name(packet) => packet.write(buf) }); + serverbound_read_match_contents.extend(quote! { + #id => #module::#name::read(buf).await?, + }); } for PacketIdPair { id, module, name } in input.clientbound.packets { enum_contents.extend(quote! { - #name(#module::#name) + #name(#module::#name), }); id_match_contents.extend(quote! { - #state_name::#name(_packet) => #id + #state_name::#name(_packet) => #id, }); write_match_contents.extend(quote! { - #state_name::#name(packet) => packet.write(buf) + #state_name::#name(packet) => packet.write(buf), + }); + clientbound_read_match_contents.extend(quote! { + #id => #module::#name::read(buf).await?, }); } @@ -276,20 +283,12 @@ pub fn declare_state_packets(input: TokenStream) -> TokenStream { { Ok(match flow { PacketFlow::ServerToClient => match id { - 0x0e => clientbound_change_difficulty_packet::ClientboundChangeDifficultyPacket - ::read(buf) - .await?, - 0x18 => clientbound_custom_payload_packet::ClientboundCustomPayloadPacket::read(buf).await?, - 0x26 => clientbound_login_packet::ClientboundLoginPacket::read(buf).await?, - 0x4a => clientbound_update_view_distance_packet::ClientboundUpdateViewDistancePacket - ::read(buf) - .await?, - // _ => return Err(format!("Unknown ServerToClient game packet id: {}", id)), - _ => panic!("Unknown ServerToClient game packet id: {}", id), + #serverbound_read_match_contents + _ => panic!("Unknown ServerToClient {} packet id: {}", #state_name_litstr, id), }, PacketFlow::ClientToServer => match id { - // 0x00 => serverbound_hello_packet::ServerboundHelloPacket::read(buf).await?, - _ => return Err(format!("Unknown ClientToServer game packet id: {}", id)), + #clientbound_read_match_contents + _ => return Err(format!("Unknown ClientToServer {} packet id: {}", #state_name_litstr, id)), }, }) } diff --git a/azalea-protocol/src/packets/game/mod.rs b/azalea-protocol/src/packets/game/mod.rs index cb07cf97..2affd49e 100644 --- a/azalea-protocol/src/packets/game/mod.rs +++ b/azalea-protocol/src/packets/game/mod.rs @@ -19,70 +19,3 @@ declare_state_packets!( 0x4a: clientbound_update_view_distance_packet::ClientboundUpdateViewDistancePacket, } ); - -// #[derive(Clone, Debug)] -// pub enum GamePacket -// where -// Self: Sized, -// { -// ClientboundLoginPacket(clientbound_login_packet::ClientboundLoginPacket), -// ClientboundUpdateViewDistancePacket( -// clientbound_update_view_distance_packet::ClientboundUpdateViewDistancePacket, -// ), -// ClientboundCustomPayloadPacket( -// clientbound_custom_payload_packet::ClientboundCustomPayloadPacket, -// ), -// ClientboundChangeDifficultyPacket( -// clientbound_change_difficulty_packet::ClientboundChangeDifficultyPacket, -// ), -// } - -// #[async_trait] -// impl ProtocolPacket for GamePacket { -// fn id(&self) -> u32 { -// match self { -// GamePacket::ClientboundChangeDifficultyPacket(_packet) => 0x0e, -// GamePacket::ClientboundCustomPayloadPacket(_packet) => 0x18, -// GamePacket::ClientboundLoginPacket(_packet) => 0x26, -// GamePacket::ClientboundUpdateViewDistancePacket(_packet) => 0x4a, -// } -// } - -// fn write(&self, buf: &mut Vec<u8>) -> Result<(), std::io::Error> { -// match self { -// GamePacket::ClientboundChangeDifficultyPacket(packet) => packet.write(buf), -// GamePacket::ClientboundCustomPayloadPacket(packet) => packet.write(buf), -// GamePacket::ClientboundLoginPacket(packet) => packet.write(buf), -// GamePacket::ClientboundUpdateViewDistancePacket(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 T, -// ) -> Result<GamePacket, String> -// where -// Self: Sized, -// { -// Ok(match flow { -// PacketFlow::ServerToClient => match id { -// 0x0e => clientbound_change_difficulty_packet::ClientboundChangeDifficultyPacket -// ::read(buf) -// .await?, -// 0x18 => clientbound_custom_payload_packet::ClientboundCustomPayloadPacket::read(buf).await?, -// 0x26 => clientbound_login_packet::ClientboundLoginPacket::read(buf).await?, -// 0x4a => clientbound_update_view_distance_packet::ClientboundUpdateViewDistancePacket -// ::read(buf) -// .await?, -// // _ => return Err(format!("Unknown ServerToClient game packet id: {}", id)), -// _ => panic!("Unknown ServerToClient game packet id: {}", id), -// }, -// PacketFlow::ClientToServer => match id { -// // 0x00 => serverbound_hello_packet::ServerboundHelloPacket::read(buf).await?, -// _ => return Err(format!("Unknown ClientToServer game packet id: {}", id)), -// }, -// }) -// } -// } |
