Skip to main content

bacnet_server/server/
shutdown.rs

1use super::*;
2
3impl<T: TransportPort + 'static> BACnetServer<T> {
4    /// Stop the server.
5    pub async fn stop(&mut self) -> Result<(), Error> {
6        self.notification_transactions.close();
7        if let Some(task) = self.fault_detection_task.take() {
8            task.abort();
9            let _ = task.await;
10        }
11        if let Some(task) = self.event_enrollment_task.take() {
12            task.abort();
13            let _ = task.await;
14        }
15        if let Some(task) = self.trend_log_task.take() {
16            task.abort();
17            let _ = task.await;
18        }
19        if let Some(task) = self.schedule_tick_task.take() {
20            task.abort();
21            let _ = task.await;
22        }
23        if let Some(task) = self.intrinsic_reporting_task.take() {
24            task.abort();
25            let _ = task.await;
26        }
27        if let Some(task) = self.binary_lighting_operation_task.take() {
28            task.abort();
29            let _ = task.await;
30        }
31        if let Some(task) = self.cov_purge_task.take() {
32            task.abort();
33            let _ = task.await;
34        }
35        if let Some(task) = self.dispatch_task.take() {
36            task.abort();
37            let _ = task.await;
38        }
39        Ok(())
40    }
41}
42
43impl<T: TransportPort> Drop for BACnetServer<T> {
44    fn drop(&mut self) {
45        self.notification_transactions.close();
46    }
47}