1
2
Fork 0
mirror of https://github.com/mat-1/azalea.git synced 2025-08-02 14:26:04 +00:00

it compiles

This commit is contained in:
mat 2021-12-10 16:16:59 +00:00
parent be762fc5d3
commit f6a3f088ac
6 changed files with 24 additions and 24 deletions

View file

@ -72,7 +72,7 @@ impl Connection {
}
/// Write a packet to the server
pub async fn send_packet(&mut self, packet: Packet<'_>) {
pub async fn send_packet(&mut self, packet: Packet) {
// TODO: implement compression
// packet structure:

View file

@ -8,19 +8,19 @@ use crate::{
packets::{ConnectionProtocol, Packet, PacketTrait},
};
#[derive(Hash)]
pub struct ClientIntentionPacket<'a> {
#[derive(Hash, Clone)]
pub struct ClientIntentionPacket {
pub protocol_version: u32,
pub hostname: &'a String,
pub hostname: String,
pub port: u16,
/// 1 for status, 2 for login
pub intention: ConnectionProtocol,
}
#[async_trait]
impl<'a> PacketTrait for ClientIntentionPacket<'a> {
fn get(&self) -> Packet {
Packet::ClientIntentionPacket(*self)
impl PacketTrait for ClientIntentionPacket {
fn get(self) -> Packet {
Packet::ClientIntentionPacket(self)
}
fn write(&self, buf: &mut Vec<u8>) {
@ -32,7 +32,7 @@ impl<'a> PacketTrait for ClientIntentionPacket<'a> {
async fn read<T: tokio::io::AsyncRead + std::marker::Unpin + std::marker::Send>(
buf: &mut BufReader<T>,
) -> Result<Packet<'_>, String> {
) -> Result<Packet, String> {
Err("ClientIntentionPacket::parse not implemented".to_string())
// Ok(ClientIntentionPacket {}.get())
}

View file

@ -16,11 +16,12 @@ pub enum ConnectionProtocol {
Login = 2,
}
pub enum Packet<'a> {
#[derive(Clone)]
pub enum Packet {
// game
// handshake
ClientIntentionPacket(handshake::client_intention_packet::ClientIntentionPacket<'a>),
ClientIntentionPacket(handshake::client_intention_packet::ClientIntentionPacket),
// login
@ -34,7 +35,7 @@ pub enum Packet<'a> {
}
// TODO: do all this with macros so it's less repetitive
impl Packet<'_> {
impl Packet {
fn get_inner_packet(&self) -> &dyn PacketTrait {
match self {
Packet::ClientIntentionPacket(packet) => packet,
@ -57,7 +58,7 @@ impl Packet<'_> {
protocol: ConnectionProtocol,
flow: PacketFlow,
buf: &mut BufReader<T>,
) -> Result<Packet<'_>, String> {
) -> Result<Packet, String> {
match protocol {
ConnectionProtocol::Handshake => match id {
0x00 => Ok(
@ -96,11 +97,11 @@ impl Packet<'_> {
#[async_trait]
pub trait PacketTrait {
/// Return a version of the packet that you can actually use for stuff
fn get(&self) -> Packet;
fn get(self) -> Packet;
fn write(&self, buf: &mut Vec<u8>) -> ();
async fn read<T: AsyncRead + std::marker::Unpin + std::marker::Send>(
buf: &mut BufReader<T>,
) -> Result<Packet<'_>, String>
) -> Result<Packet, String>
where
Self: Sized;
}

View file

@ -14,18 +14,17 @@ pub struct ClientboundStatusResponsePacket {
#[async_trait]
impl PacketTrait for ClientboundStatusResponsePacket {
fn get(&self) -> Packet {
Packet::ClientboundStatusResponsePacket(self.clone())
fn get(self) -> Packet {
Packet::ClientboundStatusResponsePacket(self)
}
fn write(&self, _buf: &mut Vec<u8>) {}
async fn read<T: tokio::io::AsyncRead + std::marker::Unpin + std::marker::Send>(
buf: &mut BufReader<T>,
) -> Result<Packet<'_>, String> {
) -> Result<Packet, String> {
let status = mc_buf::read_utf(buf).await?;
// this.status = GsonHelper.fromJson(GSON, friendlyByteBuf.readUtf(32767), ServerStatus.class);
let packet = ClientboundStatusResponsePacket { status }.get();
Ok(packet)
Ok(ClientboundStatusResponsePacket { status }.get())
}
}

View file

@ -7,19 +7,19 @@ use crate::{
packets::{Packet, PacketTrait},
};
#[derive(Hash)]
#[derive(Hash, Clone)]
pub struct ServerboundStatusRequestPacket {}
#[async_trait]
impl PacketTrait for ServerboundStatusRequestPacket {
fn get(&self) -> Packet {
Packet::ServerboundStatusRequestPacket(*self)
fn get(self) -> Packet {
Packet::ServerboundStatusRequestPacket(self)
}
fn write(&self, _buf: &mut Vec<u8>) {}
async fn read<T: tokio::io::AsyncRead + std::marker::Unpin + std::marker::Send>(
buf: &mut BufReader<T>,
) -> Result<Packet<'_>, String> {
) -> Result<Packet, String> {
Err("ServerboundStatusRequestPacket::read not implemented".to_string())
}
}

View file

@ -20,7 +20,7 @@ pub async fn ping_server(address: &ServerAddress) -> Result<(), String> {
conn.send_packet(
ClientIntentionPacket {
protocol_version: 757,
hostname: &address.host,
hostname: address.host.clone(),
port: address.port,
intention: ConnectionProtocol::Status,
}