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 = "*"
|
log = "*"
|
||||||
fern = { version = "0.6", features = ["colored"] }
|
fern = { version = "0.6", features = ["colored"] }
|
||||||
backtrace = "0.3.50"
|
backtrace = "0.3.50"
|
||||||
|
serde_json = "1.0.59"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# Composition
|
# Composition
|
||||||
|
|
||||||
Composition is targeting 1.15.2, protocol version 578.
|
Composition is targeting 1.8.9, protocol version 47.
|
||||||
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.
|
The main goal is to get a working server, then optimize for speed.
|
||||||
|
|
||||||
## Development Resources
|
## Development Resources
|
||||||
|
|
||||||
|
52
output.log
52
output.log
@ -1,49 +1,3 @@
|
|||||||
[2020-08-17 16:41:40][Composition][INFO] Starting server...
|
[2020-12-17 19:37:46][Composition][INFO] Starting server...
|
||||||
[2020-08-17 16:41:40][Composition::net][INFO] Network server started!
|
[2020-12-17 19:37:46][Composition::net][INFO] Network server started!
|
||||||
[2020-08-17 16:41:40][Composition][INFO] Done! Start took 1.023788ms
|
[2020-12-17 19:37:46][Composition][INFO] Done! Start took 1.175717ms
|
||||||
[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
|
|
||||||
|
@ -6,6 +6,7 @@ pub mod net;
|
|||||||
pub mod server;
|
pub mod server;
|
||||||
extern crate chrono;
|
extern crate chrono;
|
||||||
extern crate fern;
|
extern crate fern;
|
||||||
|
extern crate log;
|
||||||
|
|
||||||
use log::{debug, error, info, warn};
|
use log::{debug, error, info, warn};
|
||||||
use net::NetworkServer;
|
use net::NetworkServer;
|
||||||
|
@ -5,6 +5,7 @@ use log::{debug, error, info, warn};
|
|||||||
use packets::*;
|
use packets::*;
|
||||||
use std::net::{TcpListener, TcpStream, ToSocketAddrs};
|
use std::net::{TcpListener, TcpStream, ToSocketAddrs};
|
||||||
use std::sync::mpsc::{self, Receiver, Sender, TryRecvError};
|
use std::sync::mpsc::{self, Receiver, Sender, TryRecvError};
|
||||||
|
use serde_json::json;
|
||||||
|
|
||||||
pub struct NetworkServer {
|
pub struct NetworkServer {
|
||||||
pub clients: Vec<NetworkClient>,
|
pub clients: Vec<NetworkClient>,
|
||||||
@ -88,42 +89,55 @@ impl NetworkClient {
|
|||||||
logindisconnect.write(&mut self.stream).unwrap();
|
logindisconnect.write(&mut self.stream).unwrap();
|
||||||
self.state = NetworkClientState::Disconnected;
|
self.state = NetworkClientState::Disconnected;
|
||||||
}
|
}
|
||||||
println!("{:?}", handshake);
|
debug!("Got handshake: {:?}", handshake);
|
||||||
}
|
}
|
||||||
NetworkClientState::Status => {
|
NetworkClientState::Status => {
|
||||||
let (_packet_length, _packet_id) = read_packet_header(&mut self.stream).unwrap();
|
let (_packet_length, _packet_id) = read_packet_header(&mut self.stream).unwrap();
|
||||||
let statusrequest = StatusRequest::read(&mut self.stream).unwrap();
|
let statusrequest = StatusRequest::read(&mut self.stream).unwrap();
|
||||||
println!("{:?}", statusrequest);
|
debug!("Got status request: {:?}", statusrequest);
|
||||||
let mut statusresponse = StatusResponse::new();
|
let mut statusresponse = StatusResponse::new();
|
||||||
statusresponse.json_response = format!(
|
statusresponse.json_response = json!({
|
||||||
"{{\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}}",
|
"version": {
|
||||||
server_version = "1.8.9",
|
"name": "1.8.9",
|
||||||
server_protocol = 47,
|
"protocol": 47,
|
||||||
num_players = 5,
|
},
|
||||||
max_players = 100,
|
"players": {
|
||||||
server_description = "Hello world!"
|
"max": 100,
|
||||||
).into();
|
"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();
|
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 (_packet_length, _packet_id) = read_packet_header(&mut self.stream).unwrap();
|
||||||
let statusping = StatusPing::read(&mut self.stream).unwrap();
|
let statusping = StatusPing::read(&mut self.stream).unwrap();
|
||||||
println!("{:?}", statusping);
|
debug!("Got status ping: {:?}", statusping);
|
||||||
let mut statuspong = StatusPong::new();
|
let mut statuspong = StatusPong::new();
|
||||||
statuspong.payload = statusping.payload;
|
statuspong.payload = statusping.payload;
|
||||||
statuspong.write(&mut self.stream).unwrap();
|
statuspong.write(&mut self.stream).unwrap();
|
||||||
|
debug!("Sending status pong: {:?}", statuspong);
|
||||||
self.state = NetworkClientState::Disconnected;
|
self.state = NetworkClientState::Disconnected;
|
||||||
}
|
}
|
||||||
NetworkClientState::Login => {
|
NetworkClientState::Login => {
|
||||||
let (_packet_length, _packet_id) = read_packet_header(&mut self.stream).unwrap();
|
let (_packet_length, _packet_id) = read_packet_header(&mut self.stream).unwrap();
|
||||||
let loginstart = LoginStart::read(&mut self.stream).unwrap();
|
let loginstart = LoginStart::read(&mut self.stream).unwrap();
|
||||||
println!("{:?}", loginstart);
|
debug!("{:?}", loginstart);
|
||||||
// Offline mode skips encryption and compression.
|
// Offline mode skips encryption and compression.
|
||||||
let mut loginsuccess = LoginSuccess::new();
|
let mut loginsuccess = LoginSuccess::new();
|
||||||
// We're in offline mode, so this is a temporary uuid.
|
// We're in offline mode, so this is a temporary uuid.
|
||||||
loginsuccess.uuid = "00000000-0000-3000-0000-000000000000".into();
|
loginsuccess.uuid = "00000000-0000-3000-0000-000000000000".into();
|
||||||
loginsuccess.username = loginstart.player_name;
|
loginsuccess.username = loginstart.player_name;
|
||||||
loginsuccess.write(&mut self.stream).unwrap();
|
loginsuccess.write(&mut self.stream).unwrap();
|
||||||
println!("{:?}", loginsuccess);
|
debug!("{:?}", loginsuccess);
|
||||||
self.state = NetworkClientState::Play;
|
self.state = NetworkClientState::Play;
|
||||||
}
|
}
|
||||||
NetworkClientState::Play => {}
|
NetworkClientState::Play => {}
|
||||||
|
@ -59,7 +59,7 @@ pub struct StatusRequest {}
|
|||||||
impl Into<Vec<u8>> for StatusRequest {
|
impl Into<Vec<u8>> for StatusRequest {
|
||||||
fn into(self) -> Vec<u8> {
|
fn into(self) -> Vec<u8> {
|
||||||
let mut out = vec![];
|
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(&Into::<Vec<u8>>::into(MCVarInt::from(temp.len() as i32)));
|
||||||
out.extend_from_slice(&temp);
|
out.extend_from_slice(&temp);
|
||||||
out
|
out
|
||||||
@ -75,8 +75,8 @@ impl Packet for StatusRequest {
|
|||||||
fn new() -> Self {
|
fn new() -> Self {
|
||||||
StatusRequest {}
|
StatusRequest {}
|
||||||
}
|
}
|
||||||
fn read(t: &mut TcpStream) -> std::io::Result<Self> {
|
fn read(_t: &mut TcpStream) -> std::io::Result<Self> {
|
||||||
let mut statusrequest = StatusRequest::new();
|
let statusrequest = StatusRequest::new();
|
||||||
Ok(statusrequest)
|
Ok(statusrequest)
|
||||||
}
|
}
|
||||||
fn write(&self, t: &mut TcpStream) -> std::io::Result<()> {
|
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