send document ping

This commit is contained in:
appflowy
2022-01-01 23:09:13 +08:00
parent df5266d7c9
commit 12e8424e8a
22 changed files with 285 additions and 148 deletions

View File

@ -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, &params.view_id, delta_data).into();

View File

@ -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(())

View File

@ -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)))
},
}
},
}

View File

@ -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!()
},
}
}
}