Make SLP better

This commit is contained in:
Garen Tyler 2020-12-17 19:38:55 -07:00
parent 17e9e7dd61
commit a5e14d1ba1
9 changed files with 353 additions and 343 deletions

17
.vscode/tasks.json vendored
View File

@ -1,17 +0,0 @@
{
"version": "2.0.0",
"tasks": [
{
"type": "cargo",
"subcommand": "build",
"problemMatcher": [
"$rustc"
],
"group": {
"kind": "build",
"isDefault": true
},
"label": "Rust: cargo build - Composition"
}
]
}

573
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -19,3 +19,4 @@ mojang-api = "0.6.1"
log = "*"
fern = { version = "0.6", features = ["colored"] }
backtrace = "0.3.50"
serde_json = "1.0.59"

View File

@ -1,7 +1,7 @@
# Composition
Composition is targeting 1.15.2, protocol version 578.
The main goal is to get a working server, then optimize for speed. 1.16 support may come in the future, after 1.15 is completed.
Composition is targeting 1.8.9, protocol version 47.
The main goal is to get a working server, then optimize for speed.
## Development Resources

View File

@ -1,49 +1,3 @@
[2020-08-17 16:41:40][Composition][INFO] Starting server...
[2020-08-17 16:41:40][Composition::net][INFO] Network server started!
[2020-08-17 16:41:40][Composition][INFO] Done! Start took 1.023788ms
[2020-08-17 16:41:50][Composition][INFO] Starting server...
[2020-08-17 16:41:50][Composition::net][INFO] Network server started!
[2020-08-17 16:41:50][Composition][INFO] Done! Start took 1.005714ms
[2020-08-17 16:42:32][Composition::net][INFO] Got client at 127.0.0.1:51769
[2020-08-17 17:11:43][Composition][INFO] Starting server...
[2020-08-17 17:11:43][Composition::net][INFO] Network server started!
[2020-08-17 17:11:43][Composition][INFO] Done! Start took 1.245737ms
[2020-08-17 17:14:54][Composition][INFO] Starting server...
[2020-08-17 17:14:54][Composition::net][INFO] Network server started!
[2020-08-17 17:14:54][Composition][INFO] Done! Start took 1.252385ms
[2020-08-17 17:15:41][Composition::net][INFO] Got client at 127.0.0.1:56994
[2020-08-17 21:14:58][Composition][INFO] Starting server...
[2020-08-17 21:14:58][Composition::net][INFO] Network server started!
[2020-08-17 21:14:58][Composition][INFO] Done! Start took 1.787424ms
[2020-08-17 21:15:32][Composition::net][INFO] Got client at 127.0.0.1:52811
[2020-08-17 21:17:01][Composition][INFO] Starting server...
[2020-08-17 21:17:01][Composition::net][INFO] Network server started!
[2020-08-17 21:17:01][Composition][INFO] Done! Start took 1.242146ms
[2020-08-17 21:17:04][Composition::net][INFO] Got client at 127.0.0.1:52841
[2020-08-17 21:18:13][Composition][INFO] Starting server...
[2020-08-17 21:18:13][Composition::net][INFO] Network server started!
[2020-08-17 21:18:13][Composition][INFO] Done! Start took 1.033613ms
[2020-08-17 21:18:15][Composition::net][INFO] Got client at 127.0.0.1:52847
[2020-08-17 21:18:25][Composition::net][INFO] Got client at 127.0.0.1:52850
[2020-08-17 21:18:52][Composition::net][INFO] Got client at 127.0.0.1:52855
[2020-08-17 21:23:47][Composition][INFO] Starting server...
[2020-08-17 21:23:47][Composition::net][INFO] Network server started!
[2020-08-17 21:23:47][Composition][INFO] Done! Start took 966.985µs
[2020-08-17 21:23:49][Composition::net][INFO] Got client at 127.0.0.1:52879
[2020-08-17 21:37:35][Composition][INFO] Starting server...
[2020-08-17 21:37:35][Composition::net][INFO] Network server started!
[2020-08-17 21:37:35][Composition][INFO] Done! Start took 1.448375ms
[2020-08-17 21:37:44][Composition::net][INFO] Got client at 127.0.0.1:53276
[2020-08-18 08:15:48][Composition][INFO] Starting server...
[2020-08-18 08:15:48][Composition::net][INFO] Network server started!
[2020-08-18 08:15:48][Composition][INFO] Done! Start took 1.853066ms
[2020-08-18 08:15:55][Composition::net][INFO] Got client at 127.0.0.1:56532
[2020-08-18 12:50:04][Composition][INFO] Starting server...
[2020-08-18 12:50:04][Composition::net][INFO] Network server started!
[2020-08-18 12:50:04][Composition][INFO] Done! Start took 1.983874ms
[2020-08-18 12:50:23][Composition::net][INFO] Got client at 127.0.0.1:62307
[2020-08-18 12:50:33][Composition::net][INFO] Got client at 127.0.0.1:62319
[2020-08-18 12:55:34][Composition][INFO] Starting server...
[2020-08-18 12:55:34][Composition::net][INFO] Network server started!
[2020-08-18 12:55:34][Composition][INFO] Done! Start took 1.130267ms
[2020-08-18 12:55:56][Composition::net][INFO] Got client at 127.0.0.1:62750
[2020-12-17 19:37:46][Composition][INFO] Starting server...
[2020-12-17 19:37:46][Composition::net][INFO] Network server started!
[2020-12-17 19:37:46][Composition][INFO] Done! Start took 1.175717ms

View File

@ -6,6 +6,7 @@ pub mod net;
pub mod server;
extern crate chrono;
extern crate fern;
extern crate log;
use log::{debug, error, info, warn};
use net::NetworkServer;

View File

@ -5,6 +5,7 @@ use log::{debug, error, info, warn};
use packets::*;
use std::net::{TcpListener, TcpStream, ToSocketAddrs};
use std::sync::mpsc::{self, Receiver, Sender, TryRecvError};
use serde_json::json;
pub struct NetworkServer {
pub clients: Vec<NetworkClient>,
@ -88,42 +89,55 @@ impl NetworkClient {
logindisconnect.write(&mut self.stream).unwrap();
self.state = NetworkClientState::Disconnected;
}
println!("{:?}", handshake);
debug!("Got handshake: {:?}", handshake);
}
NetworkClientState::Status => {
let (_packet_length, _packet_id) = read_packet_header(&mut self.stream).unwrap();
let statusrequest = StatusRequest::read(&mut self.stream).unwrap();
println!("{:?}", statusrequest);
debug!("Got status request: {:?}", statusrequest);
let mut statusresponse = StatusResponse::new();
statusresponse.json_response = format!(
"{{\n\t\"version\": {{\n\t\t\"name\": \"{server_version}\",\n\t\t\"protocol\": {server_protocol}\n\t}},\n\t\"players\": {{\n\t\t\"max\": {max_players},\n\t\t\"online\": {num_players},\n\t\t\"sample\": [\n\t\t\t{{\n\t\t\t\t\"name\": \"ElementG9\",\n\t\t\t\t\"id\": \"e3f58380-60bb-4714-91f2-151d525e64aa\"\n\t\t\t}}\n\t\t]\n\t}},\n\t\"description\": {{\n\t\t\"text\": \"{server_description}\"\n\t}},\n\t\"sample\": \"\"\n}}",
server_version = "1.8.9",
server_protocol = 47,
num_players = 5,
max_players = 100,
server_description = "Hello world!"
).into();
statusresponse.json_response = json!({
"version": {
"name": "1.8.9",
"protocol": 47,
},
"players": {
"max": 100,
"online": 5,
"sample": [
{
"name": "ElementG9",
"id": "e3f58380-60bb-4714-91f2-151d525e64aa"
}
]
},
"description": {
"text": "Hello world!"
},
"favicon": format!("data:image/png;base64,{}", radix64::STD.encode(include_bytes!("../server-icon.png")))
}).to_string().into();
statusresponse.write(&mut self.stream).unwrap();
println!("{:?}", statusresponse);
debug!("Sending status response: StatusResponse");
let (_packet_length, _packet_id) = read_packet_header(&mut self.stream).unwrap();
let statusping = StatusPing::read(&mut self.stream).unwrap();
println!("{:?}", statusping);
debug!("Got status ping: {:?}", statusping);
let mut statuspong = StatusPong::new();
statuspong.payload = statusping.payload;
statuspong.write(&mut self.stream).unwrap();
debug!("Sending status pong: {:?}", statuspong);
self.state = NetworkClientState::Disconnected;
}
NetworkClientState::Login => {
let (_packet_length, _packet_id) = read_packet_header(&mut self.stream).unwrap();
let loginstart = LoginStart::read(&mut self.stream).unwrap();
println!("{:?}", loginstart);
debug!("{:?}", loginstart);
// Offline mode skips encryption and compression.
let mut loginsuccess = LoginSuccess::new();
// We're in offline mode, so this is a temporary uuid.
loginsuccess.uuid = "00000000-0000-3000-0000-000000000000".into();
loginsuccess.username = loginstart.player_name;
loginsuccess.write(&mut self.stream).unwrap();
println!("{:?}", loginsuccess);
debug!("{:?}", loginsuccess);
self.state = NetworkClientState::Play;
}
NetworkClientState::Play => {}

View File

@ -59,7 +59,7 @@ pub struct StatusRequest {}
impl Into<Vec<u8>> for StatusRequest {
fn into(self) -> Vec<u8> {
let mut out = vec![];
let mut temp: Vec<u8> = MCVarInt::from(0x00).into(); // 0x00 Status Request.
let temp: Vec<u8> = MCVarInt::from(0x00).into(); // 0x00 Status Request.
out.extend_from_slice(&Into::<Vec<u8>>::into(MCVarInt::from(temp.len() as i32)));
out.extend_from_slice(&temp);
out
@ -75,8 +75,8 @@ impl Packet for StatusRequest {
fn new() -> Self {
StatusRequest {}
}
fn read(t: &mut TcpStream) -> std::io::Result<Self> {
let mut statusrequest = StatusRequest::new();
fn read(_t: &mut TcpStream) -> std::io::Result<Self> {
let statusrequest = StatusRequest::new();
Ok(statusrequest)
}
fn write(&self, t: &mut TcpStream) -> std::io::Result<()> {

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB