lejianwen 1 год назад
Родитель
Сommit
d095ac8cec
2 измененных файлов с 20 добавлено и 26 удалено
  1. 2 1
      Cargo.lock
  2. 18 25
      src/rendezvous_server.rs

+ 2 - 1
Cargo.lock

@@ -342,6 +342,7 @@ dependencies = [
342
  "iana-time-zone",
342
  "iana-time-zone",
343
  "js-sys",
343
  "js-sys",
344
  "num-traits",
344
  "num-traits",
345
+ "serde",
345
  "wasm-bindgen",
346
  "wasm-bindgen",
346
  "windows-targets 0.52.6",
347
  "windows-targets 0.52.6",
347
 ]
348
 ]
@@ -1068,7 +1069,7 @@ dependencies = [
1068
 
1069
 
1069
 [[package]]
1070
 [[package]]
1070
 name = "hbbs"
1071
 name = "hbbs"
1071
-version = "1.1.13"
1072
+version = "1.1.14"
1072
 dependencies = [
1073
 dependencies = [
1073
  "async-speed-limit",
1074
  "async-speed-limit",
1074
  "async-trait",
1075
  "async-trait",

+ 18 - 25
src/rendezvous_server.rs

@@ -624,19 +624,7 @@ impl RendezvousServer {
624
                     }
624
                     }
625
                 }
625
                 }
626
                 Some(rendezvous_message::Union::OnlineRequest(or)) => {
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
                     let mut msg_out = RendezvousMessage::new();
628
                     let mut msg_out = RendezvousMessage::new();
641
                     msg_out.set_online_response(OnlineResponse {
629
                     msg_out.set_online_response(OnlineResponse {
642
                         states: states.into(),
630
                         states: states.into(),
@@ -650,6 +638,22 @@ impl RendezvousServer {
650
         false
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
     #[inline]
657
     #[inline]
654
     async fn update_addr(
658
     async fn update_addr(
655
         &mut self,
659
         &mut self,
@@ -882,18 +886,7 @@ impl RendezvousServer {
882
         stream: &mut FramedStream,
886
         stream: &mut FramedStream,
883
         peers: Vec<String>,
887
         peers: Vec<String>,
884
     ) -> ResultType<()> {
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
         let mut msg_out = RendezvousMessage::new();
891
         let mut msg_out = RendezvousMessage::new();
899
         msg_out.set_online_response(OnlineResponse {
892
         msg_out.set_online_response(OnlineResponse {