|
|
@@ -602,6 +602,27 @@ impl RendezvousServer {
|
|
602
|
602
|
}
|
|
603
|
603
|
}
|
|
604
|
604
|
}
|
|
|
605
|
+ Some(rendezvous_message::Union::OnlineRequest(or)) => {
|
|
|
606
|
+ let mut states = BytesMut::zeroed((or.peers.len() + 7) / 8);
|
|
|
607
|
+ for (i, peer_id) in or.peers.iter().enumerate() {
|
|
|
608
|
+ if let Some(peer) = self.pm.get_in_memory(peer_id).await {
|
|
|
609
|
+ let elapsed = peer.read().await.last_reg_time.elapsed().as_millis() as i32;
|
|
|
610
|
+ // bytes index from left to right
|
|
|
611
|
+ let states_idx = i / 8;
|
|
|
612
|
+ let bit_idx = 7 - i % 8;
|
|
|
613
|
+ if elapsed < REG_TIMEOUT {
|
|
|
614
|
+ states[states_idx] |= 0x01 << bit_idx;
|
|
|
615
|
+ }
|
|
|
616
|
+ }
|
|
|
617
|
+ }
|
|
|
618
|
+
|
|
|
619
|
+ let mut msg_out = RendezvousMessage::new();
|
|
|
620
|
+ msg_out.set_online_response(OnlineResponse {
|
|
|
621
|
+ states: states.into(),
|
|
|
622
|
+ ..Default::default()
|
|
|
623
|
+ });
|
|
|
624
|
+ Self::send_to_sink(sink, msg_out).await;
|
|
|
625
|
+ }
|
|
605
|
626
|
_ => {}
|
|
606
|
627
|
}
|
|
607
|
628
|
}
|