2025-04-14 04:58:44 +03:00
|
|
|
use std::{str::FromStr, sync::LazyLock};
|
2025-04-13 04:55:33 +03:00
|
|
|
|
2025-04-11 04:58:16 +03:00
|
|
|
use leptos::logging::log;
|
2025-04-14 04:58:44 +03:00
|
|
|
use protocol::{Signal, SignalType};
|
|
|
|
use reqwest::{
|
|
|
|
Response,
|
|
|
|
header::{HeaderMap, HeaderName},
|
|
|
|
};
|
2025-04-13 04:55:33 +03:00
|
|
|
use serde_json::{Value, json};
|
|
|
|
|
|
|
|
const SIGNALLING_ADDRESS: &str = "http://127.0.0.1:4546";
|
|
|
|
static REQUEST_CLIENT: LazyLock<reqwest::Client> = LazyLock::new(|| reqwest::Client::new());
|
|
|
|
|
2025-04-14 04:58:44 +03:00
|
|
|
async fn post_json(username: &String, json: &Value) -> Result<Response, reqwest::Error> {
|
|
|
|
let mut headers = HeaderMap::new();
|
|
|
|
headers
|
|
|
|
.try_insert(
|
|
|
|
HeaderName::from_str("username").unwrap(),
|
|
|
|
username.parse().unwrap(),
|
|
|
|
)
|
|
|
|
.unwrap();
|
2025-04-13 04:55:33 +03:00
|
|
|
REQUEST_CLIENT
|
|
|
|
.post(SIGNALLING_ADDRESS)
|
2025-04-14 04:58:44 +03:00
|
|
|
.headers(headers)
|
2025-04-13 04:55:33 +03:00
|
|
|
.json(json)
|
|
|
|
.send()
|
|
|
|
.await
|
|
|
|
}
|
2025-04-11 04:58:16 +03:00
|
|
|
|
2025-04-14 04:58:44 +03:00
|
|
|
async fn get_json(username: &String) -> Result<Response, reqwest::Error> {
|
|
|
|
let mut headers = HeaderMap::new();
|
|
|
|
headers
|
|
|
|
.try_insert(
|
|
|
|
HeaderName::from_str("username").unwrap(),
|
|
|
|
username.parse().unwrap(),
|
|
|
|
)
|
|
|
|
.unwrap();
|
|
|
|
REQUEST_CLIENT
|
|
|
|
.get(SIGNALLING_ADDRESS)
|
|
|
|
.headers(headers)
|
|
|
|
.send()
|
|
|
|
.await
|
|
|
|
}
|
|
|
|
|
2025-04-13 04:55:33 +03:00
|
|
|
pub async fn start_signalling(username: String) {
|
2025-04-11 04:58:16 +03:00
|
|
|
log!("Start Signalling");
|
2025-04-13 04:55:33 +03:00
|
|
|
log!("{}\n{}", username, SIGNALLING_ADDRESS);
|
2025-04-14 04:58:44 +03:00
|
|
|
let auth_signal = Signal::new(&username, &SignalType::Auth, &"".to_owned());
|
|
|
|
let json = json!(auth_signal);
|
|
|
|
match post_json(&username, &json).await {
|
2025-04-13 04:55:33 +03:00
|
|
|
Ok(signal_response) => log!("{:#?}", signal_response),
|
|
|
|
Err(err_val) => {
|
|
|
|
log!("Error: Signal Post | {}", err_val);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-04-14 04:58:44 +03:00
|
|
|
pub async fn send_offer(username: &String, data: &String) {
|
|
|
|
let rtc_session_offer_signal = Signal::new(username, &SignalType::Offer, data);
|
|
|
|
let rtc_session_offer_signal = json!(rtc_session_offer_signal);
|
|
|
|
match post_json(username, &rtc_session_offer_signal).await {
|
2025-04-11 04:58:16 +03:00
|
|
|
Ok(signal_response) => log!("{:#?}", signal_response),
|
|
|
|
Err(err_val) => {
|
|
|
|
log!("Error: Signal Post | {}", err_val);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-04-14 04:58:44 +03:00
|
|
|
pub async fn receive_offer(username: &String) {
|
|
|
|
match get_json(username).await {
|
2025-04-13 04:55:33 +03:00
|
|
|
Ok(signal_response) => log!("{:#?}", signal_response),
|
|
|
|
Err(err_val) => {
|
|
|
|
log!("Error: Signal Post | {}", err_val);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-04-14 04:58:44 +03:00
|
|
|
pub async fn send_answer(username: &String, data: &String) {
|
|
|
|
let rtc_session_answer_signal = Signal::new(username, &SignalType::Answer, data);
|
|
|
|
let rtc_session_answer_signal = json!(rtc_session_answer_signal);
|
|
|
|
match post_json(username, &rtc_session_answer_signal).await {
|
2025-04-13 04:55:33 +03:00
|
|
|
Ok(signal_response) => log!("{:#?}", signal_response),
|
|
|
|
Err(err_val) => {
|
|
|
|
log!("Error: Signal Post | {}", err_val);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-04-14 04:58:44 +03:00
|
|
|
pub async fn receive_answer(username: &String) {
|
|
|
|
match get_json(username).await {
|
2025-04-13 04:55:33 +03:00
|
|
|
Ok(signal_response) => log!("{:#?}", signal_response),
|
|
|
|
Err(err_val) => {
|
|
|
|
log!("Error: Signal Post | {}", err_val);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|