update serialization

This commit is contained in:
csehviktor
2025-07-08 14:47:52 +02:00
parent bf366cdad0
commit cf92638739
5 changed files with 20 additions and 14 deletions

View File

@@ -1,7 +1,8 @@
use common::StatusMessage;
use tokio::sync::{mpsc::Sender, Mutex};
pub struct ClientManager {
clients: Mutex<Vec<Sender<String>>>,
clients: Mutex<Vec<Sender<StatusMessage>>>,
}
impl ClientManager {
@@ -11,12 +12,12 @@ impl ClientManager {
}
}
pub async fn add_client(&self, client: Sender<String>) {
pub async fn add_client(&self, client: Sender<StatusMessage>) {
let mut clients = self.clients.lock().await;
clients.push(client);
}
pub async fn broadcast(&self, message: String) {
pub async fn broadcast(&self, message: &StatusMessage) {
let mut clients = self.clients.lock().await;
clients.retain(|client| {

View File

@@ -27,8 +27,7 @@ impl MqttSubscriber {
if let Notification::Forward(forward) = notification.unwrap() {
let payload = StatusMessage::try_from(&forward.publish.payload[..])?;
if let Ok(payload_str) = payload.to_string() {
self.clients.broadcast(payload_str).await;
self.clients.broadcast(&payload).await;
if let Err(e) = self.storage.record_message(&payload.agent).await {
eprintln!("failed to record message for {}: {}", &payload.agent, e);

View File

@@ -26,7 +26,7 @@ impl WebsocketRoutes {
async fn handle_ws_connection(websocket: WebSocket, clients: Arc<ClientManager>) {
let (mut ws_tx, _) = websocket.split();
let (tx, mut rx) = channel::<String>(100);
let (tx, mut rx) = channel::<StatusMessage>(100);
clients.add_client(tx).await;