torrust_tracker/servers/udp/server/
spawner.rs1use std::net::SocketAddr;
3use std::sync::Arc;
4
5use derive_more::derive::Display;
6use derive_more::Constructor;
7use tokio::sync::oneshot;
8use tokio::task::JoinHandle;
9
10use super::launcher::Launcher;
11use crate::bootstrap::jobs::Started;
12use crate::core::Tracker;
13use crate::servers::signals::Halted;
14
15#[derive(Constructor, Copy, Clone, Debug, Display)]
16#[display("(with socket): {bind_to}")]
17pub struct Spawner {
18 pub bind_to: SocketAddr,
19}
20
21impl Spawner {
22 pub fn spawn_launcher(
28 &self,
29 tracker: Arc<Tracker>,
30 tx_start: oneshot::Sender<Started>,
31 rx_halt: oneshot::Receiver<Halted>,
32 ) -> JoinHandle<Spawner> {
33 let spawner = Self::new(self.bind_to);
34
35 tokio::spawn(async move {
36 Launcher::run_with_graceful_shutdown(tracker, spawner.bind_to, tx_start, rx_halt).await;
37 spawner
38 })
39 }
40}