From 9b6b92d0cec58c3054c389f73fc86b96b79c17d1 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Wed, 14 Sep 2022 20:23:40 +0200 Subject: extract lib --- client-native-lib/src/lib.rs | 62 ++++++++++++++++++++++++++++++ client-native-lib/src/main.rs | 85 ------------------------------------------ client-native-lib/src/peer.rs | 7 ++-- client-native-lib/src/state.rs | 6 +-- 4 files changed, 67 insertions(+), 93 deletions(-) create mode 100644 client-native-lib/src/lib.rs delete mode 100644 client-native-lib/src/main.rs (limited to 'client-native-lib/src') 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 { + 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 +} diff --git a/client-native-lib/src/main.rs b/client-native-lib/src/main.rs deleted file mode 100644 index f2b79e2..0000000 --- a/client-native-lib/src/main.rs +++ /dev/null @@ -1,85 +0,0 @@ -#![feature(async_closure)] -#![feature(box_syntax)] - -use clap::{Parser, Subcommand}; -use log::{debug, error}; -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; - -fn main() { - env_logger::init_from_env("LOG"); - tokio::runtime::Builder::new_multi_thread() - .enable_all() - .build() - .unwrap() - .block_on(run()) -} - -#[derive(Parser)] -pub struct Args { - #[clap(long, default_value = "meet.metamuffin.org")] - signaling_host: String, - #[clap(short, long)] - secret: String, - #[clap(subcommand)] - action: Action, -} -#[derive(Subcommand)] -pub enum Action { - Send {}, - Receive {}, -} - -async fn run() { - let args = Args::parse(); - let (sender, mut recv) = signaling_connect(&args.signaling_host, &args.secret).await; - - let key = crypto::Key::derive(&args.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, - args, - }); - - { - 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 - } - }); - } - - tokio::signal::ctrl_c().await.unwrap(); - error!("interrupt received, exiting"); -} diff --git a/client-native-lib/src/peer.rs b/client-native-lib/src/peer.rs index 8402fc6..64eb641 100644 --- a/client-native-lib/src/peer.rs +++ b/client-native-lib/src/peer.rs @@ -12,7 +12,6 @@ use webrtc::{ use crate::{ protocol::{self, RTCSessionDescriptionInit, RelayMessage}, state::State, - Action, }; pub struct Peer { @@ -83,9 +82,9 @@ impl Peer { .await; } - if let Action::Send { .. } = &peer.state.args.action { - peer.start_transfer().await - } + // if let Action::Send { .. } = &peer.state.args.action { + // peer.start_transfer().await + // } peer } diff --git a/client-native-lib/src/state.rs b/client-native-lib/src/state.rs index baea90a..57c4b29 100644 --- a/client-native-lib/src/state.rs +++ b/client-native-lib/src/state.rs @@ -7,12 +7,11 @@ use webrtc::api::API; use crate::{ crypto::Key, peer::Peer, - protocol::{self, ClientboundPacket, RelayMessage, RelayMessageWrapper, ServerboundPacket}, - Action, Args, + protocol::{self, ClientboundPacket, RelayMessage, RelayMessageWrapper, ServerboundPacket}, Config, }; pub struct State { - pub args: Args, + pub config: Config, pub api: API, pub key: Key, pub my_id: RwLock>, @@ -40,7 +39,6 @@ impl State { .write() .await .insert(id, Peer::create(self.clone(), id).await); - if let Action::Send { .. } = &self.args.action {} } } protocol::ClientboundPacket::ClientLeave { id: _ } => {} -- cgit v1.2.3-70-g09d2