style: optimize online query
This commit is contained in:
1 parent
9ee99f1412
commit
d095ac8cec
2 files changed
+20
-26
No files matched your search
Generated
+2
-1
@@ -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
@@ -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 {
|
||||||
|
|||||||
Reference in new issue
Block a user