11use crate :: {
22 http:: EspConnectInfo ,
3- structs:: { SharedAppState , TimerPacket } ,
3+ structs:: { SharedAppState , TimerPacket , TimerPacketInner } ,
44} ;
55use anyhow:: Result ;
66use axum:: extract:: ws:: { Message , WebSocket } ;
@@ -97,18 +97,22 @@ async fn send_device_status(
9797 let state = state. inner . read ( ) . await ;
9898 let settings = state. devices_settings . get ( & esp_connect_info. id ) ;
9999 let frame = if let Some ( settings) = settings {
100- TimerPacket :: DeviceSettings {
101- esp_id : esp_connect_info. id ,
102- use_inspection : settings. use_inspection ,
103- secondary_text : settings. secondary_text . clone ( ) ,
104- added : true ,
100+ TimerPacket {
101+ tag : None ,
102+ data : TimerPacketInner :: DeviceSettings {
103+ use_inspection : settings. use_inspection ,
104+ secondary_text : settings. secondary_text . clone ( ) ,
105+ added : true ,
106+ } ,
105107 }
106108 } else {
107- TimerPacket :: DeviceSettings {
108- esp_id : esp_connect_info. id ,
109- use_inspection : false ,
110- secondary_text : "" . to_string ( ) ,
111- added : false ,
109+ TimerPacket {
110+ tag : None ,
111+ data : TimerPacketInner :: DeviceSettings {
112+ use_inspection : false ,
113+ secondary_text : "" . to_string ( ) ,
114+ added : false ,
115+ } ,
112116 }
113117 } ;
114118
@@ -118,10 +122,13 @@ async fn send_device_status(
118122}
119123
120124async fn send_epoch_time ( socket : & mut WebSocket ) -> Result < ( ) > {
121- let packet = TimerPacket :: EpochTime {
122- current_epoch : std:: time:: SystemTime :: now ( )
123- . duration_since ( std:: time:: UNIX_EPOCH ) ?
124- . as_secs ( ) ,
125+ let packet = TimerPacket {
126+ tag : None ,
127+ data : TimerPacketInner :: EpochTime {
128+ current_epoch : std:: time:: SystemTime :: now ( )
129+ . duration_since ( std:: time:: UNIX_EPOCH ) ?
130+ . as_secs ( ) ,
131+ } ,
125132 } ;
126133
127134 let resp = serde_json:: to_string ( & packet) ?;
@@ -147,7 +154,7 @@ async fn on_ws_msg(
147154 tracing:: trace!( "WS payload recv [{}]: {payload}" , esp_connect_info. id) ;
148155
149156 let response: TimerPacket = serde_json:: from_str ( & payload) ?;
150- let res = on_timer_response ( socket, response) . await ;
157+ let res = on_timer_response ( socket, response, esp_connect_info ) . await ;
151158 if let Err ( e) = res {
152159 error ! ( "on_timer_response error: {e:?}" ) ;
153160 }
@@ -161,17 +168,25 @@ async fn on_ws_msg(
161168 Ok ( false )
162169}
163170
164- async fn on_timer_response ( socket : & mut WebSocket , response : TimerPacket ) -> Result < ( ) > {
165- match response {
166- TimerPacket :: CardInfoRequest {
171+ async fn on_timer_response (
172+ socket : & mut WebSocket ,
173+ response : TimerPacket ,
174+ esp_connect_info : & EspConnectInfo ,
175+ ) -> Result < ( ) > {
176+ let esp_id = esp_connect_info. id ;
177+
178+ match response. data {
179+ TimerPacketInner :: CardInfoRequest {
167180 card_id,
168- esp_id,
169181 attendance_device,
170182 } => {
171183 let attendance_device = attendance_device. unwrap_or ( false ) ;
172184 if attendance_device {
173185 _ = crate :: socket:: api:: mark_attendance ( esp_id, card_id) . await ;
174- let resp = serde_json:: to_string ( & TimerPacket :: AttendanceMarked { esp_id } ) ?;
186+ let resp = serde_json:: to_string ( & TimerPacket {
187+ tag : response. tag ,
188+ data : TimerPacketInner :: AttendanceMarked ,
189+ } ) ?;
175190 socket. send ( Message :: Text ( resp) ) . await ?;
176191
177192 return Ok ( ( ) ) ;
@@ -185,32 +200,35 @@ async fn on_timer_response(socket: &mut WebSocket, response: TimerPacket) -> Res
185200 } ;
186201
187202 trace ! ( "Card info: {} {} {:?}" , card_id, esp_id, info) ;
188- let response = TimerPacket :: CardInfoResponse {
189- card_id,
190- esp_id,
191- country_iso2 : info. country_iso2 . unwrap_or_default ( ) ,
192- display : format ! ( "{}{}" , info. name, registrant_display) ,
193- can_compete : info. can_compete ,
203+ let response = TimerPacket {
204+ tag : response. tag ,
205+ data : TimerPacketInner :: CardInfoResponse {
206+ card_id,
207+ country_iso2 : info. country_iso2 . unwrap_or_default ( ) ,
208+ display : format ! ( "{}{}" , info. name, registrant_display) ,
209+ can_compete : info. can_compete ,
210+ } ,
194211 } ;
195212
196213 response
197214 }
198- Err ( e) => TimerPacket :: ApiError {
199- esp_id,
200- error : e. message ,
201- should_reset_time : e. should_reset_time ,
215+ Err ( e) => TimerPacket {
216+ tag : response. tag ,
217+ data : TimerPacketInner :: ApiError {
218+ error : e. message ,
219+ should_reset_time : e. should_reset_time ,
220+ } ,
202221 } ,
203222 } ;
204223
205224 let response = serde_json:: to_string ( & response) ?;
206225 socket. send ( Message :: Text ( response) ) . await ?;
207226 }
208- TimerPacket :: Solve {
227+ TimerPacketInner :: Solve {
209228 solve_time,
210229 penalty,
211230 competitor_id,
212231 judge_id,
213- esp_id,
214232 timestamp,
215233 session_id,
216234 delegate,
@@ -237,23 +255,27 @@ async fn on_timer_response(socket: &mut WebSocket, response: TimerPacket) -> Res
237255 return Ok ( ( ) ) ;
238256 }
239257
240- TimerPacket :: SolveConfirm {
241- esp_id,
242- session_id,
243- competitor_id,
258+ TimerPacket {
259+ tag : response. tag ,
260+ data : TimerPacketInner :: SolveConfirm {
261+ session_id,
262+ competitor_id,
263+ } ,
244264 }
245265 }
246- Err ( e) => TimerPacket :: ApiError {
247- esp_id,
248- error : e. message ,
249- should_reset_time : e. should_reset_time ,
266+ Err ( e) => TimerPacket {
267+ tag : response. tag ,
268+ data : TimerPacketInner :: ApiError {
269+ error : e. message ,
270+ should_reset_time : e. should_reset_time ,
271+ } ,
250272 } ,
251273 } ;
252274
253275 let response = serde_json:: to_string ( & resp) ?;
254276 socket. send ( Message :: Text ( response) ) . await ?;
255277 }
256- TimerPacket :: Logs { logs, esp_id } => {
278+ TimerPacketInner :: Logs { logs } => {
257279 for log in logs. iter ( ) . rev ( ) {
258280 for line in log. msg . lines ( ) {
259281 if line. is_empty ( ) {
@@ -264,21 +286,17 @@ async fn on_timer_response(socket: &mut WebSocket, response: TimerPacket) -> Res
264286 }
265287 }
266288 }
267- TimerPacket :: Battery {
268- esp_id,
269- level,
270- voltage : _,
271- } => {
289+ TimerPacketInner :: Battery { level, voltage : _ } => {
272290 _ = crate :: socket:: api:: send_battery_status ( esp_id, level) . await ;
273291 }
274- TimerPacket :: Add { esp_id , firmware } => {
292+ TimerPacketInner :: Add { firmware } => {
275293 _ = crate :: socket:: api:: add_device ( esp_id, & firmware) . await ;
276294 trace ! ( "Add device: {}" , esp_id) ;
277295 }
278- TimerPacket :: Snapshot ( data) => {
296+ TimerPacketInner :: Snapshot ( data) => {
279297 _ = crate :: socket:: api:: send_snapshot_data ( data) . await ;
280298 }
281- TimerPacket :: TestAck { esp_id } => {
299+ TimerPacketInner :: TestAck => {
282300 _ = crate :: socket:: api:: send_test_ack ( esp_id) . await ;
283301 }
284302 _ => {
0 commit comments