more fiery commit

This commit is contained in:
MeexReay 2024-08-23 17:21:24 +03:00
parent 95a7bb21e0
commit e2cc99dfb7

View File

@ -11,52 +11,52 @@ use rust_mc_proto::{DataBufferReader, DataBufferWriter, MCConnTcp, MinecraftConn
struct MinecraftServer {
server_ip: String,
server_port: u16,
protocol_version: u16,
motd: String
}
impl MinecraftServer {
fn new(server_ip: &str,
server_port: u16,
protocol_version: u16,
motd: &str) -> Self {
MinecraftServer {
server_ip: server_ip.to_string(),
server_port,
protocol_version,
motd: motd.to_string()
}
}
}
fn accept_client(mut conn: MCConnTcp, server: Arc<Mutex<MinecraftServer>>) -> Result<(), ProtocolError> {
fn start(self) {
let addr = self.server_ip.clone() + ":" + &self.server_port.to_string();
let listener = TcpListener::bind(addr).unwrap();
let server = Arc::new(Mutex::new(self));
for stream in listener.incoming() {
let stream = stream.unwrap();
let local_server = server.clone();
thread::spawn(move || {
Self::accept_client(MinecraftConnection::new(stream), local_server).unwrap();
});
}
}
fn accept_client(mut conn: MCConnTcp, server: Arc<Mutex<MinecraftServer>>) -> Result<(), ProtocolError> {
let mut handshake = false;
loop {
let mut packet = match conn.read_packet() {
Ok(i) => i,
Err(_) => {
break;
},
};
let Ok(mut packet) = conn.read_packet() else { break; };
if handshake {
if packet.id() == 0x00 {
let mut status = Packet::empty(0x00);
let motd = server.lock().unwrap().motd.clone();
let serv = server.lock().unwrap();
let motd = serv.motd.clone();
let motd = motd.replace(
"PROTOCOL_VERSION",
&serv.protocol_version.to_string());
status.write_string(&motd)?;
conn.write_packet(&status)?;
conn.write_packet(&Packet::build(0x00, |status|
status.write_string(&motd)
)?)?;
} else if packet.id() == 0x01 {
let mut status = Packet::empty(0x01);
status.write_long(packet.read_long()?)?;
conn.write_packet(&status)?;
conn.write_packet(&Packet::build(0x01, |status|
status.write_long(packet.read_long()?)
)?)?;
}
} else if packet.id() == 0x00 {
let protocol_version = packet.read_i32_varint()?;
@ -81,16 +81,16 @@ fn accept_client(mut conn: MCConnTcp, server: Arc<Mutex<MinecraftServer>>) -> Re
conn.close();
Ok(())
}
}
fn main() {
let server = MinecraftServer::new(
"127.0.0.1",
25565,
765,
"{
\"version\":{
\"protocol\":PROTOCOL_VERSION,
\"protocol\":765,
\"name\":\"Version name\"
},
\"players\":{
@ -111,17 +111,5 @@ fn main() {
\"favicon\": \"data:image/png;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=\"
}"
);
let addr = server.server_ip.clone() + ":" + &server.server_port.to_string();
let listener = TcpListener::bind(addr).unwrap();
let server = Arc::new(Mutex::new(server));
for stream in listener.incoming() {
let stream = stream.unwrap();
let local_server = server.clone();
thread::spawn(move || {
accept_client(MinecraftConnection::new(stream), local_server).unwrap();
});
}
server.start();
}