67 lines
2.7 KiB
Rust
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())
|
|
}
|