Skip to content

Commit

Permalink
Fix dnssd callback thread
Browse files Browse the repository at this point in the history
  • Loading branch information
joonhaengHeo committed May 24, 2024
1 parent 57f29a8 commit 48d3da8
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,9 @@ public void onStopDiscoveryFailed(String serviceType, int errorCode) {
@Override
public void onDiscoveryStopped(String serviceType) {
Log.w(TAG, "Successfully stopped discovery service '" + serviceType);
this.handleServiceBrowse(chipMdnsCallback);
new Handler(Looper.getMainLooper()).post(() -> {
this.handleServiceBrowse(chipMdnsCallback);
});
}

public void handleServiceBrowse(ChipMdnsCallback chipMdnsCallback) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
import android.net.nsd.NsdManager;
import android.net.nsd.NsdServiceInfo;
import android.net.wifi.WifiManager.MulticastLock;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import androidx.annotation.Nullable;
import java.util.concurrent.Executors;
Expand Down Expand Up @@ -118,20 +120,22 @@ public void onResolveFailed(NsdServiceInfo serviceInfo, int errorCode) {
Log.w(
TAG,
"Failed to resolve service '" + serviceInfo.getServiceName() + "': " + errorCode);
chipMdnsCallback.handleServiceResolve(
serviceInfo.getServiceName(),
// Use the target service info since the resolved service info sometimes appends a
// "." at the front likely because it is trying to strip the service name out of it
// and something is missed.
// The target service info service type should be effectively the same as the
// resolved service info.
NsdServiceFinderAndResolver.this.targetServiceInfo.getServiceType(),
null,
null,
0,
null,
callbackHandle,
contextHandle);
new Handler(Looper.getMainLooper()).post(() -> {
chipMdnsCallback.handleServiceResolve(
serviceInfo.getServiceName(),
// Use the target service info since the resolved service info sometimes appends a
// "." at the front likely because it is trying to strip the service name out of it
// and something is missed.
// The target service info service type should be effectively the same as the
// resolved service info.
NsdServiceFinderAndResolver.this.targetServiceInfo.getServiceType(),
null,
null,
0,
null,
callbackHandle,
contextHandle);
});

if (multicastLock.isHeld()) {
multicastLock.release();
Expand All @@ -153,21 +157,26 @@ public void onServiceResolved(NsdServiceInfo serviceInfo) {
+ serviceInfo.getHost()
+ ", type : "
+ serviceInfo.getServiceType());
// TODO: Find out if DNS-SD results for Android should contain interface ID
chipMdnsCallback.handleServiceResolve(
serviceInfo.getServiceName(),
// Use the target service info since the resolved service info sometimes appends a
// "." at the front likely because it is trying to strip the service name out of it
// and something is missed.
// The target service info service type should be effectively the same as the
// resolved service info.
NsdServiceFinderAndResolver.this.targetServiceInfo.getServiceType(),
serviceInfo.getHost().getHostName(),
serviceInfo.getHost().getHostAddress(),
serviceInfo.getPort(),
serviceInfo.getAttributes(),
callbackHandle,
contextHandle);
final String hostName = serviceInfo.getHost().getHostName();
final String address = serviceInfo.getHost().getHostAddress();
final int port = serviceInfo.getPort();
new Handler(Looper.getMainLooper()).post(() -> {
// TODO: Find out if DNS-SD results for Android should contain interface ID
chipMdnsCallback.handleServiceResolve(
serviceInfo.getServiceName(),
// Use the target service info since the resolved service info sometimes appends a
// "." at the front likely because it is trying to strip the service name out of it
// and something is missed.
// The target service info service type should be effectively the same as the
// resolved service info.
NsdServiceFinderAndResolver.this.targetServiceInfo.getServiceType(),
hostName,
address,
port,
serviceInfo.getAttributes(),
callbackHandle,
contextHandle);
});

if (multicastLock.isHeld()) {
multicastLock.release();
Expand Down

0 comments on commit 48d3da8

Please sign in to comment.