Make SLP better
This commit is contained in:
parent
17e9e7dd61
commit
a5e14d1ba1
17
.vscode/tasks.json
vendored
17
.vscode/tasks.json
vendored
@ -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
573
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@ -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"
|
||||
|
@ -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
|
||||
|
||||
|
52
output.log
52
output.log
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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 => {}
|
||||
|
@ -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<()> {
|
||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Loading…
x
Reference in New Issue
Block a user