Don't fail on disconnected WebSocket connection

This commit is contained in:
Andras Schmelczer 2025-03-28 21:27:34 +00:00
parent 85648c9466
commit de26f513e9
No known key found for this signature in database
GPG key ID: FC8F2C3D3D1A718C
5 changed files with 16 additions and 15 deletions

View file

@ -4,10 +4,7 @@ use anyhow::Context;
use tokio::sync::{Mutex, broadcast};
use super::database::models::{DocumentVersionWithoutContent, VaultId};
use crate::{
config::server_config::ServerConfig,
errors::{SyncServerError, server_error},
};
use crate::{config::server_config::ServerConfig, errors::server_error};
#[derive(Debug, Clone)]
pub struct Broadcasts {
@ -32,18 +29,17 @@ impl Broadcasts {
tx.subscribe()
}
pub async fn send(
&self,
vault: VaultId,
document: DocumentVersionWithoutContent,
) -> Result<(), SyncServerError> {
pub async fn send(&self, vault: VaultId, document: DocumentVersionWithoutContent) {
let tx = self.get_or_create(vault).await;
tx.send(document)
let result = tx
.send(document)
.context("Cannot broadcast update message to websocket listeners")
.map_err(server_error)?;
.map_err(server_error);
Ok(())
if result.is_err() {
log::debug!("Failed to send message: {result:?}");
}
}
async fn get_or_create(

View file

@ -146,7 +146,7 @@ async fn internal_create_document(
state
.broadcasts
.send(vault_id, new_version.clone().into())
.await?;
.await;
Ok(Json(new_version.into()))
}

View file

@ -75,7 +75,7 @@ pub async fn delete_document(
state
.broadcasts
.send(vault_id, new_version.clone().into())
.await?;
.await;
Ok(Json(new_version.into()))
}

View file

@ -221,7 +221,7 @@ async fn internal_update_document(
state
.broadcasts
.send(vault_id, new_version.clone().into())
.await?;
.await;
Ok(Json(if is_different_from_request_content {
DocumentUpdateResponse::MergingUpdate(new_version.into())

View file

@ -123,6 +123,11 @@ async fn websocket(
.context("Websocket send task failed")
.map_err(server_error)??;
recv_task
.await
.context("Websocket receive task failed")
.map_err(server_error)?;
Ok(())
}