Browse Source

[GroupChat] add sync online members when connected

pull/18/head
Sun 4 years ago
parent
commit
d133d9f6c3
  1. 28
      src/apps/group_chat/layer.rs

28
src/apps/group_chat/layer.rs

@ -103,6 +103,9 @@ fn handle_connect( @@ -103,6 +103,9 @@ fn handle_connect(
// 1.4 sync group height.
if group.height < height {
add_layer(results, mgid, sync(gcd, addr, group.height));
} else {
// sync online members.
add_layer(results, mgid, sync_online(gcd, addr));
}
Ok(true)
} else {
@ -212,6 +215,12 @@ async fn handle_event( @@ -212,6 +215,12 @@ async fn handle_event(
let (_sid, gid) = layer.read().await.get_running_remote_id(&mgid, &gcd)?;
results.rpcs.push(rpc::member_offline(mgid, gid, mid));
}
LayerEvent::MemberOnlineSyncResult(gcd, onlines) => {
let (_sid, gid) = layer.read().await.get_running_remote_id(&mgid, &gcd)?;
for (mid, maddr) in onlines {
results.rpcs.push(rpc::member_online(mgid, gid, mid, maddr));
}
}
LayerEvent::Sync(gcd, height, event) => {
let (_sid, gid) = layer.read().await.get_running_remote_id(&mgid, &gcd)?;
@ -281,6 +290,11 @@ async fn handle_event( @@ -281,6 +290,11 @@ async fn handle_event(
LayerEvent::Packed(gcd, height, from, to, events) => {
let (_sid, gid) = layer.read().await.get_running_remote_id(&mgid, &gcd)?;
if to >= height {
// when last packed sync, start sync online members.
add_layer(results, mgid, sync_online(gcd, addr));
}
println!("Start handle sync packed... {}, {}, {}", height, from, to);
let base = layer.read().await.base().clone();
handle_sync(
@ -314,10 +328,11 @@ async fn handle_event( @@ -314,10 +328,11 @@ async fn handle_event(
let id = Request::over_rid(&db, &gcd, &rid, ok)?;
results.rpcs.push(rpc::request_handle(mgid, id, ok, false));
}
LayerEvent::Request(..) => {} // nerver here.
LayerEvent::Check => {} // nerver here.
LayerEvent::Create(..) => {} // nerver here.
LayerEvent::SyncReq(..) => {} // Nerver here.
LayerEvent::MemberOnlineSync(..) => {} // nerver here.
LayerEvent::Request(..) => {} // nerver here.
LayerEvent::Check => {} // nerver here.
LayerEvent::Create(..) => {} // nerver here.
LayerEvent::SyncReq(..) => {} // Nerver here.
}
Ok(())
@ -341,6 +356,11 @@ fn sync(gcd: GroupId, addr: PeerAddr, height: i64) -> SendType { @@ -341,6 +356,11 @@ fn sync(gcd: GroupId, addr: PeerAddr, height: i64) -> SendType {
SendType::Event(0, addr, data)
}
fn sync_online(gcd: GroupId, addr: PeerAddr) -> SendType {
let data = postcard::to_allocvec(&LayerEvent::MemberOnlineSync(gcd)).unwrap_or(vec![]);
SendType::Event(0, addr, data)
}
fn handle_sync(
mgid: GroupId,
fid: i64,

Loading…
Cancel
Save