aboutsummaryrefslogtreecommitdiff
path: root/client-native-lib/src/lib.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2022-09-14 20:23:40 +0200
committermetamuffin <metamuffin@disroot.org>2022-09-14 20:23:40 +0200
commit9b6b92d0cec58c3054c389f73fc86b96b79c17d1 (patch)
tree8077c8e6fb00179ca31cd2e6822bf0315419bac7 /client-native-lib/src/lib.rs
parentc752fe962df841b0cb811b09f155568735e7380c (diff)
downloadkeks-meet-9b6b92d0cec58c3054c389f73fc86b96b79c17d1.tar
keks-meet-9b6b92d0cec58c3054c389f73fc86b96b79c17d1.tar.bz2
keks-meet-9b6b92d0cec58c3054c389f73fc86b96b79c17d1.tar.zst
extract lib
Diffstat (limited to 'client-native-lib/src/lib.rs')
-rw-r--r--client-native-lib/src/lib.rs62
1 files changed, 62 insertions, 0 deletions
diff --git a/client-native-lib/src/lib.rs b/client-native-lib/src/lib.rs
new file mode 100644
index 0000000..118d962
--- /dev/null
+++ b/client-native-lib/src/lib.rs
@@ -0,0 +1,62 @@
+#![feature(async_closure)]
+#![feature(box_syntax)]
+
+use log::debug;
+use signaling::signaling_connect;
+use state::State;
+use std::sync::Arc;
+use tokio::sync::RwLock;
+use webrtc::{
+ api::{
+ interceptor_registry::register_default_interceptors, media_engine::MediaEngine, APIBuilder,
+ },
+ interceptor::registry::Registry,
+};
+
+pub mod crypto;
+pub mod peer;
+pub mod protocol;
+pub mod signaling;
+pub mod state;
+
+pub struct Config {
+ pub signaling_host: String,
+ pub secret: String,
+}
+
+pub async fn connect(config: Config) -> Arc<State> {
+ let (sender, mut recv) = signaling_connect(&config.signaling_host, &config.secret).await;
+
+ let key = crypto::Key::derive(&config.secret);
+
+ 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()
+ .with_media_engine(media_engine)
+ .with_interceptor_registry(registry)
+ .build();
+
+ let state = Arc::new(State {
+ peers: Default::default(),
+ key,
+ api,
+ my_id: RwLock::new(None),
+ sender,
+ config,
+ });
+
+ {
+ 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
+}