style: optimize online query

This commit is contained in:
lejianwen committed 2025-01-22 19:44:16 +08:00
1 parent 9ee99f1412
commit d095ac8cec
2 files changed
+20 -26

No files matched your search

Generated
+2 -1
View File
@@ -342,6 +342,7 @@ dependencies = [
"iana-time-zone", "iana-time-zone",
"js-sys", "js-sys",
"num-traits", "num-traits",
"serde",
"wasm-bindgen", "wasm-bindgen",
"windows-targets 0.52.6", "windows-targets 0.52.6",
] ]
@@ -1068,7 +1069,7 @@ dependencies = [
[[package]] [[package]]
name = "hbbs" name = "hbbs"
version = "1.1.13" version = "1.1.14"
dependencies = [ dependencies = [
"async-speed-limit", "async-speed-limit",
"async-trait", "async-trait",
+18 -25
View File
@@ -624,19 +624,7 @@ impl RendezvousServer {
} }
} }
Some(rendezvous_message::Union::OnlineRequest(or)) => { Some(rendezvous_message::Union::OnlineRequest(or)) => {
let mut states = BytesMut::zeroed((or.peers.len() + 7) / 8); let mut states = self.peers_online_state(or.peers).await;
for (i, peer_id) in or.peers.iter().enumerate() {
if let Some(peer) = self.pm.get_in_memory(peer_id).await {
let elapsed = peer.read().await.last_reg_time.elapsed().as_millis() as i32;
// bytes index from left to right
let states_idx = i / 8;
let bit_idx = 7 - i % 8;
if elapsed < REG_TIMEOUT {
states[states_idx] |= 0x01 << bit_idx;
}
}
}
let mut msg_out = RendezvousMessage::new(); let mut msg_out = RendezvousMessage::new();
msg_out.set_online_response(OnlineResponse { msg_out.set_online_response(OnlineResponse {
states: states.into(), states: states.into(),
@@ -650,6 +638,22 @@ impl RendezvousServer {
false false
} }
async fn peers_online_state(&mut self, peers: Vec<String>) -> BytesMut {
let mut states = BytesMut::zeroed((peers.len() + 7) / 8);
for (i, peer_id) in peers.iter().enumerate() {
if let Some(peer) = self.pm.get_in_memory(peer_id).await {
let elapsed = peer.read().await.last_reg_time.elapsed().as_millis() as i32;
// bytes index from left to right
let states_idx = i / 8;
let bit_idx = 7 - i % 8;
if elapsed < REG_TIMEOUT {
states[states_idx] |= 0x01 << bit_idx;
}
}
}
states
}
#[inline] #[inline]
async fn update_addr( async fn update_addr(
&mut self, &mut self,
@@ -882,18 +886,7 @@ impl RendezvousServer {
stream: &mut FramedStream, stream: &mut FramedStream,
peers: Vec<String>, peers: Vec<String>,
) -> ResultType<()> { ) -> ResultType<()> {
let mut states = BytesMut::zeroed((peers.len() + 7) / 8); let mut states = self.peers_online_state(peers).await;
for (i, peer_id) in peers.iter().enumerate() {
if let Some(peer) = self.pm.get_in_memory(peer_id).await {
let elapsed = peer.read().await.last_reg_time.elapsed().as_millis() as i32;
// bytes index from left to right
let states_idx = i / 8;
let bit_idx = 7 - i % 8;
if elapsed < REG_TIMEOUT {
states[states_idx] |= 0x01 << bit_idx;
}
}
}
let mut msg_out = RendezvousMessage::new(); let mut msg_out = RendezvousMessage::new();
msg_out.set_online_response(OnlineResponse { msg_out.set_online_response(OnlineResponse {