|
|
@@ -624,19 +624,7 @@ impl RendezvousServer {
|
|
624
|
624
|
}
|
|
625
|
625
|
}
|
|
626
|
626
|
Some(rendezvous_message::Union::OnlineRequest(or)) => {
|
|
627
|
|
- let mut states = BytesMut::zeroed((or.peers.len() + 7) / 8);
|
|
628
|
|
- for (i, peer_id) in or.peers.iter().enumerate() {
|
|
629
|
|
- if let Some(peer) = self.pm.get_in_memory(peer_id).await {
|
|
630
|
|
- let elapsed = peer.read().await.last_reg_time.elapsed().as_millis() as i32;
|
|
631
|
|
- // bytes index from left to right
|
|
632
|
|
- let states_idx = i / 8;
|
|
633
|
|
- let bit_idx = 7 - i % 8;
|
|
634
|
|
- if elapsed < REG_TIMEOUT {
|
|
635
|
|
- states[states_idx] |= 0x01 << bit_idx;
|
|
636
|
|
- }
|
|
637
|
|
- }
|
|
638
|
|
- }
|
|
639
|
|
-
|
|
|
627
|
+ let mut states = self.peers_online_state(or.peers).await;
|
|
640
|
628
|
let mut msg_out = RendezvousMessage::new();
|
|
641
|
629
|
msg_out.set_online_response(OnlineResponse {
|
|
642
|
630
|
states: states.into(),
|
|
|
@@ -650,6 +638,22 @@ impl RendezvousServer {
|
|
650
|
638
|
false
|
|
651
|
639
|
}
|
|
652
|
640
|
|
|
|
641
|
+ async fn peers_online_state(&mut self, peers: Vec<String>) -> BytesMut {
|
|
|
642
|
+ let mut states = BytesMut::zeroed((peers.len() + 7) / 8);
|
|
|
643
|
+ for (i, peer_id) in peers.iter().enumerate() {
|
|
|
644
|
+ if let Some(peer) = self.pm.get_in_memory(peer_id).await {
|
|
|
645
|
+ let elapsed = peer.read().await.last_reg_time.elapsed().as_millis() as i32;
|
|
|
646
|
+ // bytes index from left to right
|
|
|
647
|
+ let states_idx = i / 8;
|
|
|
648
|
+ let bit_idx = 7 - i % 8;
|
|
|
649
|
+ if elapsed < REG_TIMEOUT {
|
|
|
650
|
+ states[states_idx] |= 0x01 << bit_idx;
|
|
|
651
|
+ }
|
|
|
652
|
+ }
|
|
|
653
|
+ }
|
|
|
654
|
+ states
|
|
|
655
|
+ }
|
|
|
656
|
+
|
|
653
|
657
|
#[inline]
|
|
654
|
658
|
async fn update_addr(
|
|
655
|
659
|
&mut self,
|
|
|
@@ -882,18 +886,7 @@ impl RendezvousServer {
|
|
882
|
886
|
stream: &mut FramedStream,
|
|
883
|
887
|
peers: Vec<String>,
|
|
884
|
888
|
) -> ResultType<()> {
|
|
885
|
|
- let mut states = BytesMut::zeroed((peers.len() + 7) / 8);
|
|
886
|
|
- for (i, peer_id) in peers.iter().enumerate() {
|
|
887
|
|
- if let Some(peer) = self.pm.get_in_memory(peer_id).await {
|
|
888
|
|
- let elapsed = peer.read().await.last_reg_time.elapsed().as_millis() as i32;
|
|
889
|
|
- // bytes index from left to right
|
|
890
|
|
- let states_idx = i / 8;
|
|
891
|
|
- let bit_idx = 7 - i % 8;
|
|
892
|
|
- if elapsed < REG_TIMEOUT {
|
|
893
|
|
- states[states_idx] |= 0x01 << bit_idx;
|
|
894
|
|
- }
|
|
895
|
|
- }
|
|
896
|
|
- }
|
|
|
889
|
+ let mut states = self.peers_online_state(peers).await;
|
|
897
|
890
|
|
|
898
|
891
|
let mut msg_out = RendezvousMessage::new();
|
|
899
|
892
|
msg_out.set_online_response(OnlineResponse {
|