@@ -3,7 +3,7 @@ use crate::net::{FSPeer, Intro};
33use crate :: state:: { NetHandler , State } ;
44use alloc:: boxed:: Box ;
55use alloc:: vec:: Vec ;
6- use firefly_hal:: Device ;
6+ use firefly_hal:: { Device , Network } ;
77
88type C < ' a , ' b > = wasmi:: Caller < ' a , Box < State < ' b > > > ;
99
@@ -272,7 +272,7 @@ pub(crate) fn set_peers(mut caller: C, peer_map: u32) {
272272 return ;
273273 } ;
274274
275- // TODO: do this into a single loop and without Vec.
275+ // TODO: do this in a single loop and without Vec.
276276 let mut to_remove: Vec < usize > = Vec :: new ( ) ;
277277 let mut peer_map = peer_map;
278278 for i in 0 ..connector. peer_infos . len ( ) {
@@ -281,19 +281,27 @@ pub(crate) fn set_peers(mut caller: C, peer_map: u32) {
281281 }
282282 peer_map >>= 1 ;
283283 }
284- to_remove. reverse ( ) ;
285- for i in to_remove {
286- let res = connector. send_disconnect_to ( & mut state. device , i) ;
287- if let Err ( err) = res {
288- state. device . log_error ( "netcode" , err) ;
284+ if !to_remove. is_empty ( ) {
285+ to_remove. reverse ( ) ;
286+ for i in to_remove {
287+ let res = connector. send_disconnect_to ( & mut state. device , i) ;
288+ if let Err ( err) = res {
289+ state. device . log_error ( "netcode" , err) ;
290+ }
291+ connector. peer_infos . remove ( i) ;
292+ }
293+ // If we sent disconnect to some peers and there are no more peers left
294+ // (which will make us disable networking below), wait a bit to make sure
295+ // the disconnect messages are delivered before we turn off wifi.
296+ if connector. peer_infos . is_empty ( ) {
297+ state. device . delay ( firefly_hal:: Duration :: from_ms ( 50 ) ) ;
289298 }
290- connector. peer_infos . remove ( i) ;
291299 }
292300
293301 if connector. peer_infos . is_empty ( ) {
294302 state. set_next ( None ) ;
295303 state. net_handler . replace ( NetHandler :: None ) ;
296- let res = connector . cancel ( & mut state. device ) ;
304+ let res = state. device . net_stop ( ) ;
297305 if let Err ( err) = res {
298306 state. device . log_error ( "netcode" , err) ;
299307 }
@@ -302,7 +310,6 @@ pub(crate) fn set_peers(mut caller: C, peer_map: u32) {
302310
303311 if let Err ( err) = connector. validate ( ) {
304312 state. device . log_error ( "netcode" , err) ;
305- // state.error = Some(ErrorScene::new(err.to_owned()))
306313 }
307314 state. set_next ( None ) ;
308315 let connection = connector. finalize ( & mut state. device ) ;
0 commit comments