mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
send document ping
This commit is contained in:
@ -62,8 +62,8 @@ impl ViewController {
|
||||
}
|
||||
|
||||
#[tracing::instrument(level = "debug", skip(self, params), fields(name = %params.name), err)]
|
||||
pub(crate) async fn create_view_from_params(&self, mut params: CreateViewParams) -> Result<View, FlowyError> {
|
||||
let delta_data = Bytes::from(params.take_view_data());
|
||||
pub(crate) async fn create_view_from_params(&self, params: CreateViewParams) -> Result<View, FlowyError> {
|
||||
let delta_data = Bytes::from(params.view_data.clone());
|
||||
let user_id = self.user.user_id()?;
|
||||
let repeated_revision: RepeatedRevision =
|
||||
Revision::initial_revision(&user_id, ¶ms.view_id, delta_data).into();
|
||||
|
@ -26,7 +26,7 @@ pub trait RevisionServer: Send + Sync {
|
||||
}
|
||||
|
||||
pub struct RevisionManager {
|
||||
doc_id: String,
|
||||
pub(crate) doc_id: String,
|
||||
user_id: String,
|
||||
rev_id_counter: RevIdCounter,
|
||||
cache: Arc<RevisionCache>,
|
||||
@ -67,6 +67,9 @@ impl RevisionManager {
|
||||
|
||||
#[tracing::instrument(level = "debug", skip(self, revision))]
|
||||
pub async fn add_remote_revision(&self, revision: &Revision) -> Result<(), FlowyError> {
|
||||
if revision.delta_data.is_empty() {
|
||||
return Err(FlowyError::internal().context("Delta data should be empty"));
|
||||
}
|
||||
self.rev_id_counter.set(revision.rev_id);
|
||||
let _ = self.cache.add(revision.clone(), RevisionState::Ack, true).await?;
|
||||
Ok(())
|
||||
@ -74,6 +77,10 @@ impl RevisionManager {
|
||||
|
||||
#[tracing::instrument(level = "debug", skip(self, revision))]
|
||||
pub async fn add_local_revision(&self, revision: &Revision) -> Result<(), FlowyError> {
|
||||
if revision.delta_data.is_empty() {
|
||||
return Err(FlowyError::internal().context("Delta data should be empty"));
|
||||
}
|
||||
|
||||
let record = self.cache.add(revision.clone(), RevisionState::Local, true).await?;
|
||||
self.sync_seq.add_revision(record).await?;
|
||||
Ok(())
|
||||
|
@ -285,7 +285,12 @@ impl SharedWSSinkDataProvider {
|
||||
let doc_id = rev.doc_id.clone();
|
||||
Ok(Some(DocumentClientWSData::from_revisions(&doc_id, vec![rev])))
|
||||
},
|
||||
None => Ok(None),
|
||||
None => {
|
||||
//
|
||||
let doc_id = self.rev_manager.doc_id.clone();
|
||||
let latest_rev_id = self.rev_manager.rev_id();
|
||||
Ok(Some(DocumentClientWSData::ping(&doc_id, latest_rev_id)))
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
|
@ -37,9 +37,15 @@ impl MockDocServer {
|
||||
});
|
||||
let pb_client_data: flowy_collaboration::protobuf::DocumentClientWSData =
|
||||
client_data.try_into().unwrap();
|
||||
self.manager.apply_revisions(user, pb_client_data).await.unwrap();
|
||||
self.manager
|
||||
.handle_client_revisions(user, pb_client_data)
|
||||
.await
|
||||
.unwrap();
|
||||
Some(rx)
|
||||
},
|
||||
DocumentClientWSDataType::ClientPing => {
|
||||
todo!()
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user