forked from torrust/torrust-tracker
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcontainer.rs
More file actions
114 lines (97 loc) · 4.49 KB
/
container.rs
File metadata and controls
114 lines (97 loc) · 4.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
use std::sync::Arc;
use bittorrent_tracker_core::container::TrackerCoreContainer;
use torrust_tracker_configuration::{Core, HttpTracker};
use torrust_tracker_torrent_repository::container::TorrentRepositoryContainer;
use crate::event::bus::EventBus;
use crate::event::sender::Broadcaster;
use crate::services::announce::AnnounceService;
use crate::services::scrape::ScrapeService;
use crate::statistics::repository::Repository;
use crate::{event, services, statistics};
pub struct HttpTrackerCoreContainer {
pub http_tracker_config: Arc<HttpTracker>,
pub tracker_core_container: Arc<TrackerCoreContainer>,
// `HttpTrackerCoreServices`
pub event_bus: Arc<event::bus::EventBus>,
pub stats_event_sender: event::sender::Sender,
pub stats_repository: Arc<statistics::repository::Repository>,
pub announce_service: Arc<AnnounceService>,
pub scrape_service: Arc<ScrapeService>,
}
impl HttpTrackerCoreContainer {
#[must_use]
pub fn initialize(core_config: &Arc<Core>, http_tracker_config: &Arc<HttpTracker>) -> Arc<Self> {
let torrent_repository_container = Arc::new(TorrentRepositoryContainer::initialize(
core_config.tracker_usage_statistics.into(),
));
let tracker_core_container = Arc::new(TrackerCoreContainer::initialize_from(
core_config,
&torrent_repository_container,
));
Self::initialize_from_tracker_core(&tracker_core_container, http_tracker_config)
}
#[must_use]
pub fn initialize_from_tracker_core(
tracker_core_container: &Arc<TrackerCoreContainer>,
http_tracker_config: &Arc<HttpTracker>,
) -> Arc<Self> {
let http_tracker_core_services = HttpTrackerCoreServices::initialize_from(tracker_core_container);
Self::initialize_from_services(tracker_core_container, &http_tracker_core_services, http_tracker_config)
}
#[must_use]
pub fn initialize_from_services(
tracker_core_container: &Arc<TrackerCoreContainer>,
http_tracker_core_services: &Arc<HttpTrackerCoreServices>,
http_tracker_config: &Arc<HttpTracker>,
) -> Arc<Self> {
Arc::new(Self {
tracker_core_container: tracker_core_container.clone(),
http_tracker_config: http_tracker_config.clone(),
event_bus: http_tracker_core_services.event_bus.clone(),
stats_event_sender: http_tracker_core_services.stats_event_sender.clone(),
stats_repository: http_tracker_core_services.stats_repository.clone(),
announce_service: http_tracker_core_services.announce_service.clone(),
scrape_service: http_tracker_core_services.scrape_service.clone(),
})
}
}
pub struct HttpTrackerCoreServices {
pub event_bus: Arc<event::bus::EventBus>,
pub stats_event_sender: event::sender::Sender,
pub stats_repository: Arc<statistics::repository::Repository>,
pub announce_service: Arc<services::announce::AnnounceService>,
pub scrape_service: Arc<services::scrape::ScrapeService>,
}
impl HttpTrackerCoreServices {
#[must_use]
pub fn initialize_from(tracker_core_container: &Arc<TrackerCoreContainer>) -> Arc<Self> {
// HTTP core stats
let http_core_broadcaster = Broadcaster::default();
let http_stats_repository = Arc::new(Repository::new());
let http_stats_event_bus = Arc::new(EventBus::new(
tracker_core_container.core_config.tracker_usage_statistics.into(),
http_core_broadcaster.clone(),
));
let http_stats_event_sender = http_stats_event_bus.sender();
let http_announce_service = Arc::new(AnnounceService::new(
tracker_core_container.core_config.clone(),
tracker_core_container.announce_handler.clone(),
tracker_core_container.authentication_service.clone(),
tracker_core_container.whitelist_authorization.clone(),
http_stats_event_sender.clone(),
));
let http_scrape_service = Arc::new(ScrapeService::new(
tracker_core_container.core_config.clone(),
tracker_core_container.scrape_handler.clone(),
tracker_core_container.authentication_service.clone(),
http_stats_event_sender.clone(),
));
Arc::new(Self {
event_bus: http_stats_event_bus,
stats_event_sender: http_stats_event_sender,
stats_repository: http_stats_repository,
announce_service: http_announce_service,
scrape_service: http_scrape_service,
})
}
}