catcolab_backend/
socket.rs

1use socketioxide::extract::{Data, SocketRef};
2use tracing::{error, info};
3
4use super::app::AppState;
5use super::document as doc;
6
7/// Set up the socket that communicates with the Automerge doc server.
8pub fn setup_automerge_socket(state: AppState) {
9    let io = state.automerge_io.clone();
10
11    io.ns("/", |socket: SocketRef| {
12        info!("Automerge socket connected at namespace {}", socket.ns());
13
14        socket.on("autosave", |_: SocketRef, Data::<doc::RefContent>(data)| async move {
15            if let Err(err) = doc::autosave(state, data).await {
16                error!("Autosave failed with error: {}", err);
17            }
18        });
19    });
20}