diff options
| author | mat <github@matdoes.dev> | 2021-12-06 22:12:43 +0000 |
|---|---|---|
| committer | mat <github@matdoes.dev> | 2021-12-06 22:12:43 +0000 |
| commit | 515ad377b314cd97a8b663dbd738681917434434 (patch) | |
| tree | cb1cf65c8e726121ed002aa913132375ab5dc1e7 /minecraft-protocol/src | |
| parent | 1a2c034b411e3d0dceb7b4a921ddd42226719bd0 (diff) | |
| download | azalea-drasl-515ad377b314cd97a8b663dbd738681917434434.tar.xz | |
start implementing reading
Diffstat (limited to 'minecraft-protocol/src')
| -rw-r--r-- | minecraft-protocol/src/connection.rs | 18 | ||||
| -rw-r--r-- | minecraft-protocol/src/lib.rs | 3 | ||||
| -rw-r--r-- | minecraft-protocol/src/packets/mod.rs | 2 | ||||
| -rw-r--r-- | minecraft-protocol/src/server_status_pinger.rs | 6 |
4 files changed, 16 insertions, 13 deletions
diff --git a/minecraft-protocol/src/connection.rs b/minecraft-protocol/src/connection.rs index b187baff..73b5959f 100644 --- a/minecraft-protocol/src/connection.rs +++ b/minecraft-protocol/src/connection.rs @@ -1,7 +1,7 @@ use crate::{mc_buf, packets::Packet, ServerIpAddress}; use bytes::BytesMut; use tokio::{ - io::{AsyncWriteExt, BufWriter}, + io::{AsyncReadExt, AsyncWriteExt, BufReader, BufWriter}, net::TcpStream, }; @@ -12,9 +12,8 @@ pub enum PacketFlow { pub struct Connection { pub flow: PacketFlow, - pub stream: BufWriter<TcpStream>, - /// The read buffer - pub buffer: BytesMut, + /// The buffered writer + pub stream: TcpStream, } impl Connection { @@ -33,12 +32,17 @@ impl Connection { Ok(Connection { flow: PacketFlow::ClientToServer, - stream: BufWriter::new(stream), - // 4mb read buffer - buffer: BytesMut::with_capacity(4 * 1024 * 1024), + stream, }) } + pub async fn read_packet(&mut self) { + // the first thing minecraft sends us is the length as a varint, which can be up to 5 bytes + let mut buf = Vec::new(); + self.stream.read_buf(&mut buf).await; + mc_buf::read_varint(buf) + } + /// Write a packet to the server pub async fn send_packet(&mut self, packet: &dyn Packet) { // packet structure: diff --git a/minecraft-protocol/src/lib.rs b/minecraft-protocol/src/lib.rs index b3653499..0e2b1c45 100644 --- a/minecraft-protocol/src/lib.rs +++ b/minecraft-protocol/src/lib.rs @@ -1,9 +1,6 @@ use std::net::IpAddr; -use std::net::TcpStream; use std::str::FromStr; -use tokio::runtime::Runtime; - pub mod connection; pub mod mc_buf; pub mod packets; diff --git a/minecraft-protocol/src/packets/mod.rs b/minecraft-protocol/src/packets/mod.rs index 7d254adc..b8372ccd 100644 --- a/minecraft-protocol/src/packets/mod.rs +++ b/minecraft-protocol/src/packets/mod.rs @@ -3,8 +3,6 @@ pub use client_intention_packet::ClientIntentionPacket; mod serverbound_status_request_packet; pub use serverbound_status_request_packet::ServerboundStatusRequestPacket; -use crate::mc_buf; - #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum ConnectionProtocol { Handshaking = -1, diff --git a/minecraft-protocol/src/server_status_pinger.rs b/minecraft-protocol/src/server_status_pinger.rs index 5608ebea..ad3d4e52 100644 --- a/minecraft-protocol/src/server_status_pinger.rs +++ b/minecraft-protocol/src/server_status_pinger.rs @@ -1,9 +1,10 @@ use crate::{ connection::Connection, + mc_buf, packets::{ClientIntentionPacket, ConnectionProtocol, ServerboundStatusRequestPacket}, resolver, ServerAddress, }; -use tokio::io::{AsyncReadExt, AsyncWriteExt}; +use tokio::io::AsyncReadExt; pub async fn ping_server(address: &ServerAddress) -> Result<(), String> { let resolved_address = resolver::resolve_address(&address).await?; @@ -22,6 +23,9 @@ pub async fn ping_server(address: &ServerAddress) -> Result<(), String> { .await; conn.send_packet(&ServerboundStatusRequestPacket {}).await; + let data = mc_buf::read_varint(conn.stream); + println!("data {}", data); + // log what the server sends back loop { if 0 == conn.stream.read_buf(&mut conn.buffer).await.unwrap() { |
