reorganize file structure, define rpc protocol

This commit is contained in:
2026-05-10 18:13:04 +02:00
parent 5324cb8c29
commit 20ce06657d
12 changed files with 591 additions and 48 deletions

View File

@ -1,48 +1,34 @@
use tokio::net::{TcpListener, TcpStream};
mod client;
use client::Client;
use tokio::net::TcpListener;
use std::io;
pub mod varint;
pub mod handshake;
mod minecraft;
use minecraft::process_mc_socket;
async fn process_socket(stream: TcpStream) -> io::Result<()> {
let mut buf = vec![0 as u8; 1024];
let mut client = Client::create(stream);
loop {
client.in_stream.readable().await?;
match client.in_stream.try_read(&mut buf) {
Ok(n) => {
let _ = client.buffer_append((&buf[..n]).to_vec()).await;
if n == 0 {
break;
}
}
Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
continue;
}
Err(e) => {
return Err(e.into());
}
}
}
Ok(())
}
mod rpc;
use rpc::process_rpc_socket;
#[tokio::main(flavor = "current_thread")]
async fn main() -> io::Result<()> {
let listener = TcpListener::bind("0.0.0.0:25565").await?;
let mc_listener = TcpListener::bind("0.0.0.0:25565").await?;
let rpc_listener = TcpListener::bind("0.0.0.0:8080").await?;
loop {
let (socket, _) = listener.accept().await?;
tokio::spawn(async move {
if let Err(e) = process_socket(socket).await {
eprintln!("error: {:?}", e);
tokio::select! {
Ok((socket, _)) = mc_listener.accept() => {
tokio::spawn(async move {
if let Err(e) = process_mc_socket(socket).await {
eprintln!("mc error: {:?}", e);
}
});
}
});
Ok((socket, _)) = rpc_listener.accept() => {
tokio::spawn(async move {
if let Err(e) = process_rpc_socket(socket).await {
eprintln!("rpc error: {:?}", e);
}
});
}
}
}
}