mirror of
https://github.com/csehviktor/status-monitor.git
synced 2025-08-08 18:06:14 +02:00
implement dynamic path for ws connections
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
use common::StatusMessage;
|
||||
use warp::{filters::ws::{Message, WebSocket}, Filter, Reply, Rejection};
|
||||
use futures_util::{StreamExt, SinkExt};
|
||||
use tokio::sync::mpsc::channel;
|
||||
@@ -15,16 +16,17 @@ impl WebsocketRoutes {
|
||||
}
|
||||
|
||||
pub fn routes(self: Arc<Self>) -> impl Filter<Extract = impl Reply, Error = Rejection> + Clone {
|
||||
warp::path("ws")
|
||||
warp::path("agent")
|
||||
.and(warp::path::param::<String>())
|
||||
.and(warp::get())
|
||||
.and(warp::ws())
|
||||
.and(warp::any().map(move || self.clients.clone()))
|
||||
.map(|websocket: warp::ws::Ws, clients: Arc<ClientManager>| {
|
||||
websocket.on_upgrade(move |websocket| Self::handle_ws_connection(websocket, clients))
|
||||
.map(|agent: String, websocket: warp::ws::Ws, clients: Arc<ClientManager>| {
|
||||
websocket.on_upgrade(move |websocket| Self::handle_ws_connection(agent, websocket, clients))
|
||||
})
|
||||
}
|
||||
|
||||
async fn handle_ws_connection(websocket: WebSocket, clients: Arc<ClientManager>) {
|
||||
async fn handle_ws_connection(agent: String, websocket: WebSocket, clients: Arc<ClientManager>) {
|
||||
let (mut ws_tx, _) = websocket.split();
|
||||
let (tx, mut rx) = channel::<StatusMessage>(100);
|
||||
|
||||
@@ -32,6 +34,10 @@ impl WebsocketRoutes {
|
||||
|
||||
tokio::spawn(async move {
|
||||
while let Some(msg) = rx.recv().await {
|
||||
if msg.agent != agent {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ws_tx.send(Message::text(msg)).await.is_err() {
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user