1
- use crate :: device:: manager:: ManagerActorHandler ;
1
+ use crate :: device:: manager:: { ManagerActorHandler , UuidWrapper } ;
2
2
use crate :: server:: protocols:: v1:: errors:: Error ;
3
3
use actix_web:: Responder ;
4
4
use mime_guess:: from_path;
@@ -9,6 +9,7 @@ use paperclip::actix::{
9
9
} ;
10
10
use serde:: { Deserialize , Serialize } ;
11
11
use serde_json:: json;
12
+ use uuid:: Uuid ;
12
13
13
14
#[ derive( rust_embed:: RustEmbed ) ]
14
15
#[ folder = "src/server/protocols/v1/frontend" ]
@@ -46,6 +47,12 @@ async fn server_metadata() -> Result<Json<ServerMetadata>, Error> {
46
47
pub fn register_services ( cfg : & mut web:: ServiceConfig ) {
47
48
cfg. service ( index)
48
49
. service ( post_request)
50
+ . service ( device_manager_get)
51
+ . service ( device_manager_post)
52
+ . service ( device_manager_device_get)
53
+ . service ( device_manager_device_ping1d_get)
54
+ . service ( device_manager_device_ping360_get)
55
+ . service ( device_manager_device_common_get)
49
56
. service ( index_files) ;
50
57
}
51
58
@@ -64,6 +71,162 @@ async fn post_request(
64
71
65
72
Ok ( Json ( answer) )
66
73
}
74
+
75
+ #[ derive( Debug , Clone , Serialize , Deserialize , Apiv2Schema ) ]
76
+ pub enum DeviceManagerGetOptionsV1 {
77
+ AutoCreate ,
78
+ List ,
79
+ Search ,
80
+ }
81
+
82
+ #[ derive( Debug , Clone , Serialize , Deserialize , Apiv2Schema ) ]
83
+ pub enum DeviceManagerPostOptionsV1 {
84
+ Delete ,
85
+ Info ,
86
+ EnableContinuousMode ,
87
+ DisableContinuousMode ,
88
+ }
89
+
90
+ #[ derive( Debug , Clone , Serialize , Deserialize , Apiv2Schema ) ]
91
+ pub enum DeviceManagerDeviceRequestGetOptionsV1 {
92
+ Delete ,
93
+ Info ,
94
+ EnableContinuousMode ,
95
+ DisableContinuousMode ,
96
+ }
97
+
98
+ #[ api_v2_operation]
99
+ #[ get( "device_manager/{selection}" ) ]
100
+ async fn device_manager_get (
101
+ manager_handler : web:: Data < ManagerActorHandler > ,
102
+ selection : web:: Path < DeviceManagerGetOptionsV1 > ,
103
+ ) -> Result < Json < crate :: device:: manager:: Answer > , Error > {
104
+ let request = match selection. into_inner ( ) {
105
+ DeviceManagerGetOptionsV1 :: AutoCreate => crate :: device:: manager:: Request :: AutoCreate ,
106
+ DeviceManagerGetOptionsV1 :: List => crate :: device:: manager:: Request :: List ,
107
+ DeviceManagerGetOptionsV1 :: Search => crate :: device:: manager:: Request :: Search ,
108
+ } ;
109
+
110
+ let answer = manager_handler. send ( request) . await ?;
111
+
112
+ // Broadcast the results to webscoket clients.
113
+ crate :: server:: protocols:: v1:: websocket:: send_to_websockets ( json ! ( answer) , None ) ;
114
+
115
+ Ok ( Json ( answer) )
116
+ }
117
+
118
+ #[ api_v2_operation]
119
+ #[ post( "device_manager/{device}/{selection}" ) ]
120
+ async fn device_manager_post (
121
+ manager_handler : web:: Data < ManagerActorHandler > ,
122
+ info : web:: Path < ( Uuid , DeviceManagerPostOptionsV1 ) > ,
123
+ ) -> Result < Json < crate :: device:: manager:: Answer > , Error > {
124
+ let info = info. into_inner ( ) ;
125
+ let uuid = info. 0 ;
126
+ let request = info. 1 ;
127
+
128
+ let request = match request {
129
+ DeviceManagerPostOptionsV1 :: Delete => crate :: device:: manager:: Request :: Delete ( uuid. into ( ) ) ,
130
+ DeviceManagerPostOptionsV1 :: Info => crate :: device:: manager:: Request :: Info ( uuid. into ( ) ) ,
131
+ DeviceManagerPostOptionsV1 :: EnableContinuousMode => crate :: device:: manager:: Request :: EnableContinuousMode ( uuid. into ( ) ) ,
132
+ DeviceManagerPostOptionsV1 :: DisableContinuousMode => crate :: device:: manager:: Request :: DisableContinuousMode ( uuid. into ( ) ) ,
133
+ } ;
134
+
135
+ let answer = manager_handler. send ( request) . await ?;
136
+
137
+ // Broadcast the results to webscoket clients.
138
+ crate :: server:: protocols:: v1:: websocket:: send_to_websockets ( json ! ( answer) , None ) ;
139
+
140
+ Ok ( Json ( answer) )
141
+ }
142
+
143
+ #[ api_v2_operation]
144
+ #[ get( "device_manager/{device}/{request}" ) ]
145
+ async fn device_manager_device_get (
146
+ manager_handler : web:: Data < ManagerActorHandler > ,
147
+ info : web:: Path < ( Uuid , crate :: device:: devices:: PingRequest ) > ,
148
+ ) -> Result < Json < crate :: device:: manager:: Answer > , Error > {
149
+ let info = info. into_inner ( ) ;
150
+ let uuid = info. 0 ;
151
+ let request = info. 1 ;
152
+
153
+ let request = crate :: device:: manager:: Request :: Ping ( crate :: device:: manager:: DeviceRequestStruct { uuid : uuid, device_request : request} ) ;
154
+
155
+
156
+ let answer = manager_handler. send ( request) . await ?;
157
+
158
+ // Broadcast the results to webscoket clients.
159
+ crate :: server:: protocols:: v1:: websocket:: send_to_websockets ( json ! ( answer) , None ) ;
160
+
161
+ Ok ( Json ( answer) )
162
+ }
163
+
164
+ #[ api_v2_operation]
165
+ #[ get( "device_manager/{device}/ping1d/{request}" ) ]
166
+ async fn device_manager_device_ping1d_get (
167
+ manager_handler : web:: Data < ManagerActorHandler > ,
168
+ info : web:: Path < ( Uuid , crate :: device:: devices:: Ping1DRequest ) > ,
169
+ ) -> Result < Json < crate :: device:: manager:: Answer > , Error > {
170
+ let info = info. into_inner ( ) ;
171
+ let uuid = info. 0 ;
172
+ let request = info. 1 ;
173
+
174
+ let request = crate :: device:: devices:: PingRequest :: Ping1D ( request) ;
175
+
176
+ let request = crate :: device:: manager:: Request :: Ping ( crate :: device:: manager:: DeviceRequestStruct { uuid : uuid. into ( ) , device_request : request} ) ;
177
+
178
+ let answer = manager_handler. send ( request) . await ?;
179
+
180
+ // Broadcast the results to webscoket clients.
181
+ crate :: server:: protocols:: v1:: websocket:: send_to_websockets ( json ! ( answer) , None ) ;
182
+
183
+ Ok ( Json ( answer) )
184
+ }
185
+
186
+ #[ api_v2_operation]
187
+ #[ get( "device_manager/{device}/ping360/{request}" ) ]
188
+ async fn device_manager_device_ping360_get (
189
+ manager_handler : web:: Data < ManagerActorHandler > ,
190
+ info : web:: Path < ( Uuid , crate :: device:: devices:: Ping360Request ) > ,
191
+ ) -> Result < Json < crate :: device:: manager:: Answer > , Error > {
192
+ let info = info. into_inner ( ) ;
193
+ let uuid = info. 0 ;
194
+ let request = info. 1 ;
195
+
196
+ let request = crate :: device:: devices:: PingRequest :: Ping360 ( request) ;
197
+
198
+ let request = crate :: device:: manager:: Request :: Ping ( crate :: device:: manager:: DeviceRequestStruct { uuid : uuid. into ( ) , device_request : request} ) ;
199
+
200
+ let answer = manager_handler. send ( request) . await ?;
201
+
202
+ // Broadcast the results to webscoket clients.
203
+ crate :: server:: protocols:: v1:: websocket:: send_to_websockets ( json ! ( answer) , None ) ;
204
+
205
+ Ok ( Json ( answer) )
206
+ }
207
+
208
+ #[ api_v2_operation]
209
+ #[ get( "device_manager/{device}/common/{request}" ) ]
210
+ async fn device_manager_device_common_get (
211
+ manager_handler : web:: Data < ManagerActorHandler > ,
212
+ info : web:: Path < ( Uuid , crate :: device:: devices:: PingCommonRequest ) > ,
213
+ ) -> Result < Json < crate :: device:: manager:: Answer > , Error > {
214
+ let info = info. into_inner ( ) ;
215
+ let uuid = info. 0 ;
216
+ let request = info. 1 ;
217
+
218
+ let request = crate :: device:: devices:: PingRequest :: Common ( request) ;
219
+
220
+ let request = crate :: device:: manager:: Request :: Ping ( crate :: device:: manager:: DeviceRequestStruct { uuid : uuid. into ( ) , device_request : request} ) ;
221
+
222
+ let answer = manager_handler. send ( request) . await ?;
223
+
224
+ // Broadcast the results to webscoket clients.
225
+ crate :: server:: protocols:: v1:: websocket:: send_to_websockets ( json ! ( answer) , None ) ;
226
+
227
+ Ok ( Json ( answer) )
228
+ }
229
+
67
230
#[ derive( Debug , Serialize , Deserialize , Apiv2Schema ) ]
68
231
pub struct ServerMetadata {
69
232
pub name : & ' static str ,
0 commit comments