(&mut self, kad: &mut kad::Behaviour<MemoryStore>)
| 217 | } |
| 218 | |
| 219 | pub fn poll(&mut self, kad: &mut kad::Behaviour<MemoryStore>) { |
| 220 | // Start a new query if not enough and have an outstanding one. |
| 221 | if self.current_queries.len() < self.max_running_queries { |
| 222 | if let Some(Query { key, queries }) = self.outstanding_queries.pop_front() { |
| 223 | let query_id = kad.get_providers(key.clone()); |
| 224 | self.current_queries.insert( |
| 225 | key, |
| 226 | RunningQuery { |
| 227 | query_id, |
| 228 | found_providers: Default::default(), |
| 229 | queries, |
| 230 | }, |
| 231 | ); |
| 232 | } |
| 233 | } |
| 234 | |
| 235 | // Cleanup |
| 236 | for query in self.current_queries.values_mut() { |
| 237 | query |
| 238 | .queries |
| 239 | .retain(|query| !query.response_channel.is_closed()); |
| 240 | } |
| 241 | self.current_queries.retain(|_, query| { |
| 242 | if query.queries.is_empty() { |
| 243 | if let Some(mut query) = kad.query_mut(&query.query_id) { |
| 244 | query.finish(); |
| 245 | } |
| 246 | false |
| 247 | } else { |
| 248 | true |
| 249 | } |
| 250 | }); |
| 251 | } |
| 252 | } |
no test coverage detected