feat: ✨ web and websocket server
This commit is contained in:
parent
1e27b9280e
commit
64e89b006a
4 changed files with 49 additions and 26 deletions
|
@ -1,5 +1,3 @@
|
|||
use std::sync::Arc;
|
||||
|
||||
use leptos::{
|
||||
IntoView,
|
||||
html::{ElementChild, button, label},
|
||||
|
@ -7,7 +5,6 @@ use leptos::{
|
|||
prelude::{OnAttribute, Read, Show, ShowProps, ToChildren},
|
||||
server::LocalResource,
|
||||
};
|
||||
use wasm_bindgen_futures::spawn_local;
|
||||
|
||||
use crate::{media::audio, webrtc::WebRTC};
|
||||
|
||||
|
@ -21,9 +18,6 @@ pub fn app() -> impl IntoView {
|
|||
let audio_stream = audio_stream.as_deref().unwrap().clone();
|
||||
|
||||
let webrtc = WebRTC::new(Some(audio_stream), None, None).unwrap();
|
||||
let webrtc = Arc::new(webrtc);
|
||||
let webrtc_init = webrtc.clone();
|
||||
spawn_local(async move { webrtc_init.init().await });
|
||||
|
||||
let webrtc_offer = webrtc.clone();
|
||||
let offer_button = button()
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
use std::sync::Arc;
|
||||
|
||||
use leptos::logging::log;
|
||||
use protocol::Error;
|
||||
use wasm_bindgen_futures::JsFuture;
|
||||
use wasm_bindgen_futures::{JsFuture, spawn_local};
|
||||
use web_sys::{
|
||||
MediaStream, RtcConfiguration, RtcIceCandidate, RtcIceCandidateInit, RtcIceServer,
|
||||
RtcPeerConnection, RtcPeerConnectionIceEvent, RtcPeerConnectionState, RtcSdpType,
|
||||
|
@ -26,7 +28,7 @@ impl WebRTC {
|
|||
audio_stream: Option<MediaStream>,
|
||||
video_stream: Option<MediaStream>,
|
||||
screen_stream: Option<MediaStream>,
|
||||
) -> Result<Self, Error> {
|
||||
) -> Result<Arc<Self>, Error> {
|
||||
let ice_server_addresses = vec![JsValue::from("stun:stun.l.google.com:19302")]
|
||||
.into_iter()
|
||||
.collect::<Array>();
|
||||
|
@ -58,12 +60,16 @@ impl WebRTC {
|
|||
video_stream,
|
||||
screen_stream,
|
||||
};
|
||||
let webrtc = Arc::new(webrtc);
|
||||
|
||||
webrtc.add_streams();
|
||||
let webrtc_ice_candidate_receiver = webrtc.clone();
|
||||
spawn_local(async move { webrtc_ice_candidate_receiver.ice_candidate_receiver().await });
|
||||
|
||||
Ok(webrtc)
|
||||
}
|
||||
|
||||
pub async fn init(&self) {
|
||||
async fn ice_candidate_receiver(&self) {
|
||||
while let Ok(received_ice_candidate) = receive_ice_candidate().await {
|
||||
let received_ice_candidate =
|
||||
RtcIceCandidateInit::new(&received_ice_candidate.get_data());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue