diff options
Diffstat (limited to 'client-native-lib/src/lib.rs')
-rw-r--r-- | client-native-lib/src/lib.rs | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/client-native-lib/src/lib.rs b/client-native-lib/src/lib.rs index 118d962..68dcecb 100644 --- a/client-native-lib/src/lib.rs +++ b/client-native-lib/src/lib.rs @@ -3,9 +3,9 @@ use log::debug; use signaling::signaling_connect; -use state::State; -use std::sync::Arc; -use tokio::sync::RwLock; +use state::{HasPeer, PeerInit, State}; +use std::{marker::Sync, sync::Arc}; +use tokio::sync::{mpsc::unbounded_channel, RwLock}; use webrtc::{ api::{ interceptor_registry::register_default_interceptors, media_engine::MediaEngine, APIBuilder, @@ -19,12 +19,18 @@ pub mod protocol; pub mod signaling; pub mod state; +pub use webrtc; + pub struct Config { pub signaling_host: String, pub secret: String, } -pub async fn connect(config: Config) -> Arc<State> { +pub async fn connect<I, P>(config: Config, sup: Arc<I>) -> Arc<State<P, I>> +where + I: PeerInit<P> + Sync + std::marker::Send + 'static, + P: HasPeer + Sync + std::marker::Send + 'static, +{ let (sender, mut recv) = signaling_connect(&config.signaling_host, &config.secret).await; let key = crypto::Key::derive(&config.secret); @@ -38,6 +44,7 @@ pub async fn connect(config: Config) -> Arc<State> { .with_interceptor_registry(registry) .build(); + let (relay_tx, mut relay_rx) = unbounded_channel(); let state = Arc::new(State { peers: Default::default(), key, @@ -45,12 +52,24 @@ pub async fn connect(config: Config) -> Arc<State> { my_id: RwLock::new(None), sender, config, + relay_tx, + sup, }); { 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(); |