Browse Source

session remain skip self address

pull/18/head
Sun 4 years ago
parent
commit
9ed7133d6b
  1. 8
      src/layer.rs
  2. 10
      src/server.rs

8
src/layer.rs

@ -161,6 +161,7 @@ impl Layer { @@ -161,6 +161,7 @@ impl Layer {
}
/// online info.
#[derive(Eq, PartialEq)]
pub(crate) enum Online {
/// connected to this device.
Direct(PeerAddr),
@ -402,9 +403,14 @@ impl RunningLayer { @@ -402,9 +403,14 @@ impl RunningLayer {
}
/// list all onlines groups.
pub fn close_suspend(&mut self) -> Vec<(GroupId, PeerAddr, i64)> {
pub fn close_suspend(&mut self, self_addr: &PeerAddr) -> Vec<(GroupId, PeerAddr, i64)> {
let mut needed = vec![];
for (fgid, online) in &mut self.sessions {
// when online is self. skip.
if online.online == Online::Direct(*self_addr) {
continue;
}
if online.close_suspend() {
needed.push((*fgid, *online.online.addr(), online.db_id));
}

10
src/server.rs

@ -75,7 +75,7 @@ pub async fn start(db_path: String) -> Result<()> { @@ -75,7 +75,7 @@ pub async fn start(db_path: String) -> Result<()> {
let mut now_rpc_uid = 0;
// running session remain task.
tokio::spawn(session_remain(layer.clone(), sender.clone()));
tokio::spawn(session_remain(peer_id, layer.clone(), sender.clone()));
while let Some(message) = recver.recv().await {
match message {
@ -154,7 +154,11 @@ async fn sleep_waiting_reboot( @@ -154,7 +154,11 @@ async fn sleep_waiting_reboot(
Ok(())
}
async fn session_remain(layer: Arc<RwLock<Layer>>, sender: Sender<SendMessage>) -> Result<()> {
async fn session_remain(
self_addr: PeerAddr,
layer: Arc<RwLock<Layer>>,
sender: Sender<SendMessage>,
) -> Result<()> {
loop {
tokio::time::sleep(std::time::Duration::from_secs(120)).await;
if let Some(uid) = RPC_WS_UID.get() {
@ -163,7 +167,7 @@ async fn session_remain(layer: Arc<RwLock<Layer>>, sender: Sender<SendMessage>) @@ -163,7 +167,7 @@ async fn session_remain(layer: Arc<RwLock<Layer>>, sender: Sender<SendMessage>)
let mut addrs = HashMap::new();
for (_, running) in layer_lock.runnings.iter_mut() {
let closed = running.close_suspend();
let closed = running.close_suspend(&self_addr);
for (gid, addr, sid) in closed {
addrs.insert(addr, false);
rpcs.push(crate::rpc::session_lost(gid, &sid));

Loading…
Cancel
Save