rust_webrtc/server/src/signal.rs

47 lines
1.3 KiB
Rust
Raw Normal View History

use axum::{Router, http::StatusCode, response::IntoResponse, routing::get};
use fastwebsockets::{
OpCode,
upgrade::{IncomingUpgrade, UpgradeFut},
};
use tokio::net::TcpListener;
use tower_http::cors::CorsLayer;
const SERVER_ADDRESS: &str = "192.168.1.3:4546";
pub async fn start_signalling() {
let router = Router::new()
.route("/", get(alive))
.route("/signal", get(signal))
.layer(CorsLayer::permissive());
let listener = TcpListener::bind(SERVER_ADDRESS).await.unwrap();
println!("{}", SERVER_ADDRESS);
axum::serve(listener, router).await.unwrap();
}
async fn alive() -> impl IntoResponse {
StatusCode::OK
}
async fn signal(websocket: IncomingUpgrade) -> impl IntoResponse {
let (response, websocket) = websocket.upgrade().unwrap();
tokio::spawn(websocket_handler(websocket));
response
}
async fn websocket_handler(websocket: UpgradeFut) {
let mut websocket = websocket.await.unwrap();
websocket.set_auto_pong(true);
websocket.set_writev(false);
websocket.set_auto_close(true);
while let Ok(received_frame) = websocket.read_frame().await {
if let OpCode::Text = received_frame.opcode {
let received_payload = received_frame.payload;
println!("Sent:\n{:#?}", received_payload);
}
}
}