feat: ✨ web and websocket server
This commit is contained in:
parent
1e27b9280e
commit
64e89b006a
4 changed files with 49 additions and 26 deletions
|
@ -5,7 +5,9 @@ edition = "2024"
|
|||
|
||||
[dependencies]
|
||||
tokio = { version = "1.42.1", default-features = false, features = ["macros", "rt-multi-thread"] }
|
||||
fastwebsockets = "0.10.0"
|
||||
axum = "0.8.3"
|
||||
tower-http = { version = "0.6.2", default-features = false, features = ["cors"]}
|
||||
fastwebsockets = { version = "0.10.0", features = ["upgrade", "with_axum"]}
|
||||
serde = { workspace = true }
|
||||
serde_json = { workspace = true }
|
||||
chrono = { workspace = true }
|
||||
|
|
|
@ -1,25 +1,46 @@
|
|||
use fastwebsockets::{FragmentCollector, OpCode, Role, WebSocket};
|
||||
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 tcp_listener = TcpListener::bind(SERVER_ADDRESS).await.unwrap();
|
||||
while let Ok((tcp_stream, client_address)) = tcp_listener.accept().await {
|
||||
let mut websocket = WebSocket::after_handshake(tcp_stream, Role::Server);
|
||||
websocket.set_writev(false);
|
||||
websocket.set_auto_close(true);
|
||||
websocket.set_auto_pong(true);
|
||||
let mut websocket = FragmentCollector::new(websocket);
|
||||
let router = Router::new()
|
||||
.route("/", get(alive))
|
||||
.route("/signal", get(signal))
|
||||
.layer(CorsLayer::permissive());
|
||||
|
||||
while let Ok(received_frame) = websocket.read_frame().await {
|
||||
if let OpCode::Text = received_frame.opcode {
|
||||
let received_payload = received_frame.payload;
|
||||
println!(
|
||||
"Client: {:#?} | Sent:\n{:#?}",
|
||||
client_address, received_payload
|
||||
);
|
||||
}
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue