udp/server/controller_data/
impl.rs1use 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}