Added Scannable interface to NetScan

This commit is contained in:
Ziver Koc 2021-09-15 16:34:21 +02:00
parent 987dab9079
commit 1b93608d2a
2 changed files with 37 additions and 22 deletions

View file

@ -27,10 +27,6 @@ hal_core.http_external_port=8081
#hal_nutups.host=
#hal_nutups.port=
## NetScan plugin
# Network scanning should probably be disabled in some networks
#hal_netscan.ipscan=true
## Zigbee plugin
#hal_zigbee.com_port=COM4
#hal_zigbee.dongle=CC2531|CONBEE|XBEE

View file

@ -20,16 +20,22 @@ import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
public class NetScanController implements HalEventController, HalAutostartController, InetScanListener, Runnable {
public class NetScanController implements
HalEventController,
HalAutostartController,
HalScannableController,
InetScanListener,
Runnable {
public static Logger logger = LogUtil.getLogger();
private static final int NETWORK_SYNC_INTERVAL = 3 * 60 * 60 * 1000; // 3 hours
private static final int PING_INTERVAL = 10 * 1000; // 10 sec
private static final String PARAM_IPSCAN = "netscan.ipscan";
private ScheduledExecutorService executor;
private List<HalDeviceReportListener> deviceListeners = new CopyOnWriteArrayList<>();
/** A register and a cache of previous state **/
private HashMap<NetworkDevice, AvailabilityEventData> devices = new HashMap<>();
private boolean scanRunning = false;
@Override
@ -41,22 +47,6 @@ public class NetScanController implements HalEventController, HalAutostartContro
public void initialize() {
executor = Executors.newScheduledThreadPool(2);
executor.scheduleAtFixedRate(NetScanController.this, 10_000, PING_INTERVAL, TimeUnit.MILLISECONDS);
if (HalContext.getBooleanProperty(PARAM_IPSCAN, true)) {
executor.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
try {
logger.fine("Starting network scan...");
InetScanner scanner = new InetScanner();
scanner.setListener(NetScanController.this);
scanner.scan(InetUtil.getLocalInet4Address().get(0));
logger.fine("Network scan done");
} catch (Exception e) {
logger.log(Level.SEVERE, null, e);
}
}
}, 30_000, NETWORK_SYNC_INTERVAL, TimeUnit.MILLISECONDS);
}
}
@Override
@ -89,6 +79,7 @@ public class NetScanController implements HalEventController, HalAutostartContro
logger.log(Level.SEVERE, null, e);
}
}
@Override
public void foundInetAddress(InetAddress ip) {
logger.fine("Auto Detected ip: " + ip.getHostAddress());
@ -101,6 +92,34 @@ public class NetScanController implements HalEventController, HalAutostartContro
}
@Override
public synchronized void startScan() {
if (!scanRunning) {
scanRunning = true;
executor.schedule(new Runnable() {
@Override
public void run() {
try {
logger.fine("Starting network scan...");
InetScanner scanner = new InetScanner();
scanner.setListener(NetScanController.this);
scanner.scan(InetUtil.getLocalInet4Address().get(0));
logger.fine("Network scan done");
} catch (Exception e) {
logger.log(Level.SEVERE, null, e);
} finally {
scanRunning = false;
}
}
}, 0, TimeUnit.MILLISECONDS);
}
}
@Override
public boolean isScanning() {
return scanRunning;
}
@Override
public void register(HalDeviceConfig deviceConfig) {