mirror of
https://github.com/moonlight-stream/moonlight-android.git
synced 2025-07-21 12:03:02 +00:00
Fix interface changes while mDNS resolution is running
This commit is contained in:
parent
dcb3e1c0e4
commit
707c7a1a53
@ -8,6 +8,7 @@ import java.net.InetSocketAddress;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Timer;
|
import java.util.Timer;
|
||||||
import java.util.TimerTask;
|
import java.util.TimerTask;
|
||||||
@ -26,7 +27,7 @@ public class MdnsDiscoveryAgent {
|
|||||||
private HashMap<InetAddress, MdnsComputer> computers;
|
private HashMap<InetAddress, MdnsComputer> computers;
|
||||||
private Timer discoveryTimer;
|
private Timer discoveryTimer;
|
||||||
private MdnsDiscoveryListener listener;
|
private MdnsDiscoveryListener listener;
|
||||||
private ArrayList<String> pendingResolution;
|
private HashSet<String> pendingResolution;
|
||||||
private ServiceListener nvstreamListener = new ServiceListener() {
|
private ServiceListener nvstreamListener = new ServiceListener() {
|
||||||
public void serviceAdded(ServiceEvent event) {
|
public void serviceAdded(ServiceEvent event) {
|
||||||
LimeLog.info("mDNS: Machine appeared: "+event.getInfo().getName());
|
LimeLog.info("mDNS: Machine appeared: "+event.getInfo().getName());
|
||||||
@ -128,26 +129,39 @@ public class MdnsDiscoveryAgent {
|
|||||||
|
|
||||||
private MdnsDiscoveryAgent(MdnsDiscoveryListener listener) {
|
private MdnsDiscoveryAgent(MdnsDiscoveryListener listener) {
|
||||||
computers = new HashMap<InetAddress, MdnsComputer>();
|
computers = new HashMap<InetAddress, MdnsComputer>();
|
||||||
pendingResolution = new ArrayList<String>();
|
pendingResolution = new HashSet<String>();
|
||||||
this.listener = listener;
|
this.listener = listener;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static MdnsDiscoveryAgent createDiscoveryAgent(MdnsDiscoveryListener listener) throws IOException {
|
public static MdnsDiscoveryAgent createDiscoveryAgent(MdnsDiscoveryListener listener) throws IOException {
|
||||||
MdnsDiscoveryAgent agent = new MdnsDiscoveryAgent(listener);
|
MdnsDiscoveryAgent agent = new MdnsDiscoveryAgent(listener);
|
||||||
|
|
||||||
agent.resolver = JmDNS.create(new InetSocketAddress(0).getAddress());
|
|
||||||
|
|
||||||
return agent;
|
return agent;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startDiscovery(final int discoveryIntervalMs) {
|
public void startDiscovery(final int discoveryIntervalMs) {
|
||||||
resolver.addServiceListener(SERVICE_TYPE, nvstreamListener);
|
|
||||||
|
|
||||||
discoveryTimer = new Timer();
|
discoveryTimer = new Timer();
|
||||||
discoveryTimer.schedule(new TimerTask() {
|
discoveryTimer.schedule(new TimerTask() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
// Close the old resolver
|
||||||
|
if (resolver != null) {
|
||||||
|
try {
|
||||||
|
resolver.close();
|
||||||
|
} catch (IOException e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a new resolver
|
||||||
|
try {
|
||||||
|
resolver = JmDNS.create(new InetSocketAddress(0).getAddress());
|
||||||
|
} catch (IOException e) {
|
||||||
|
// This is fine; the network is probably not up
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Send another mDNS query
|
// Send another mDNS query
|
||||||
|
resolver.addServiceListener(SERVICE_TYPE, nvstreamListener);
|
||||||
resolver.requestServiceInfo(SERVICE_TYPE, null, discoveryIntervalMs);
|
resolver.requestServiceInfo(SERVICE_TYPE, null, discoveryIntervalMs);
|
||||||
|
|
||||||
// Run service resolution again for pending machines
|
// Run service resolution again for pending machines
|
||||||
@ -161,12 +175,14 @@ public class MdnsDiscoveryAgent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void stopDiscovery() {
|
public void stopDiscovery() {
|
||||||
resolver.removeServiceListener(SERVICE_TYPE, nvstreamListener);
|
|
||||||
|
|
||||||
if (discoveryTimer != null) {
|
if (discoveryTimer != null) {
|
||||||
discoveryTimer.cancel();
|
discoveryTimer.cancel();
|
||||||
discoveryTimer = null;
|
discoveryTimer = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (resolver != null) {
|
||||||
|
resolver.removeServiceListener(SERVICE_TYPE, nvstreamListener);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<MdnsComputer> getComputerSet() {
|
public List<MdnsComputer> getComputerSet() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user