diff options
Diffstat (limited to 'server/src/server.rs')
| -rw-r--r-- | server/src/server.rs | 65 |
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 } |