@@ -26,7 +26,7 @@ use crate::{
2626 error:: Error ,
2727 routes:: charger:: charger_belongs_to_user,
2828 utils:: { get_connection, web_block_unpacked} ,
29- AppState ,
29+ AppState , BridgeState ,
3030} ;
3131
3232#[ derive( Debug , Deserialize , Serialize , ToSchema ) ]
@@ -81,6 +81,20 @@ pub async fn delete_charger(charger: i32, state: &web::Data<AppState>) -> actix_
8181 Ok ( ( ) )
8282}
8383
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+
8498#[ utoipa:: path(
8599 context_path = "/charger" ,
86100 request_body = DeleteChargerSchema ,
@@ -97,6 +111,7 @@ pub async fn remove(
97111 state : web:: Data < AppState > ,
98112 uid : crate :: models:: uuid:: Uuid ,
99113 data : web:: Json < DeleteChargerSchema > ,
114+ bridge_state : web:: Data < BridgeState > ,
100115) -> Result < impl Responder , actix_web:: Error > {
101116
102117 if !charger_belongs_to_user ( & state, uid. clone ( ) . into ( ) , data. charger . clone ( ) ) . await ? {
@@ -106,6 +121,7 @@ pub async fn remove(
106121 delete_all_keys ( data. charger . clone ( ) , & state) . await ?;
107122 delete_all_allowed_users ( data. charger . clone ( ) , & state) . await ?;
108123 delete_charger ( data. charger , & state) . await ?;
124+ remove_charger_from_state ( data. charger , & bridge_state) ;
109125
110126 Ok ( HttpResponse :: Ok ( ) )
111127}
0 commit comments