From 76098532eaba62312dda86185e7cd02b5a5f1cfa Mon Sep 17 00:00:00 2001 From: csehviktor Date: Tue, 8 Jul 2025 14:48:35 +0200 Subject: [PATCH] implement dynamic path for ws connections --- server/src/server/websocket.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/server/src/server/websocket.rs b/server/src/server/websocket.rs index cbc4bfe..08b5e57 100644 --- a/server/src/server/websocket.rs +++ b/server/src/server/websocket.rs @@ -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) -> impl Filter + Clone { - warp::path("ws") + warp::path("agent") + .and(warp::path::param::()) .and(warp::get()) .and(warp::ws()) .and(warp::any().map(move || self.clients.clone())) - .map(|websocket: warp::ws::Ws, clients: Arc| { - websocket.on_upgrade(move |websocket| Self::handle_ws_connection(websocket, clients)) + .map(|agent: String, websocket: warp::ws::Ws, clients: Arc| { + websocket.on_upgrade(move |websocket| Self::handle_ws_connection(agent, websocket, clients)) }) } - async fn handle_ws_connection(websocket: WebSocket, clients: Arc) { + async fn handle_ws_connection(agent: String, websocket: WebSocket, clients: Arc) { let (mut ws_tx, _) = websocket.split(); let (tx, mut rx) = channel::(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; }