mirror of
https://github.com/YGGverse/aquatic.git
synced 2026-03-31 17:55:36 +00:00
udp: send_response: reduce branching (hopefully)
This commit is contained in:
parent
dcf6ceaec0
commit
5d227428cc
1 changed files with 39 additions and 11 deletions
|
|
@ -76,7 +76,10 @@ impl PendingScrapeResponseSlab {
|
|||
split_requests
|
||||
}
|
||||
|
||||
pub fn add_and_get_finished(&mut self, response: PendingScrapeResponse) -> Option<Response> {
|
||||
pub fn add_and_get_finished(
|
||||
&mut self,
|
||||
response: PendingScrapeResponse,
|
||||
) -> Option<ScrapeResponse> {
|
||||
let finished = if let Some(entry) = self.0.get_mut(response.slab_key) {
|
||||
entry.num_pending -= 1;
|
||||
|
||||
|
|
@ -97,10 +100,10 @@ impl PendingScrapeResponseSlab {
|
|||
if finished {
|
||||
let entry = self.0.remove(response.slab_key);
|
||||
|
||||
Some(Response::Scrape(ScrapeResponse {
|
||||
Some(ScrapeResponse {
|
||||
transaction_id: entry.transaction_id,
|
||||
torrent_stats: entry.torrent_stats.into_values().collect(),
|
||||
}))
|
||||
})
|
||||
} else {
|
||||
None
|
||||
}
|
||||
|
|
@ -396,15 +399,40 @@ fn send_responses(
|
|||
}
|
||||
|
||||
for (response, addr) in response_receiver.try_iter() {
|
||||
let opt_response = match response {
|
||||
ConnectedResponse::Scrape(r) => pending_scrape_responses.add_and_get_finished(r),
|
||||
ConnectedResponse::AnnounceIpv4(r) => Some(Response::AnnounceIpv4(r)),
|
||||
ConnectedResponse::AnnounceIpv6(r) => Some(Response::AnnounceIpv6(r)),
|
||||
match response {
|
||||
ConnectedResponse::Scrape(r) => {
|
||||
if let Some(response) = pending_scrape_responses.add_and_get_finished(r) {
|
||||
send_response(
|
||||
state,
|
||||
config,
|
||||
socket,
|
||||
buffer,
|
||||
Response::Scrape(response),
|
||||
addr,
|
||||
);
|
||||
}
|
||||
}
|
||||
ConnectedResponse::AnnounceIpv4(r) => {
|
||||
send_response(
|
||||
state,
|
||||
config,
|
||||
socket,
|
||||
buffer,
|
||||
Response::AnnounceIpv4(r),
|
||||
addr,
|
||||
);
|
||||
}
|
||||
ConnectedResponse::AnnounceIpv6(r) => {
|
||||
send_response(
|
||||
state,
|
||||
config,
|
||||
socket,
|
||||
buffer,
|
||||
Response::AnnounceIpv6(r),
|
||||
addr,
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
if let Some(response) = opt_response {
|
||||
send_response(state, config, socket, buffer, response, addr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue