2025-04-11 04:58:16 +03:00
|
|
|
use leptos::logging::log;
|
|
|
|
use wasm_bindgen_futures::JsFuture;
|
|
|
|
use web_sys::{
|
|
|
|
RtcConfiguration, RtcIceServer, RtcPeerConnection, RtcSessionDescriptionInit,
|
|
|
|
js_sys::{Array, Reflect},
|
|
|
|
wasm_bindgen::{JsCast, JsValue},
|
|
|
|
};
|
|
|
|
|
2025-04-13 04:55:33 +03:00
|
|
|
use crate::signal::send_offer;
|
|
|
|
|
|
|
|
pub async fn offer(username: String) {
|
2025-04-11 04:58:16 +03:00
|
|
|
let ice_server_addresses = vec![JsValue::from("stun:stun.l.google.com:19302")]
|
|
|
|
.into_iter()
|
|
|
|
.collect::<Array>();
|
|
|
|
let ice_server = RtcIceServer::new();
|
|
|
|
ice_server.set_urls(&JsValue::from(ice_server_addresses));
|
|
|
|
let ice_servers = vec![ice_server].into_iter().collect::<Array>();
|
|
|
|
let rtc_configuration = RtcConfiguration::new();
|
|
|
|
rtc_configuration.set_ice_servers(&ice_servers);
|
|
|
|
let peer_connection = RtcPeerConnection::new_with_configuration(&rtc_configuration).unwrap();
|
|
|
|
let peer_connection_create_offer_promise = peer_connection.create_offer();
|
|
|
|
let rtc_session_offer = JsFuture::from(peer_connection_create_offer_promise)
|
|
|
|
.await
|
|
|
|
.unwrap();
|
|
|
|
log!("{:#?}", rtc_session_offer);
|
|
|
|
let rtc_session_offer = rtc_session_offer
|
|
|
|
.as_ref()
|
|
|
|
.unchecked_ref::<RtcSessionDescriptionInit>();
|
|
|
|
log!("{:#?}", rtc_session_offer);
|
|
|
|
JsFuture::from(peer_connection.set_local_description(rtc_session_offer))
|
|
|
|
.await
|
|
|
|
.unwrap();
|
|
|
|
let rtc_session_offer = Reflect::get(&rtc_session_offer, &JsValue::from_str("sdp"))
|
|
|
|
.unwrap()
|
|
|
|
.as_string()
|
|
|
|
.unwrap();
|
|
|
|
log!("{}", rtc_session_offer);
|
2025-04-14 04:58:44 +03:00
|
|
|
let data = rtc_session_offer;
|
2025-04-13 04:55:33 +03:00
|
|
|
|
2025-04-14 16:13:42 +03:00
|
|
|
send_offer(&username, &data).await.unwrap();
|
2025-04-11 04:58:16 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
pub async fn answer() {}
|