@@ -41,6 +41,7 @@ class NsdServiceFinderAndResolver implements NsdManager.DiscoveryListener {
41
41
private final ChipMdnsCallback chipMdnsCallback ;
42
42
private final MulticastLock multicastLock ;
43
43
private final ScheduledFuture <?> resolveTimeoutExecutor ;
44
+ private NsdServiceInfo discoveredServiceInfo = null ;
44
45
45
46
@ Nullable
46
47
private final NsdManagerServiceResolver .NsdManagerResolverAvailState nsdManagerResolverAvailState ;
@@ -94,14 +95,14 @@ public void run() {
94
95
95
96
@ Override
96
97
public void onServiceFound (NsdServiceInfo service ) {
97
- if (targetServiceInfo .getServiceName ().equals (service .getServiceName ())) {
98
+ if (discoveredServiceInfo == null
99
+ && targetServiceInfo .getServiceName ().equals (service .getServiceName ())) {
98
100
Log .d (TAG , "onServiceFound: found target service " + service );
99
101
100
102
if (stopDiscoveryRunnable .cancel (false )) {
101
103
nsdManager .stopServiceDiscovery (this );
102
104
}
103
-
104
- resolveService (service , callbackHandle , contextHandle , chipMdnsCallback );
105
+ discoveredServiceInfo = service ;
105
106
} else {
106
107
Log .d (TAG , "onServiceFound: found service not a target for resolution, ignoring " + service );
107
108
}
@@ -206,7 +207,13 @@ public void onServiceLost(NsdServiceInfo service) {
206
207
207
208
@ Override
208
209
public void onDiscoveryStopped (String serviceType ) {
209
- Log .i (TAG , "Discovery stopped: " + serviceType );
210
+ Log .i (
211
+ TAG ,
212
+ "Discovery stopped: " + serviceType + ", discoveredServiceInfo: " + discoveredServiceInfo );
213
+ if (discoveredServiceInfo != null ) {
214
+ resolveService (discoveredServiceInfo , callbackHandle , contextHandle , chipMdnsCallback );
215
+ discoveredServiceInfo = null ;
216
+ }
210
217
}
211
218
212
219
@ Override
0 commit comments