scroll.server/crates/gateway/src/config.rs
WiseDev d25a6de423 move all crates into crates/, glob members
pure move, no code touched. readme and protocol.md paths fixed up.
2026-08-23 08:15:45 +03:00

67 lines
2.7 KiB
Rust

use std::time::Duration;
#[derive(Debug, Clone)]
pub struct GatewayConfig {
pub listen: String,
pub auth_endpoint: String,
pub game_endpoint: String,
pub server_major_version: i32,
pub server_minor_version: i32,
pub server_build: i32,
pub content_version: i32,
pub server_environment: String,
pub facebook_app_id: Option<String>,
pub startup_cooldown_seconds: i32,
pub read_timeout: Duration,
pub max_payload_len: usize,
}
impl Default for GatewayConfig {
fn default() -> Self {
Self {
listen: "0.0.0.0:9339".to_owned(),
auth_endpoint: "127.0.0.1:9401".to_owned(),
game_endpoint: "127.0.0.1:9402".to_owned(),
server_major_version: 2,
server_minor_version: 0,
server_build: 1306,
content_version: 8,
server_environment: "prod".to_owned(),
facebook_app_id: None,
startup_cooldown_seconds: 0,
read_timeout: Duration::from_secs(90),
max_payload_len: 1024 * 1024,
}
}
}
impl GatewayConfig {
pub fn from_env() -> Self {
let defaults = Self::default();
Self {
listen: env_string("SCROLL_GATEWAY_LISTEN").unwrap_or(defaults.listen),
auth_endpoint: env_string("SCROLL_AUTH_ENDPOINT").unwrap_or(defaults.auth_endpoint),
game_endpoint: env_string("SCROLL_GAME_ENDPOINT").unwrap_or(defaults.game_endpoint),
server_major_version: env_i32("SCROLL_SERVER_MAJOR")
.unwrap_or(defaults.server_major_version),
server_minor_version: env_i32("SCROLL_SERVER_MINOR")
.unwrap_or(defaults.server_minor_version),
server_build: env_i32("SCROLL_SERVER_BUILD").unwrap_or(defaults.server_build),
content_version: env_i32("SCROLL_CONTENT_VERSION").unwrap_or(defaults.content_version),
server_environment: env_string("SCROLL_ENVIRONMENT")
.unwrap_or(defaults.server_environment),
facebook_app_id: env_string("SCROLL_FACEBOOK_APP_ID"),
startup_cooldown_seconds: env_i32("SCROLL_STARTUP_COOLDOWN")
.unwrap_or(defaults.startup_cooldown_seconds),
read_timeout: env_i32("SCROLL_READ_TIMEOUT_SECONDS")
.map(|seconds| Duration::from_secs(seconds.max(1) as u64))
.unwrap_or(defaults.read_timeout),
max_payload_len: env_i32("SCROLL_MAX_PAYLOAD")
.map(|value| value.max(1024) as usize)
.unwrap_or(defaults.max_payload_len),
}
}
}
fn env_string(key: &str) -> Option<String> {
std::env::var(key).ok().filter(|value| !value.is_empty())
}
fn env_i32(key: &str) -> Option<i32> {
env_string(key).and_then(|value| value.parse().ok())
}