Skip to content

Commit 4c7feb5

Browse files
committed
refactor: [#1411] remove duplicate code for UdpTrackerCoreServices initialization
1 parent fdf2055 commit 4c7feb5

5 files changed

Lines changed: 70 additions & 66 deletions

File tree

packages/axum-rest-tracker-api-server/src/environment.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,8 @@ impl EnvContainer {
175175
let tracker_core_container = Arc::new(TrackerCoreContainer::initialize(&core_config));
176176
let http_tracker_core_container =
177177
HttpTrackerCoreContainer::initialize_from_tracker_core(&tracker_core_container, &http_tracker_config);
178-
let udp_tracker_core_container = UdpTrackerCoreContainer::initialize_from(&tracker_core_container, &udp_tracker_config);
178+
let udp_tracker_core_container =
179+
UdpTrackerCoreContainer::initialize_from_tracker_core(&tracker_core_container, &udp_tracker_config);
179180
let udp_tracker_server_container = UdpTrackerServerContainer::initialize(&core_config);
180181

181182
let tracker_http_api_core_container = TrackerHttpApiCoreContainer::initialize_from(

packages/rest-tracker-api-core/src/container.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ impl TrackerHttpApiCoreContainer {
2929
let tracker_core_container = Arc::new(TrackerCoreContainer::initialize(core_config));
3030
let http_tracker_core_container =
3131
HttpTrackerCoreContainer::initialize_from_tracker_core(&tracker_core_container, http_tracker_config);
32-
let udp_tracker_core_container = UdpTrackerCoreContainer::initialize_from(&tracker_core_container, udp_tracker_config);
32+
let udp_tracker_core_container =
33+
UdpTrackerCoreContainer::initialize_from_tracker_core(&tracker_core_container, udp_tracker_config);
3334
let udp_tracker_server_container = UdpTrackerServerContainer::initialize(core_config);
3435

3536
Self::initialize_from(

packages/udp-tracker-core/src/container.rs

Lines changed: 52 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,14 @@ use crate::services::announce::AnnounceService;
88
use crate::services::banning::BanService;
99
use crate::services::connect::ConnectService;
1010
use crate::services::scrape::ScrapeService;
11-
use crate::{event, statistics, MAX_CONNECTION_ID_ERRORS_PER_IP};
11+
use crate::{event, services, statistics, MAX_CONNECTION_ID_ERRORS_PER_IP};
1212

1313
pub struct UdpTrackerCoreContainer {
14-
pub tracker_core_container: Arc<TrackerCoreContainer>,
1514
pub udp_tracker_config: Arc<UdpTracker>,
15+
16+
pub tracker_core_container: Arc<TrackerCoreContainer>,
17+
18+
// `UdpTrackerCoreServices`
1619
pub udp_core_stats_event_sender: Arc<Option<Box<dyn event::sender::Sender>>>,
1720
pub udp_core_stats_repository: Arc<statistics::repository::Repository>,
1821
pub ban_service: Arc<RwLock<BanService>>,
@@ -25,14 +28,52 @@ impl UdpTrackerCoreContainer {
2528
#[must_use]
2629
pub fn initialize(core_config: &Arc<Core>, udp_tracker_config: &Arc<UdpTracker>) -> Arc<UdpTrackerCoreContainer> {
2730
let tracker_core_container = Arc::new(TrackerCoreContainer::initialize(core_config));
28-
Self::initialize_from(&tracker_core_container, udp_tracker_config)
31+
Self::initialize_from_tracker_core(&tracker_core_container, udp_tracker_config)
2932
}
3033

3134
#[must_use]
32-
pub fn initialize_from(
35+
pub fn initialize_from_tracker_core(
3336
tracker_core_container: &Arc<TrackerCoreContainer>,
3437
udp_tracker_config: &Arc<UdpTracker>,
3538
) -> Arc<UdpTrackerCoreContainer> {
39+
let udp_tracker_core_services = UdpTrackerCoreServices::initialize_from(tracker_core_container);
40+
Self::initialize_from_services(tracker_core_container, &udp_tracker_core_services, udp_tracker_config)
41+
}
42+
43+
#[must_use]
44+
pub fn initialize_from_services(
45+
tracker_core_container: &Arc<TrackerCoreContainer>,
46+
udp_tracker_core_services: &Arc<UdpTrackerCoreServices>,
47+
udp_tracker_config: &Arc<UdpTracker>,
48+
) -> Arc<Self> {
49+
Arc::new(Self {
50+
udp_tracker_config: udp_tracker_config.clone(),
51+
52+
tracker_core_container: tracker_core_container.clone(),
53+
54+
// `UdpTrackerCoreServices`
55+
udp_core_stats_event_sender: udp_tracker_core_services.udp_core_stats_event_sender.clone(),
56+
udp_core_stats_repository: udp_tracker_core_services.udp_core_stats_repository.clone(),
57+
ban_service: udp_tracker_core_services.udp_ban_service.clone(),
58+
connect_service: udp_tracker_core_services.udp_connect_service.clone(),
59+
announce_service: udp_tracker_core_services.udp_announce_service.clone(),
60+
scrape_service: udp_tracker_core_services.udp_scrape_service.clone(),
61+
})
62+
}
63+
}
64+
65+
pub struct UdpTrackerCoreServices {
66+
pub udp_core_stats_event_sender: Arc<Option<Box<dyn event::sender::Sender>>>,
67+
pub udp_core_stats_repository: Arc<statistics::repository::Repository>,
68+
pub udp_ban_service: Arc<RwLock<services::banning::BanService>>,
69+
pub udp_connect_service: Arc<services::connect::ConnectService>,
70+
pub udp_announce_service: Arc<services::announce::AnnounceService>,
71+
pub udp_scrape_service: Arc<services::scrape::ScrapeService>,
72+
}
73+
74+
impl UdpTrackerCoreServices {
75+
#[must_use]
76+
pub fn initialize_from(tracker_core_container: &Arc<TrackerCoreContainer>) -> Arc<Self> {
3677
let (udp_core_stats_event_sender, udp_core_stats_repository) =
3778
statistics::setup::factory(tracker_core_container.core_config.tracker_usage_statistics);
3879
let udp_core_stats_event_sender = Arc::new(udp_core_stats_event_sender);
@@ -49,15 +90,13 @@ impl UdpTrackerCoreContainer {
4990
udp_core_stats_event_sender.clone(),
5091
));
5192

52-
Arc::new(UdpTrackerCoreContainer {
53-
tracker_core_container: tracker_core_container.clone(),
54-
udp_tracker_config: udp_tracker_config.clone(),
55-
udp_core_stats_event_sender: udp_core_stats_event_sender.clone(),
56-
udp_core_stats_repository: udp_core_stats_repository.clone(),
57-
ban_service: ban_service.clone(),
58-
connect_service: connect_service.clone(),
59-
announce_service: announce_service.clone(),
60-
scrape_service: scrape_service.clone(),
93+
Arc::new(Self {
94+
udp_core_stats_event_sender,
95+
udp_core_stats_repository,
96+
udp_ban_service: ban_service,
97+
udp_connect_service: connect_service,
98+
udp_announce_service: announce_service,
99+
udp_scrape_service: scrape_service,
61100
})
62101
}
63102
}

packages/udp-tracker-server/src/environment.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,8 @@ impl EnvContainer {
131131
let udp_tracker_config = Arc::new(udp_tracker_configurations[0].clone());
132132

133133
let tracker_core_container = Arc::new(TrackerCoreContainer::initialize(&core_config));
134-
let udp_tracker_core_container = UdpTrackerCoreContainer::initialize_from(&tracker_core_container, &udp_tracker_config);
134+
let udp_tracker_core_container =
135+
UdpTrackerCoreContainer::initialize_from_tracker_core(&tracker_core_container, &udp_tracker_config);
135136
let udp_tracker_server_container = UdpTrackerServerContainer::initialize(&core_config);
136137

137138
Self {

src/container.rs

Lines changed: 12 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,8 @@ use std::sync::Arc;
44

55
use bittorrent_http_tracker_core::container::{HttpTrackerCoreContainer, HttpTrackerCoreServices};
66
use bittorrent_tracker_core::container::TrackerCoreContainer;
7-
use bittorrent_udp_tracker_core::container::UdpTrackerCoreContainer;
8-
use bittorrent_udp_tracker_core::services::banning::BanService;
9-
use bittorrent_udp_tracker_core::{self, MAX_CONNECTION_ID_ERRORS_PER_IP};
10-
use tokio::sync::RwLock;
7+
use bittorrent_udp_tracker_core::container::{UdpTrackerCoreContainer, UdpTrackerCoreServices};
8+
use bittorrent_udp_tracker_core::{self};
119
use torrust_rest_tracker_api_core::container::TrackerHttpApiCoreContainer;
1210
use torrust_tracker_configuration::{Configuration, HttpApi};
1311
use torrust_udp_tracker_server::container::UdpTrackerServerContainer;
@@ -26,14 +24,7 @@ pub struct AppContainer {
2624
pub tracker_core_container: Arc<TrackerCoreContainer>,
2725
pub http_api_config: Arc<Option<HttpApi>>,
2826
pub http_tracker_core_services: Arc<HttpTrackerCoreServices>,
29-
30-
// UDP Tracker Core Services
31-
pub udp_core_stats_event_sender: Arc<Option<Box<dyn bittorrent_udp_tracker_core::event::sender::Sender>>>,
32-
pub udp_core_stats_repository: Arc<bittorrent_udp_tracker_core::statistics::repository::Repository>,
33-
pub udp_ban_service: Arc<RwLock<BanService>>,
34-
pub udp_connect_service: Arc<bittorrent_udp_tracker_core::services::connect::ConnectService>,
35-
pub udp_announce_service: Arc<bittorrent_udp_tracker_core::services::announce::AnnounceService>,
36-
pub udp_scrape_service: Arc<bittorrent_udp_tracker_core::services::scrape::ScrapeService>,
27+
pub udp_tracker_core_services: Arc<UdpTrackerCoreServices>,
3728

3829
// UDP Tracker Server Services
3930
pub udp_server_stats_event_sender: Arc<Option<Box<dyn torrust_udp_tracker_server::event::sender::Sender>>>,
@@ -58,24 +49,7 @@ impl AppContainer {
5849

5950
let http_tracker_core_services = HttpTrackerCoreServices::initialize_from(&tracker_core_container);
6051

61-
// UDP Tracker Core Services
62-
let (udp_core_stats_event_sender, udp_core_stats_repository) =
63-
bittorrent_udp_tracker_core::statistics::setup::factory(configuration.core.tracker_usage_statistics);
64-
let udp_core_stats_event_sender = Arc::new(udp_core_stats_event_sender);
65-
let udp_core_stats_repository = Arc::new(udp_core_stats_repository);
66-
let udp_ban_service = Arc::new(RwLock::new(BanService::new(MAX_CONNECTION_ID_ERRORS_PER_IP)));
67-
let udp_connect_service = Arc::new(bittorrent_udp_tracker_core::services::connect::ConnectService::new(
68-
udp_core_stats_event_sender.clone(),
69-
));
70-
let udp_announce_service = Arc::new(bittorrent_udp_tracker_core::services::announce::AnnounceService::new(
71-
tracker_core_container.announce_handler.clone(),
72-
tracker_core_container.whitelist_authorization.clone(),
73-
udp_core_stats_event_sender.clone(),
74-
));
75-
let udp_scrape_service = Arc::new(bittorrent_udp_tracker_core::services::scrape::ScrapeService::new(
76-
tracker_core_container.scrape_handler.clone(),
77-
udp_core_stats_event_sender.clone(),
78-
));
52+
let udp_tracker_core_services = UdpTrackerCoreServices::initialize_from(&tracker_core_container);
7953

8054
// UDP Tracker Server Services
8155
let (udp_server_stats_event_sender, udp_server_stats_repository) =
@@ -114,16 +88,11 @@ impl AppContainer {
11488
for udp_tracker_config in udp_trackers {
11589
udp_tracker_containers.insert(
11690
udp_tracker_config.bind_address,
117-
Arc::new(UdpTrackerCoreContainer {
118-
tracker_core_container: tracker_core_container.clone(),
119-
udp_tracker_config: Arc::new(udp_tracker_config.clone()),
120-
udp_core_stats_event_sender: udp_core_stats_event_sender.clone(),
121-
udp_core_stats_repository: udp_core_stats_repository.clone(),
122-
ban_service: udp_ban_service.clone(),
123-
connect_service: udp_connect_service.clone(),
124-
announce_service: udp_announce_service.clone(),
125-
scrape_service: udp_scrape_service.clone(),
126-
}),
91+
UdpTrackerCoreContainer::initialize_from_services(
92+
&tracker_core_container,
93+
&udp_tracker_core_services,
94+
&Arc::new(udp_tracker_config.clone()),
95+
),
12796
);
12897
}
12998
}
@@ -134,14 +103,7 @@ impl AppContainer {
134103
tracker_core_container,
135104
http_api_config,
136105
http_tracker_core_services,
137-
138-
// UDP Tracker Core Services
139-
udp_core_stats_event_sender,
140-
udp_core_stats_repository,
141-
udp_ban_service,
142-
udp_connect_service,
143-
udp_announce_service,
144-
udp_scrape_service,
106+
udp_tracker_core_services,
145107

146108
// UDP Tracker Server Services
147109
udp_server_stats_event_sender,
@@ -188,9 +150,9 @@ impl AppContainer {
188150
TrackerHttpApiCoreContainer {
189151
tracker_core_container: self.tracker_core_container.clone(),
190152
http_api_config: http_api_config.clone(),
191-
ban_service: self.udp_ban_service.clone(),
153+
ban_service: self.udp_tracker_core_services.udp_ban_service.clone(),
192154
http_stats_repository: self.http_tracker_core_services.http_stats_repository.clone(),
193-
udp_core_stats_repository: self.udp_core_stats_repository.clone(),
155+
udp_core_stats_repository: self.udp_tracker_core_services.udp_core_stats_repository.clone(),
194156
udp_server_stats_repository: self.udp_server_stats_repository.clone(),
195157
}
196158
.into()

0 commit comments

Comments
 (0)