feat: ✨ token extractor middleware
This commit is contained in:
parent
96199f71ef
commit
4f874d8789
9 changed files with 247 additions and 32 deletions
|
@ -21,8 +21,11 @@ web-sys = { version = "0.3.77", features = [
|
|||
"MediaTrackConstraintSet",
|
||||
"Navigator",
|
||||
"RtcConfiguration",
|
||||
"RtcIceCandidate",
|
||||
"RtcIceCandidateInit",
|
||||
"RtcIceServer",
|
||||
"RtcPeerConnection",
|
||||
"RtcPeerConnectionState",
|
||||
"RtcSdpType",
|
||||
"RtcSessionDescription",
|
||||
"RtcSessionDescriptionInit",
|
||||
|
|
|
@ -48,18 +48,25 @@ pub async fn offer(username: String) {
|
|||
if let Err(err_val) = send_offer(&username, &data).await {
|
||||
log!("Error: Send Offer | {}", err_val)
|
||||
}
|
||||
|
||||
for _ in 0..10 {
|
||||
match receive_answer(&username).await {
|
||||
Ok(received_answer) => {
|
||||
log!("{:#?}", received_answer);
|
||||
Ok(received_user_and_signal_answer) => {
|
||||
log!("{:#?}", received_user_and_signal_answer);
|
||||
let peer_connection_session_answer =
|
||||
RtcSessionDescriptionInit::new(RtcSdpType::Answer);
|
||||
peer_connection_session_answer.set_sdp(received_answer.get_data().as_str());
|
||||
peer_connection_session_answer
|
||||
.set_sdp(received_user_and_signal_answer.signal.get_data().as_str());
|
||||
JsFuture::from(
|
||||
peer_connection.set_remote_description(&peer_connection_session_answer),
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
for _ in 0..100 {
|
||||
log!("{:#?}", peer_connection.connection_state());
|
||||
sleep(1000).await;
|
||||
}
|
||||
break;
|
||||
}
|
||||
Err(err_val) => log!("Error: Receive Answer | {}", err_val),
|
||||
|
@ -71,11 +78,12 @@ pub async fn offer(username: String) {
|
|||
pub async fn answer(username: String) {
|
||||
for _ in 0..10 {
|
||||
match receive_offer(&username).await {
|
||||
Ok(offer) => {
|
||||
Ok(received_user_and_signal_offer) => {
|
||||
let peer_connection = create_peer_connection_with_configuration().await;
|
||||
let peer_connection_session_offer =
|
||||
RtcSessionDescriptionInit::new(RtcSdpType::Offer);
|
||||
peer_connection_session_offer.set_sdp(offer.get_data().as_str());
|
||||
peer_connection_session_offer
|
||||
.set_sdp(received_user_and_signal_offer.signal.get_data().as_str());
|
||||
JsFuture::from(
|
||||
peer_connection.set_remote_description(&peer_connection_session_offer),
|
||||
)
|
||||
|
@ -99,6 +107,11 @@ pub async fn answer(username: String) {
|
|||
let data = session_answer;
|
||||
|
||||
send_answer(&username, &data).await.unwrap();
|
||||
|
||||
for _ in 0..100 {
|
||||
log!("{:#?}", peer_connection.connection_state());
|
||||
sleep(1000).await;
|
||||
}
|
||||
break;
|
||||
}
|
||||
Err(err_val) => log!("Error: Receive Offer | {}", err_val),
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
use std::sync::LazyLock;
|
||||
|
||||
use leptos::logging::log;
|
||||
use protocol::{Signal, SignalType};
|
||||
use protocol::{Signal, SignalType, UserAndSignal};
|
||||
use reqwest::{Response, header::HeaderMap};
|
||||
use serde_json::{Value, json};
|
||||
|
||||
const SIGNALLING_ADDRESS: &str = "http://127.0.0.1:4546";
|
||||
const SIGNALLING_ADDRESS: &str = "http://192.168.1.3:4546";
|
||||
static REQUEST_CLIENT: LazyLock<reqwest::Client> = LazyLock::new(|| reqwest::Client::new());
|
||||
|
||||
async fn create_headers(headers: Vec<(&'static str, String)>) -> HeaderMap {
|
||||
|
@ -58,15 +58,17 @@ pub async fn send_offer(username: &String, data: &String) -> Result<(), reqwest:
|
|||
.map(|_| Ok(()))?
|
||||
}
|
||||
|
||||
pub async fn receive_offer(username: &String) -> Result<Signal, Box<dyn std::error::Error>> {
|
||||
pub async fn receive_offer(username: &String) -> Result<UserAndSignal, Box<dyn std::error::Error>> {
|
||||
let result = get_json(username, SignalType::Offer)
|
||||
.await
|
||||
.map(async |response| response.json::<Signal>().await)?
|
||||
.map(async |response| response.json::<UserAndSignal>().await)?
|
||||
.await?;
|
||||
if result.get_signal_type() == SignalType::Offer {
|
||||
if result.signal.get_signal_type() == SignalType::Offer {
|
||||
Ok(result)
|
||||
} else {
|
||||
Err(protocol::Error::SignalType(result.get_signal_type()))?
|
||||
Err(protocol::Error::UnexpectedSignalType(
|
||||
result.signal.get_signal_type(),
|
||||
))?
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -78,14 +80,42 @@ pub async fn send_answer(username: &String, data: &String) -> Result<(), reqwest
|
|||
.map(|_| Ok(()))?
|
||||
}
|
||||
|
||||
pub async fn receive_answer(username: &String) -> Result<Signal, Box<dyn std::error::Error>> {
|
||||
pub async fn receive_answer(
|
||||
username: &String,
|
||||
) -> Result<UserAndSignal, Box<dyn std::error::Error>> {
|
||||
let result = get_json(username, SignalType::Answer)
|
||||
.await
|
||||
.map(async |response| response.json::<Signal>().await)?
|
||||
.map(async |response| response.json::<UserAndSignal>().await)?
|
||||
.await?;
|
||||
if result.get_signal_type() == SignalType::Answer {
|
||||
if result.signal.get_signal_type() == SignalType::Answer {
|
||||
Ok(result)
|
||||
} else {
|
||||
Err(protocol::Error::SignalType(result.get_signal_type()))?
|
||||
Err(protocol::Error::UnexpectedSignalType(
|
||||
result.signal.get_signal_type(),
|
||||
))?
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn send_ice_candidate(username: &String, data: &String) -> Result<(), reqwest::Error> {
|
||||
let rtc_session_answer_signal = Signal::new(&SignalType::ICECandidate, data);
|
||||
let rtc_session_answer_signal = json!(rtc_session_answer_signal);
|
||||
post_json(username, &rtc_session_answer_signal)
|
||||
.await
|
||||
.map(|_| Ok(()))?
|
||||
}
|
||||
|
||||
pub async fn receive_ice_candidate(
|
||||
username: &String,
|
||||
) -> Result<UserAndSignal, Box<dyn std::error::Error>> {
|
||||
let result = get_json(username, SignalType::Answer)
|
||||
.await
|
||||
.map(async |response| response.json::<UserAndSignal>().await)?
|
||||
.await?;
|
||||
if result.signal.get_signal_type() == SignalType::ICECandidate {
|
||||
Ok(result)
|
||||
} else {
|
||||
Err(protocol::Error::UnexpectedSignalType(
|
||||
result.signal.get_signal_type(),
|
||||
))?
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue