diff --git a/app/lib/jmdns-3.4.1.jar b/app/lib/jmdns-3.4.1.jar new file mode 100644 index 000000000..4fcd002b4 Binary files /dev/null and b/app/lib/jmdns-3.4.1.jar differ diff --git a/app/src/processing/app/zeroconf/BoardListener.java b/app/src/processing/app/zeroconf/BoardListener.java new file mode 100644 index 000000000..dae2d4125 --- /dev/null +++ b/app/src/processing/app/zeroconf/BoardListener.java @@ -0,0 +1,11 @@ +package processing.app.zeroconf; + +import javax.jmdns.ServiceEvent; + +public interface BoardListener { + + void boardOffline(ServiceEvent serviceEvent); + + void boardOnline(ServiceEvent serviceEvent); + +} diff --git a/app/src/processing/app/zeroconf/Discovery.java b/app/src/processing/app/zeroconf/Discovery.java new file mode 100644 index 000000000..423114740 --- /dev/null +++ b/app/src/processing/app/zeroconf/Discovery.java @@ -0,0 +1,36 @@ +package processing.app.zeroconf; + +import javax.jmdns.JmDNS; +import javax.jmdns.NetworkTopologyDiscovery; +import javax.jmdns.ServiceEvent; +import javax.jmdns.ServiceListener; +import java.io.IOException; +import java.net.InetAddress; + +public class Discovery implements ServiceListener { + + private final BoardListener listener; + + public Discovery(BoardListener listener) throws IOException { + this.listener = listener; + for (InetAddress addr : NetworkTopologyDiscovery.Factory.getInstance().getInetAddresses()) { + JmDNS jmDNS = JmDNS.create(addr); + jmDNS.addServiceListener("_arduino._tcp.local.", this); + } + } + + @Override + public void serviceAdded(ServiceEvent serviceEvent) { + serviceEvent.getDNS().requestServiceInfo(serviceEvent.getInfo().getServer(), serviceEvent.getName(), true); + } + + @Override + public void serviceRemoved(ServiceEvent serviceEvent) { + listener.boardOffline(serviceEvent); + } + + @Override + public void serviceResolved(ServiceEvent serviceEvent) { + listener.boardOnline(serviceEvent); + } +}