diff options
Diffstat (limited to 'client-native-lib/src/lib.rs')
-rw-r--r-- | client-native-lib/src/lib.rs | 64 |
1 files changed, 18 insertions, 46 deletions
diff --git a/client-native-lib/src/lib.rs b/client-native-lib/src/lib.rs index 25d6e57..6ffbee3 100644 --- a/client-native-lib/src/lib.rs +++ b/client-native-lib/src/lib.rs @@ -7,19 +7,13 @@ #![feature(box_syntax)] #![feature(async_fn_in_trait)] -use log::debug; -use protocol::ProvideInfo; -use signaling::signaling_connect; use state::State; -use std::sync::Arc; -use tokio::sync::{mpsc::unbounded_channel, RwLock}; +use tokio::sync::RwLock; use webrtc::{ api::{ interceptor_registry::register_default_interceptors, media_engine::MediaEngine, APIBuilder, }, - data_channel::RTCDataChannel, interceptor::registry::Registry, - track::{track_local::TrackLocal, track_remote::TrackRemote}, }; pub mod crypto; @@ -35,51 +29,29 @@ pub struct Config { pub secret: String, } -pub async fn connect(config: Config) -> Arc<State> { - let (sender, mut recv) = signaling_connect(&config.signaling_uri, &config.secret).await; +impl State { + pub async fn new(config: Config) -> Self { + let conn = signaling::SignalingConnection::new(&config.signaling_uri, &config.secret).await; + let key = crypto::Key::derive(&config.secret); - let key = crypto::Key::derive(&config.secret); + Self { + api: build_api(), + my_id: RwLock::new(None), + peers: Default::default(), + config, + conn, + key, + } + } +} +fn build_api() -> webrtc::api::API { let mut media_engine = MediaEngine::default(); media_engine.register_default_codecs().unwrap(); let mut registry = Registry::new(); registry = register_default_interceptors(registry, &mut media_engine).unwrap(); - let api = APIBuilder::new() + APIBuilder::new() .with_media_engine(media_engine) .with_interceptor_registry(registry) - .build(); - - let (relay_tx, mut relay_rx) = unbounded_channel(); - let state = Arc::new(State { - peers: Default::default(), - key, - api, - my_id: RwLock::new(None), - sender, - config, - relay_tx, - }); - - { - let state = state.clone(); - tokio::spawn(async move { - debug!("receiving packets now"); - while let Some((r, p)) = relay_rx.recv().await { - let state = state.clone(); - state.send_relay(r, p).await - } - }); - } - { - let state = state.clone(); - tokio::spawn(async move { - debug!("receiving packets now"); - while let Some(packet) = recv.recv().await { - debug!("{packet:?}"); - let state = state.clone(); - state.on_message(packet).await - } - }); - } - state + .build() } |