aboutsummaryrefslogtreecommitdiff
path: root/server/src/server.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/server.rs')
-rw-r--r--server/src/server.rs65
1 files changed, 42 insertions, 23 deletions
diff --git a/server/src/server.rs b/server/src/server.rs
index e3bcd63d..66553640 100644
--- a/server/src/server.rs
+++ b/server/src/server.rs
@@ -59,7 +59,13 @@ pub enum AnnounceState {
Done,
}
+pub struct ServerConfig {
+ pub inactivity_kick_timeout: f32,
+ pub lobby: String,
+}
+
pub struct Server {
+ pub config: ServerConfig,
pub tick_perf: (Duration, usize),
pub broadcast: broadcast::Sender<PacketC>,
pub connections: HashMap<ConnectionID, ConnectionData>,
@@ -79,6 +85,41 @@ pub struct Server {
pub editor_address: Option<String>,
}
+impl Server {
+ pub fn new(
+ data_path: PathBuf,
+ config: ServerConfig,
+ tx: broadcast::Sender<PacketC>,
+ ) -> Result<Self> {
+ Ok(Self {
+ config,
+ game: Game::default(),
+ tick_perf: (Duration::ZERO, 0),
+ index: DataIndex::new(data_path).context("Failed to load data index")?,
+ broadcast: tx,
+ announce_state: AnnounceState::Done,
+ packet_out: VecDeque::new(),
+ connections: HashMap::new(),
+ data: Serverdata::default().into(),
+ entities: Vec::new(),
+ score_changed: false,
+ packet_loopback: VecDeque::new(),
+ last_movement_update: HashMap::default(),
+ scoreboard: ScoreboardStore::load().context("Failed to load scoreboards")?,
+ editor_address: None,
+ paused: false,
+ })
+ }
+}
+impl Default for ServerConfig {
+ fn default() -> Self {
+ Self {
+ inactivity_kick_timeout: 60.,
+ lobby: "lobby".to_string(),
+ }
+ }
+}
+
pub trait GameServerExt {
fn unload(&mut self, packet_out: &mut VecDeque<PacketC>);
fn load(
@@ -313,28 +354,6 @@ impl GameServerExt for Game {
}
impl Server {
- pub fn new(data_path: PathBuf, tx: broadcast::Sender<PacketC>) -> Result<Self> {
- Ok(Self {
- game: Game::default(),
- tick_perf: (Duration::ZERO, 0),
- index: DataIndex::new(data_path).context("Failed to load data index")?,
- broadcast: tx,
- announce_state: AnnounceState::Done,
- packet_out: VecDeque::new(),
- connections: HashMap::new(),
- data: Serverdata::default().into(),
- entities: Vec::new(),
- score_changed: false,
- packet_loopback: VecDeque::new(),
- last_movement_update: HashMap::default(),
- scoreboard: ScoreboardStore::load().context("Failed to load scoreboards")?,
- editor_address: None,
- paused: false,
- })
- }
-}
-
-impl Server {
pub fn load(
&mut self,
(gamedata, serverdata): (Gamedata, Serverdata),
@@ -778,7 +797,7 @@ impl Server {
.collect(),
self.game.score.clone(),
);
- Some(("lobby".to_string(), None))
+ Some((self.config.lobby.to_string(), None))
} else {
None
}