summaryrefslogtreecommitdiff
path: root/client-native-lib/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'client-native-lib/src/lib.rs')
-rw-r--r--client-native-lib/src/lib.rs64
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()
}