This commit is contained in:
zp3x 2024-07-30 18:18:45 +02:00
parent f5d6909648
commit 2c3e671201
5 changed files with 40 additions and 67 deletions

View File

@ -1,4 +1,3 @@
use crate::protocol::{ use crate::protocol::{
client::{ client::{
config::CFinishConfig, config::CFinishConfig,
@ -43,7 +42,7 @@ impl ClientPacketProcessor for Client {
dbg!("sending status"); dbg!("sending status");
dbg!("test first"); dbg!("test first");
let guard = self.server.try_lock().unwrap(); let guard = self.server.try_lock().unwrap();
dbg!("test"); dbg!("test");

View File

@ -1,22 +1,17 @@
use std::{path::Path}; use std::path::Path;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use crate::server::Difficulty; use crate::server::Difficulty;
#[derive(Deserialize, Serialize)] #[derive(Deserialize, Serialize)]
pub struct AdvancedConfiguration { pub struct AdvancedConfiguration {
liquid_physics: bool, liquid_physics: bool,
encryption: bool, encryption: bool,
} }
impl Default for AdvancedConfiguration { impl Default for AdvancedConfiguration {
fn default() -> Self { fn default() -> Self {
Self { Self {
liquid_physics: true, liquid_physics: true,
encryption: true, encryption: true,
@ -27,7 +22,7 @@ impl Default for AdvancedConfiguration {
#[derive(Deserialize, Serialize)] #[derive(Deserialize, Serialize)]
pub struct BasicConfiguration { pub struct BasicConfiguration {
pub server_address: String, pub server_address: String,
pub server_port: u16, pub server_port: u16,
pub seed: String, pub seed: String,
pub max_plyers: i32, pub max_plyers: i32,
pub view_distances: u8, pub view_distances: u8,
@ -44,7 +39,6 @@ pub struct BasicConfiguration {
impl Default for BasicConfiguration { impl Default for BasicConfiguration {
fn default() -> Self { fn default() -> Self {
Self { Self {
server_address: "127.0.0.1".to_string(), server_address: "127.0.0.1".to_string(),
server_port: 25565, server_port: 25565,
@ -62,55 +56,38 @@ impl Default for BasicConfiguration {
motd: "A Blazing fast Pumpkin Server!".to_string(), motd: "A Blazing fast Pumpkin Server!".to_string(),
} }
} }
} }
impl AdvancedConfiguration { impl AdvancedConfiguration {
pub fn load<P: AsRef<Path>>(path: P) -> AdvancedConfiguration { pub fn load<P: AsRef<Path>>(path: P) -> AdvancedConfiguration {
if path.as_ref().exists() { if path.as_ref().exists() {
let toml = std::fs::read_to_string(path).expect("Couldn't read configuration"); let toml = std::fs::read_to_string(path).expect("Couldn't read configuration");
let configuration: AdvancedConfiguration = toml::from_str(toml.as_str()).expect("Couldn't parse"); let configuration: AdvancedConfiguration =
configuration toml::from_str(toml.as_str()).expect("Couldn't parse");
} else { configuration
let config = AdvancedConfiguration::default(); } else {
let toml = toml::to_string(&config).expect("Couldn't create toml!"); let config = AdvancedConfiguration::default();
let toml = toml::to_string(&config).expect("Couldn't create toml!");
std::fs::write(path, toml).expect("Couldn't save configuration");
config std::fs::write(path, toml).expect("Couldn't save configuration");
} config
}
} }
} }
impl BasicConfiguration { impl BasicConfiguration {
pub fn load<P: AsRef<Path>>(path: P) -> BasicConfiguration { pub fn load<P: AsRef<Path>>(path: P) -> BasicConfiguration {
if path.as_ref().exists() { if path.as_ref().exists() {
let toml = std::fs::read_to_string(path).expect("Couldn't read configuration"); let toml = std::fs::read_to_string(path).expect("Couldn't read configuration");
let configuration: BasicConfiguration = toml::from_str(toml.as_str()).expect("Couldn't parse"); let configuration: BasicConfiguration =
configuration toml::from_str(toml.as_str()).expect("Couldn't parse");
} else { configuration
let config = BasicConfiguration::default(); } else {
let toml = toml::to_string(&config).expect("Couldn't create toml!"); let config = BasicConfiguration::default();
let toml = toml::to_string(&config).expect("Couldn't create toml!");
std::fs::write(path, toml).expect("Couldn't save configuration");
config std::fs::write(path, toml).expect("Couldn't save configuration");
} config
}
} }
} }

View File

@ -1,4 +1,3 @@
use crate::{ use crate::{
client::Client, client::Client,
protocol::{ClientPacket, RawPacket, VarInt}, protocol::{ClientPacket, RawPacket, VarInt},

View File

@ -2,11 +2,9 @@ use mio::net::TcpListener;
use mio::{Events, Interest, Poll, Token}; use mio::{Events, Interest, Poll, Token};
use std::io::{self}; use std::io::{self};
use std::{ use std::sync::{Arc, Mutex};
sync::{Arc, Mutex}
};
use client::{interrupted}; use client::interrupted;
use configuration::BasicConfiguration; use configuration::BasicConfiguration;
use server::Server; use server::Server;
@ -14,23 +12,19 @@ use server::Server;
const SERVER: Token = Token(0); const SERVER: Token = Token(0);
pub mod client; pub mod client;
pub mod configuration;
pub mod entity; pub mod entity;
pub mod protocol; pub mod protocol;
pub mod server; pub mod server;
pub mod util; pub mod util;
pub mod configuration;
#[cfg(not(target_os = "wasi"))] #[cfg(not(target_os = "wasi"))]
fn main() -> io::Result<()> { fn main() -> io::Result<()> {
use configuration::AdvancedConfiguration; use configuration::AdvancedConfiguration;
let basic_config = BasicConfiguration::load("configuration.toml"); let basic_config = BasicConfiguration::load("configuration.toml");
let advanced_configuration = AdvancedConfiguration::load("features.toml"); let advanced_configuration = AdvancedConfiguration::load("features.toml");
simple_logger::SimpleLogger::new().init().unwrap(); simple_logger::SimpleLogger::new().init().unwrap();
@ -53,7 +47,7 @@ fn main() -> io::Result<()> {
log::info!("You now can connect to the server"); log::info!("You now can connect to the server");
let server = Arc::new(Mutex::new(Server::new())); let server = Arc::new(Mutex::new(Server::new()));
loop { loop {
if let Err(err) = poll.poll(&mut events, None) { if let Err(err) = poll.poll(&mut events, None) {
if interrupted(&err) { if interrupted(&err) {
@ -96,10 +90,12 @@ fn main() -> io::Result<()> {
let mut guard = server.try_lock().unwrap(); let mut guard = server.try_lock().unwrap();
guard.new_client(rc_server, connection, token); guard.new_client(rc_server, connection, token);
}, },
token => { token => {
// Maybe received an event for a TCP connection. // Maybe received an event for a TCP connection.
let done = if let Some(client) = server.try_lock().unwrap().connections.get_mut(&token) { let done = if let Some(client) =
server.try_lock().unwrap().connections.get_mut(&token)
{
client.poll(poll.registry(), event).unwrap(); client.poll(poll.registry(), event).unwrap();
client.closed client.closed
} else { } else {
@ -107,7 +103,9 @@ fn main() -> io::Result<()> {
false false
}; };
if done { if done {
if let Some(mut client) = server.try_lock().unwrap().connections.remove(&token) { if let Some(mut client) =
server.try_lock().unwrap().connections.remove(&token)
{
poll.registry().deregister(&mut client.connection)?; poll.registry().deregister(&mut client.connection)?;
} }
} }

View File

@ -91,7 +91,7 @@ pub type VarLong = i64;
pub enum ConnectionState { pub enum ConnectionState {
HandShake, HandShake,
Status, Status,
Login, Login,
Transfer, Transfer,
Config, Config,
Play, Play,