1
0
mirror of https://github.com/arduino/Arduino.git synced 2025-03-15 12:29:26 +01:00

Temporary workaround on network discovery

This commit is contained in:
Cristian Maglie 2013-06-04 21:45:03 +02:00
parent b4852f353c
commit 0ab4f8b24b

View File

@ -2,6 +2,7 @@ package cc.arduino.packages.discoverers;
import java.io.IOException; import java.io.IOException;
import java.net.InetAddress; import java.net.InetAddress;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList;
@ -25,7 +26,9 @@ public class NetworkDiscovery implements Discovery, ServiceListener {
@Override @Override
public List<BoardPort> discovery() { public List<BoardPort> discovery() {
return ports; synchronized (this) {
return new ArrayList<BoardPort>(ports);
}
} }
@Override @Override
@ -69,29 +72,35 @@ public class NetworkDiscovery implements Discovery, ServiceListener {
@Override @Override
public void serviceRemoved(ServiceEvent serviceEvent) { public void serviceRemoved(ServiceEvent serviceEvent) {
String name = serviceEvent.getName(); String name = serviceEvent.getName();
for (BoardPort port : ports) { synchronized (this) {
if (port.getBoardName().equals(name)) for (BoardPort port : ports) {
ports.remove(port); if (port.getBoardName().equals(name))
ports.remove(port);
}
} }
} }
@Override @Override
public void serviceResolved(ServiceEvent serviceEvent) { public void serviceResolved(ServiceEvent serviceEvent) {
ServiceInfo info = serviceEvent.getInfo(); ServiceInfo info = serviceEvent.getInfo();
String address = serviceEvent.getInfo().getInet4Addresses()[0] String address = info.getInet4Addresses()[0].getHostAddress();
.getHostAddress();
String name = serviceEvent.getName(); String name = serviceEvent.getName();
PreferencesMap prefs = null; PreferencesMap prefs = null;
String board = null;
if (info.hasData()) { if (info.hasData()) {
prefs = new PreferencesMap(); prefs = new PreferencesMap();
prefs.put("id", info.getPropertyString("board")); board = info.getPropertyString("board");
prefs.put("board", board);
prefs.put("distro_version", info.getPropertyString("distro_version")); prefs.put("distro_version", info.getPropertyString("distro_version"));
} }
String boardName = Base.getPlatform()
.resolveDeviceByBoardID(Base.packages, prefs.get("id"));
String label = name + " at " + address + " (" + boardName + ")"; String label = name + " at " + address;
if (board != null) {
String boardName = Base.getPlatform()
.resolveDeviceByBoardID(Base.packages, board);
label += " (" + boardName + ")";
}
BoardPort port = new BoardPort(); BoardPort port = new BoardPort();
port.setAddress(address); port.setAddress(address);
@ -99,7 +108,9 @@ public class NetworkDiscovery implements Discovery, ServiceListener {
port.setProtocol("network"); port.setProtocol("network");
port.setPrefs(prefs); port.setPrefs(prefs);
port.setLabel(label); port.setLabel(label);
ports.add(port); synchronized (this) {
ports.add(port);
}
} }
} }