хуйня
This commit is contained in:
parent
76d602bca2
commit
f92f9827c6
4
.vscode/settings.json
vendored
Normal file
4
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"editor.fontFamily": "Fira Code",
|
||||||
|
"editor.fontLigatures": true
|
||||||
|
}
|
37
Cargo.lock
generated
37
Cargo.lock
generated
@ -56,6 +56,25 @@ version = "1.0.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "crc32fast"
|
||||||
|
version = "1.4.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "flate2"
|
||||||
|
version = "1.1.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece"
|
||||||
|
dependencies = [
|
||||||
|
"crc32fast",
|
||||||
|
"miniz_oxide",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gimli"
|
name = "gimli"
|
||||||
version = "0.31.1"
|
version = "0.31.1"
|
||||||
@ -169,10 +188,22 @@ dependencies = [
|
|||||||
"bitflags",
|
"bitflags",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rust_mc_proto_tokio"
|
||||||
|
version = "0.1.18"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3d60654d16d2a3b9c59dc248cde3864881f6e926a8611280bf0ef1a157bf345b"
|
||||||
|
dependencies = [
|
||||||
|
"flate2",
|
||||||
|
"tokio",
|
||||||
|
"uuid",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rust_minecraft_server"
|
name = "rust_minecraft_server"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"rust_mc_proto_tokio",
|
||||||
"tokio",
|
"tokio",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -259,6 +290,12 @@ version = "1.0.18"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
|
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "uuid"
|
||||||
|
version = "1.16.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasi"
|
name = "wasi"
|
||||||
version = "0.11.0+wasi-snapshot-preview1"
|
version = "0.11.0+wasi-snapshot-preview1"
|
||||||
|
@ -5,3 +5,4 @@ edition = "2024"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
tokio = { version = "1.0", features = ["full"]}
|
tokio = { version = "1.0", features = ["full"]}
|
||||||
|
rust_mc_proto_tokio = "0.1.18"
|
25
src/data.rs
25
src/data.rs
@ -1,25 +0,0 @@
|
|||||||
|
|
||||||
pub struct VarInt;
|
|
||||||
|
|
||||||
impl VarInt {
|
|
||||||
// Константы объявляются внутри блока impl
|
|
||||||
pub const MAX_VARINT_SIZE: i32 = 5;
|
|
||||||
pub const DATA_BITS_MASK: i32 = 127;
|
|
||||||
pub const CONTINUATION_BIT_MASK: i32 = 128;
|
|
||||||
pub const DATA_BITS_PER_BYTE: i32 = 7;
|
|
||||||
|
|
||||||
pub fn getByteSize(i: i32) -> i32 {
|
|
||||||
for j in 1..5 {
|
|
||||||
if (i & -1 << (j * 7)) == 0 {
|
|
||||||
return j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn hasContinuationBit(b0: u8) -> bool {
|
|
||||||
return (b0 & 128) == 128
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
54
src/main.rs
54
src/main.rs
@ -1,41 +1,33 @@
|
|||||||
pub(crate) mod data;
|
|
||||||
|
use std::net::SocketAddr;
|
||||||
|
|
||||||
use tokio::io::AsyncReadExt;
|
use tokio::io::AsyncReadExt;
|
||||||
use tokio::net::{TcpListener, TcpStream};
|
use tokio::net::{TcpListener, TcpStream};
|
||||||
use data::VarInt;
|
|
||||||
|
use rust_mc_proto_tokio::{packet, prelude::*, MCConnTcp, MinecraftConnection, Packet, ProtocolError};
|
||||||
|
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
async fn main() {
|
||||||
// 1. Создаём TCP listener на порту 25565
|
let listener = match TcpListener::bind("127.0.0.1:25565").await {
|
||||||
let listener = TcpListener::bind("127.0.0.1:25565").await?;
|
Ok(v) => v,
|
||||||
println!("Listening on port 25565...");
|
Err(e) => { println!("Не удалось забиндить сервер: {}", e); return; }
|
||||||
|
};
|
||||||
|
|
||||||
// 2. Асинхронно принимаем входящие соединения
|
while let Ok((stream, addr)) = listener.accept().await {
|
||||||
while let Ok((stream, _)) = listener.accept().await {
|
tokio::spawn(handle_connection(stream, addr));
|
||||||
// Для каждого соединения создаём отдельную задачу
|
|
||||||
tokio::spawn(handle_connection(stream));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn handle_connection(mut stream: TcpStream) {
|
async fn handle_connection(stream: TcpStream, addr: SocketAddr) {
|
||||||
let mut firstByte = [0];
|
let mut conn = MinecraftConnection::new(stream);
|
||||||
let Ok(n) = stream.read(&mut firstByte).await else { return };
|
println!("Подключение: {}", addr);
|
||||||
|
loop {
|
||||||
// let mut buffer = [0; 1024];
|
let Ok(mut packet) = conn.read_packet().await else {break;};
|
||||||
|
let Ok(x) = packet.read_bytes(packet.len()).await else {
|
||||||
// // 3. Читаем данные из потока
|
println!("X"); break;
|
||||||
// while let Ok(n) = stream.read(&mut buffer).await {
|
};
|
||||||
// if n == 0 {
|
println!("{}", String::from_utf8_lossy(&x));
|
||||||
// // Соединение закрыто
|
}
|
||||||
// break;
|
conn.close().await;
|
||||||
// }
|
|
||||||
|
|
||||||
// // 4. Декодируем байты в UTF-8, пропуская ошибки
|
|
||||||
// let received = String::from_utf8_lossy(&buffer[..n]);
|
|
||||||
// print!("{}", received);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// 5. Соединение автоматически закрывается при выходе из области видимости
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user