Skip to content

Commit

Permalink
Queue resolver calls
Browse files Browse the repository at this point in the history
Signed-off-by: Jonathan Bagg <[email protected]>
  • Loading branch information
mzanetti authored and jbagg committed May 22, 2023
1 parent 3f56503 commit 966877a
Showing 1 changed file with 31 additions and 2 deletions.
33 changes: 31 additions & 2 deletions QZeroConfNsdManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
package qtzeroconf;

import java.util.Map;
import java.util.ArrayList;

import android.util.Log;

Expand All @@ -52,6 +53,10 @@ public class QZeroConfNsdManager {
private NsdManager.RegistrationListener registrationListener;
private String registrationName; // The original service name that was given for registration, it might change on collisions

// There can only be one resolver at a time per application, we'll need to queue the resolving
static private ArrayList<NsdServiceInfo> resolverQueue = new ArrayList<NsdServiceInfo>();
static private NsdServiceInfo pendingResolve = null;

public QZeroConfNsdManager(int id, Context context) {
super();
this.id = id;
Expand Down Expand Up @@ -103,7 +108,7 @@ public void onDiscoveryStarted(String regType) {

@Override
public void onServiceFound(NsdServiceInfo service) {
nsdManager.resolveService(service, initializeResolveListener());
enqueueResolver(service);
}

@Override
Expand Down Expand Up @@ -133,7 +138,12 @@ private NsdManager.ResolveListener initializeResolveListener() {

@Override
public void onResolveFailed(NsdServiceInfo serviceInfo, int errorCode) {
Log.d(TAG, "Resolving failed for: " + serviceInfo.getServiceName() + " " + serviceInfo.getServiceType() + ": " + errorCode);
Log.w(TAG, "Resolving failed for: " + serviceInfo.getServiceName() + " " + serviceInfo.getServiceType() + ": " + errorCode);
if (errorCode == NsdManager.FAILURE_ALREADY_ACTIVE) {
enqueueResolver(pendingResolve);
}
pendingResolve = null;
processResolverQueue();
}

@Override
Expand All @@ -146,6 +156,8 @@ public void onServiceResolved(NsdServiceInfo serviceInfo) {
serviceInfo.getPort(),
serviceInfo.getAttributes()
);
pendingResolve = null;
processResolverQueue();
}
};
}
Expand Down Expand Up @@ -177,4 +189,21 @@ public void onUnregistrationFailed(NsdServiceInfo serviceInfo, int errorCode) {
}
};
}

private void enqueueResolver(NsdServiceInfo serviceInfo) {
resolverQueue.add(serviceInfo);
processResolverQueue();
}

private void processResolverQueue() {
if (resolverQueue.isEmpty()) {
return;
}
if (pendingResolve != null) {
return;
}
pendingResolve = resolverQueue.get(0);
resolverQueue.remove(0);
nsdManager.resolveService(pendingResolve, initializeResolveListener());
}
}

0 comments on commit 966877a

Please sign in to comment.