Added Scannable interface to NetScan
This commit is contained in:
parent
987dab9079
commit
1b93608d2a
2 changed files with 37 additions and 22 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue