@@ -248,6 +248,13 @@ impl Server {
248248 self . lan_discovery_enabled = enable;
249249 }
250250
251+ /// Check if we have at least one node in good state.
252+ pub fn is_connected ( & self ) -> bool {
253+ self . close_nodes . read ( )
254+ . iter ( )
255+ . any ( |node| !node. is_bad ( ) )
256+ }
257+
251258 /// Get closest nodes from both close_nodes and friend's close_nodes
252259 fn get_closest_inner (
253260 close_nodes : & Ktree ,
@@ -1492,6 +1499,10 @@ mod tests {
14921499 pub fn has_friend ( & self , pk : & PublicKey ) -> bool {
14931500 self . friends . read ( ) . contains_key ( pk)
14941501 }
1502+
1503+ pub fn add_node ( & self , node : PackedNode ) {
1504+ assert ! ( self . close_nodes. write( ) . try_add( node) ) ;
1505+ }
14951506 }
14961507
14971508 fn create_node ( ) -> ( Server , PrecomputedKey , PublicKey , SecretKey ,
@@ -3737,4 +3748,13 @@ mod tests {
37373748 assert_eq ! ( nodes. len( ) , FAKE_FRIENDS_NUMBER - 1 ) ;
37383749 assert ! ( !nodes. contains( & node) ) ;
37393750 }
3751+
3752+ #[ test]
3753+ fn is_connected ( ) {
3754+ let ( alice, _precomp, _bob_pk, _bob_sk, _rx, _addr) = create_node ( ) ;
3755+
3756+ assert ! ( !alice. is_connected( ) ) ;
3757+ alice. add_node ( PackedNode :: new ( "127.0.0.1:12345" . parse ( ) . unwrap ( ) , & gen_keypair ( ) . 0 ) ) ;
3758+ assert ! ( alice. is_connected( ) ) ;
3759+ }
37403760}
0 commit comments