mirror of
https://github.com/YGGverse/aquatic.git
synced 2026-03-31 17:55:36 +00:00
ws: refactor, bug fixes, improvements (#155)
- split swarm worker into two modules - split socket worker into two modules - keep track of which offers peers have sent and only allow matching answers - always clean up after closing connection - use channel for telling connections to close - move some logic into new ConnectionRunner struct - use slotmap for connection reference storage - fix double counting of error responses - actually close connections that take too long to send responses to - remove announced_info_hashes entry on AnnounceEvent::Stopped
This commit is contained in:
parent
af9d5a55f6
commit
fe5ccf6646
19 changed files with 1770 additions and 1583 deletions
|
|
@ -156,7 +156,7 @@ pub fn extract_response_peers<K, V, R, F>(
|
|||
) -> Vec<R>
|
||||
where
|
||||
K: Eq + ::std::hash::Hash,
|
||||
F: Fn(&V) -> R,
|
||||
F: Fn(&K, &V) -> R,
|
||||
{
|
||||
if peer_map.len() <= max_num_peers_to_take + 1 {
|
||||
// This branch: number of peers in map (minus sender peer) is less than
|
||||
|
|
@ -165,7 +165,7 @@ where
|
|||
let mut peers = Vec::with_capacity(peer_map.len());
|
||||
|
||||
peers.extend(peer_map.iter().filter_map(|(k, v)| {
|
||||
(*k != sender_peer_map_key).then_some(peer_conversion_function(v))
|
||||
(*k != sender_peer_map_key).then_some(peer_conversion_function(k, v))
|
||||
}));
|
||||
|
||||
// Handle the case when sender peer is not in peer list. Typically,
|
||||
|
|
@ -204,12 +204,12 @@ where
|
|||
|
||||
if let Some(slice) = peer_map.get_range(offset_half_one..end_half_one) {
|
||||
peers.extend(slice.iter().filter_map(|(k, v)| {
|
||||
(*k != sender_peer_map_key).then_some(peer_conversion_function(v))
|
||||
(*k != sender_peer_map_key).then_some(peer_conversion_function(k, v))
|
||||
}));
|
||||
}
|
||||
if let Some(slice) = peer_map.get_range(offset_half_two..end_half_two) {
|
||||
peers.extend(slice.iter().filter_map(|(k, v)| {
|
||||
(*k != sender_peer_map_key).then_some(peer_conversion_function(v))
|
||||
(*k != sender_peer_map_key).then_some(peer_conversion_function(k, v))
|
||||
}));
|
||||
}
|
||||
|
||||
|
|
@ -260,7 +260,7 @@ mod tests {
|
|||
&peer_map,
|
||||
max_num_peers_to_take,
|
||||
sender_peer_map_key,
|
||||
|p| *p,
|
||||
|_, p| *p,
|
||||
);
|
||||
|
||||
if num_peers_in_map > max_num_peers_to_take + 1 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue