@@ -26,7 +26,7 @@ use crate::{
26
26
error:: Error ,
27
27
routes:: charger:: charger_belongs_to_user,
28
28
utils:: { get_connection, web_block_unpacked} ,
29
- AppState ,
29
+ AppState , BridgeState ,
30
30
} ;
31
31
32
32
#[ derive( Debug , Deserialize , Serialize , ToSchema ) ]
@@ -81,6 +81,20 @@ pub async fn delete_charger(charger: i32, state: &web::Data<AppState>) -> actix_
81
81
Ok ( ( ) )
82
82
}
83
83
84
+ pub fn remove_charger_from_state ( charger : i32 , state : & web:: Data < BridgeState > ) {
85
+ let socket = {
86
+ let mut map = state. charger_management_map_with_id . lock ( ) . unwrap ( ) ;
87
+ map. remove ( & charger)
88
+ } ;
89
+
90
+ if let Some ( socket) = socket {
91
+ let socket = socket. lock ( ) . unwrap ( ) ;
92
+ let remote_address = socket. get_remote_address ( ) ;
93
+ let mut map = state. charger_management_map . lock ( ) . unwrap ( ) ;
94
+ let _ = map. remove ( & remote_address) ;
95
+ }
96
+ }
97
+
84
98
#[ utoipa:: path(
85
99
context_path = "/charger" ,
86
100
request_body = DeleteChargerSchema ,
@@ -97,6 +111,7 @@ pub async fn remove(
97
111
state : web:: Data < AppState > ,
98
112
uid : crate :: models:: uuid:: Uuid ,
99
113
data : web:: Json < DeleteChargerSchema > ,
114
+ bridge_state : web:: Data < BridgeState > ,
100
115
) -> Result < impl Responder , actix_web:: Error > {
101
116
102
117
if !charger_belongs_to_user ( & state, uid. clone ( ) . into ( ) , data. charger . clone ( ) ) . await ? {
@@ -106,6 +121,7 @@ pub async fn remove(
106
121
delete_all_keys ( data. charger . clone ( ) , & state) . await ?;
107
122
delete_all_allowed_users ( data. charger . clone ( ) , & state) . await ?;
108
123
delete_charger ( data. charger , & state) . await ?;
124
+ remove_charger_from_state ( data. charger , & bridge_state) ;
109
125
110
126
Ok ( HttpResponse :: Ok ( ) )
111
127
}
0 commit comments