An attempt to improve Yun's discovery. Thanks @roadfun. See #2576

This commit is contained in:
Federico Fissore 2015-02-16 20:11:17 +01:00
parent bedc550b5e
commit 3fec636b29
2 changed files with 25 additions and 9 deletions

View File

@ -58,19 +58,35 @@ public class NetworkDiscovery implements Discovery, ServiceListener, cc.arduino.
@Override
public List<BoardPort> discovery() {
List<BoardPort> ports = clonePortsList();
Iterator<BoardPort> iterator = ports.iterator();
while (iterator.hasNext()) {
List<BoardPort> boardPorts = clonePortsList();
Iterator<BoardPort> boardPortIterator = boardPorts.iterator();
while (boardPortIterator.hasNext()) {
try {
BoardPort board = iterator.next();
if (!NetUtils.isReachable(InetAddress.getByName(board.getAddress()), Integer.parseInt(board.getPrefs().get("port")))) {
iterator.remove();
BoardPort board = boardPortIterator.next();
InetAddress inetAddress = InetAddress.getByName(board.getAddress());
int broadcastedPort = Integer.valueOf(board.getPrefs().get("port"));
List<Integer> ports = new LinkedList<Integer>();
ports.add(broadcastedPort);
//dirty code: allows non up to date yuns to be discovered. Newer yuns will broadcast port 22
if (broadcastedPort == 80) {
ports.add(0, 22);
}
boolean reachable = false;
for (Integer port : ports) {
reachable = reachable || NetUtils.isReachable(inetAddress, port);
}
if (!reachable) {
boardPortIterator.remove();
}
} catch (UnknownHostException e) {
iterator.remove();
boardPortIterator.remove();
}
}
return ports;
return boardPorts;
}
private List<BoardPort> clonePortsList() {

View File

@ -11,7 +11,7 @@ public abstract class NetUtils {
Socket socket = null;
try {
socket = new Socket();
socket.connect(new InetSocketAddress(address, port), 100);
socket.connect(new InetSocketAddress(address, port), 300);
return true;
} catch (IOException e) {
return false;