You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

35 lines
785 B
Rust

use std::collections::HashMap;
use std::sync::atomic::{AtomicUsize, Ordering};
use url::Url;
pub struct TrackerManager {
counter: AtomicUsize,
trackers: HashMap<usize, Tracker>,
url_index: HashMap<String, usize>,
}
pub struct Tracker {
url: Url,
}
pub type TrackerId = usize;
impl TrackerManager {
pub fn get_tracker_id(&mut self, url: &Url) -> Option<TrackerId> {
// dht is not a tracker bye
if url.scheme() == "dht" {
return None;
}
let url_str = url.as_str();
if let Some(id) = self.url_index.get(url_str) {
return Some(*id);
}
let new_id = self.counter.fetch_add(1, Ordering::AcqRel);
self.url_index.insert(url_str.to_string(), new_id);
Some(new_id)
}
}