udp/server/controller_data/
impl.rs

1use crate::*;
2
3impl InnerControllerData {
4    #[inline]
5    pub fn new() -> Self {
6        InnerControllerData {
7            socket: None,
8            request: Request::new(),
9            response: Response::default(),
10            log: Log::default(),
11            socket_addr: None,
12        }
13    }
14}
15
16impl ControllerData {
17    #[inline]
18    pub(crate) fn from_controller_data(controller_data: InnerControllerData) -> Self {
19        Self(Arc::new(RwLock::new(controller_data)))
20    }
21
22    #[inline]
23    pub async fn get_read_lock(&self) -> RwLockReadControllerData {
24        let controller_data: RwLockReadControllerData = self.0.read().await;
25        controller_data
26    }
27
28    #[inline]
29    pub async fn get_write_lock(&self) -> RwLockWriteControllerData {
30        let controller_data: RwLockWriteControllerData = self.0.write().await;
31        controller_data
32    }
33
34    #[inline]
35    pub async fn get(&self) -> InnerControllerData {
36        let controller_data: InnerControllerData = self.get_read_lock().await.clone();
37        controller_data
38    }
39
40    #[inline]
41    pub async fn get_request(&self) -> Request {
42        let controller_data: InnerControllerData = self.get().await;
43        controller_data.get_request().clone()
44    }
45
46    #[inline]
47    pub async fn get_response(&self) -> Response {
48        let controller_data: InnerControllerData = self.get().await;
49        controller_data.get_response().clone()
50    }
51
52    #[inline]
53    pub async fn get_log(&self) -> Log {
54        let controller_data: InnerControllerData = self.get().await;
55        controller_data.get_log().clone()
56    }
57
58    #[inline]
59    pub async fn get_socket(&self) -> OptionArcRwLockUdpSocket {
60        let controller_data: InnerControllerData = self.get().await;
61        controller_data.get_socket().clone()
62    }
63
64    #[inline]
65    pub async fn get_socket_addr(&self) -> OptionSocketAddr {
66        let controller_data: InnerControllerData = self.get().await;
67        let socket_addr_opt: OptionSocketAddr = controller_data.get_socket_addr().clone();
68        socket_addr_opt
69    }
70
71    #[inline]
72    pub async fn get_socket_addr_or_default(&self) -> SocketAddr {
73        let socket_result: OptionArcRwLockUdpSocket = self.get_socket().await;
74        if socket_result.is_none() {
75            return DEFAULT_SOCKET_ADDR;
76        }
77        let socket_addr: SocketAddr = socket_result
78            .unwrap()
79            .get_read_lock()
80            .await
81            .peer_addr()
82            .unwrap_or(DEFAULT_SOCKET_ADDR);
83        socket_addr
84    }
85
86    #[inline]
87    pub async fn get_socket_addr_string(&self) -> Option<String> {
88        let socket_addr_string_opt: Option<String> =
89            self.get_socket_addr().await.map(|data| data.to_string());
90        socket_addr_string_opt
91    }
92
93    #[inline]
94    pub async fn get_socket_addr_or_default_string(&self) -> String {
95        self.get_socket_addr_or_default().await.to_string()
96    }
97
98    #[inline]
99    pub async fn get_socket_host(&self) -> OptionSocketHost {
100        let addr: OptionSocketAddr = self.get_socket_addr().await;
101        let socket_host_opt: OptionSocketHost =
102            addr.map(|socket_addr: SocketAddr| socket_addr.ip());
103        socket_host_opt
104    }
105
106    #[inline]
107    pub async fn get_socket_port(&self) -> OptionSocketPort {
108        let addr: OptionSocketAddr = self.get_socket_addr().await;
109        let socket_port_opt: OptionSocketPort =
110            addr.map(|socket_addr: SocketAddr| socket_addr.port());
111        socket_port_opt
112    }
113
114    #[inline]
115    pub(super) async fn set_response<T: Into<ResponseData>>(&self, data: T) -> &Self {
116        let mut controller_data: RwLockWriteControllerData = self.get_write_lock().await;
117        controller_data.set_response(server::response::r#type::Response::from(data));
118        self
119    }
120
121    #[inline]
122    pub async fn log_info<T, L>(&self, data: T, func: L) -> &Self
123    where
124        T: LogDataTrait,
125        L: LogFuncTrait,
126    {
127        let controller_data: RwLockReadControllerData = self.get_read_lock().await;
128        let log: &Log = controller_data.get_log();
129        log.info(data, func);
130        self
131    }
132
133    #[inline]
134    pub async fn log_debug<T, L>(&self, data: T, func: L) -> &Self
135    where
136        T: LogDataTrait,
137        L: LogFuncTrait,
138    {
139        let controller_data: RwLockReadControllerData = self.get_read_lock().await;
140        let log: &Log = controller_data.get_log();
141        log.debug(data, func);
142        self
143    }
144
145    #[inline]
146    pub async fn log_error<T, L>(&self, data: T, func: L) -> &Self
147    where
148        T: LogDataTrait,
149        L: LogFuncTrait,
150    {
151        let controller_data: RwLockReadControllerData = self.get_read_lock().await;
152        let log: &Log = controller_data.get_log();
153        log.error(data, func);
154        self
155    }
156
157    #[inline]
158    pub async fn send<T: Into<ResponseData>>(&self, data: T) -> ResponseResult {
159        let response_result: ResponseResult = self
160            .set_response(data)
161            .await
162            .get_response()
163            .await
164            .send(&self.get_socket().await, &self.get_socket_addr().await)
165            .await;
166        return response_result;
167    }
168}