aboutsummaryrefslogtreecommitdiff
path: root/minecraft-protocol
diff options
context:
space:
mode:
authormat <github@matdoes.dev>2021-12-06 22:12:43 +0000
committermat <github@matdoes.dev>2021-12-06 22:12:43 +0000
commit515ad377b314cd97a8b663dbd738681917434434 (patch)
treecb1cf65c8e726121ed002aa913132375ab5dc1e7 /minecraft-protocol
parent1a2c034b411e3d0dceb7b4a921ddd42226719bd0 (diff)
downloadazalea-drasl-515ad377b314cd97a8b663dbd738681917434434.tar.xz
start implementing reading
Diffstat (limited to 'minecraft-protocol')
-rw-r--r--minecraft-protocol/Cargo.toml2
-rw-r--r--minecraft-protocol/src/connection.rs18
-rw-r--r--minecraft-protocol/src/lib.rs3
-rw-r--r--minecraft-protocol/src/packets/mod.rs2
-rw-r--r--minecraft-protocol/src/server_status_pinger.rs6
5 files changed, 17 insertions, 14 deletions
diff --git a/minecraft-protocol/Cargo.toml b/minecraft-protocol/Cargo.toml
index 3ccaf88b..929ec884 100644
--- a/minecraft-protocol/Cargo.toml
+++ b/minecraft-protocol/Cargo.toml
@@ -10,6 +10,6 @@ async-recursion = "^0.3.2"
byteorder = "^1.4.3"
bytes = "^1.1.0"
thiserror = "^1.0.30"
-tokio = {version = "^1.14.0", features = ["io-util"]}
+tokio = {version = "^1.14.0", features = ["io-util", "net"]}
tokio-util = "^0.6.9"
trust-dns-resolver = "^0.20.3"
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() {