From 2250859ff948e7bd622831127abe4a39a1929ddf Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 29 Sep 2025 19:20:33 +0200 Subject: [PATCH] Extract constants and add config loader + example appsettings for niom-webrtc; use STUN constant in media manager --- appsettings.example.json | 5 +++++ src/config.rs | 24 ++++++++++++++++++++++++ src/constants.rs | 4 ++++ src/main.rs | 10 ++++++---- src/utils/media_manager.rs | 11 ++++++----- 5 files changed, 45 insertions(+), 9 deletions(-) create mode 100644 appsettings.example.json create mode 100644 src/config.rs create mode 100644 src/constants.rs diff --git a/appsettings.example.json b/appsettings.example.json new file mode 100644 index 0000000..44cccc1 --- /dev/null +++ b/appsettings.example.json @@ -0,0 +1,5 @@ +{ + "server": { + "stun_server": "stun:stun.l.google.com:19302" + } +} diff --git a/src/config.rs b/src/config.rs new file mode 100644 index 0000000..6c7db5f --- /dev/null +++ b/src/config.rs @@ -0,0 +1,24 @@ +use serde::Deserialize; +use std::path::Path; + +#[derive(Debug, Deserialize, Clone)] +pub struct ServerOptions { + pub stun_server: String, +} + +#[derive(Debug, Deserialize, Clone)] +pub struct Config { + pub server: ServerOptions, +} + +impl Config { + pub fn from_file>(p: P) -> Result> { + let s = std::fs::read_to_string(p)?; + let cfg: Config = serde_json::from_str(&s)?; + Ok(cfg) + } + + pub fn load_default() -> Result> { + Self::from_file("appsettings.json") + } +} diff --git a/src/constants.rs b/src/constants.rs new file mode 100644 index 0000000..dfbcc7f --- /dev/null +++ b/src/constants.rs @@ -0,0 +1,4 @@ +// Central constants for niom-webrtc +pub const DEFAULT_STUN_SERVER: &str = "stun:stun.l.google.com:19302"; +pub const ASSET_FAVICON: &str = "/assets/favicon.ico"; +pub const ASSET_MAIN_CSS: &str = "/assets/main.css"; diff --git a/src/main.rs b/src/main.rs index efdd60f..872fe51 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,6 +3,8 @@ mod components; mod models; mod utils; +mod constants; +mod config; use dioxus::prelude::*; use log::Level; @@ -30,10 +32,10 @@ fn App() -> Element { #[component] pub fn Content() -> Element { - let mut peer_id = use_signal(|| "peer-loading...".to_string()); - let mut remote_id = use_signal(|| String::new()); - let mut connected = use_signal(|| false); - let mut websocket = use_signal(|| None::); + let peer_id = use_signal(|| "peer-loading...".to_string()); + let remote_id = use_signal(|| String::new()); + let connected = use_signal(|| false); + let websocket = use_signal(|| None::); let initiator_connection = use_signal(|| None::); let responder_connection = use_signal(|| None::); // globaler Signal für den lokal freigegebenen MediaStream (Mikrofon) diff --git a/src/utils/media_manager.rs b/src/utils/media_manager.rs index 072931a..ddea916 100644 --- a/src/utils/media_manager.rs +++ b/src/utils/media_manager.rs @@ -23,9 +23,10 @@ impl MediaManager { } pub fn create_peer_connection() -> Result { - let ice_server = RtcIceServer::new(); - let urls = js_sys::Array::new(); - urls.push(&JsValue::from_str("stun:stun.l.google.com:19302")); + let ice_server = RtcIceServer::new(); + let urls = js_sys::Array::new(); + // Use centralized default STUN server constant + urls.push(&JsValue::from_str(crate::constants::DEFAULT_STUN_SERVER)); ice_server.set_urls(&urls.into()); let config = RtcConfiguration::new(); let servers = js_sys::Array::new(); @@ -51,7 +52,7 @@ impl MediaManager { .ok_or_else(|| "SDP field was not a string".to_string())?; // 3. Init-Objekt bauen und SDP setzen - let mut init = RtcSessionDescriptionInit::new(RtcSdpType::Offer); + let init = RtcSessionDescriptionInit::new(RtcSdpType::Offer); init.set_sdp(&sdp); // 4. Local Description setzen @@ -112,7 +113,7 @@ impl MediaManager { } } - let mut init = RtcSessionDescriptionInit::new(RtcSdpType::Answer); + let init = RtcSessionDescriptionInit::new(RtcSdpType::Answer); init.set_sdp(answer_sdp); JsFuture::from(pc.set_remote_description(&init))