diff --git a/pom.xml b/pom.xml
index 0cd4af0..fdb171e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
com.bwssystems.HABridge
ha-bridge
- 5.0.0rc3
+ 5.0.0rc4
jar
HA Bridge
diff --git a/src/main/java/com/bwssystems/HABridge/HABridge.java b/src/main/java/com/bwssystems/HABridge/HABridge.java
index 25742d5..032f573 100644
--- a/src/main/java/com/bwssystems/HABridge/HABridge.java
+++ b/src/main/java/com/bwssystems/HABridge/HABridge.java
@@ -97,6 +97,7 @@ public class HABridge {
bridgeSettings.getBridgeControl().setStop(true);
if(bridgeSettings.getBridgeSettingsDescriptor().isSettingsChanged())
bridgeSettings.save(bridgeSettings.getBridgeSettingsDescriptor());
+ log.info("Going to close all homes");
homeManager.closeHomes();
udpSender.closeResponseSocket();
udpSender = null;
diff --git a/src/main/java/com/bwssystems/HABridge/HomeManager.java b/src/main/java/com/bwssystems/HABridge/HomeManager.java
index 60b3bcc..0d6824c 100644
--- a/src/main/java/com/bwssystems/HABridge/HomeManager.java
+++ b/src/main/java/com/bwssystems/HABridge/HomeManager.java
@@ -4,6 +4,9 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import com.bwssystems.HABridge.devicemanagmeent.ResourceHandler;
import com.bwssystems.HABridge.plugins.NestBridge.NestHome;
import com.bwssystems.HABridge.plugins.domoticz.DomoticzHome;
@@ -23,6 +26,7 @@ import com.bwssystems.HABridge.plugins.fibaro.FibaroHome;
import com.bwssystems.HABridge.util.UDPDatagramSender;
public class HomeManager {
+ private static final Logger log = LoggerFactory.getLogger(HomeManager.class);
Map homeList;
Map resourceList;
@@ -114,8 +118,10 @@ public class HomeManager {
}
public void closeHomes() {
+ log.info("Manager close homes called....");
Collection theHomes = homeList.values();
for(Home aHome : theHomes) {
+ log.info("Closing home: " + aHome.getClass().getCanonicalName());
aHome.closeHome();
}
homeList.clear();
diff --git a/src/main/java/com/bwssystems/HABridge/plugins/NestBridge/NestHome.java b/src/main/java/com/bwssystems/HABridge/plugins/NestBridge/NestHome.java
index 0069000..da71b5e 100644
--- a/src/main/java/com/bwssystems/HABridge/plugins/NestBridge/NestHome.java
+++ b/src/main/java/com/bwssystems/HABridge/plugins/NestBridge/NestHome.java
@@ -32,10 +32,13 @@ public class NestHome implements com.bwssystems.HABridge.Home {
private Gson aGsonHandler;
private Boolean isFarenheit;
private Boolean validNest;
+ private boolean closed;
public NestHome(BridgeSettings bridgeSettings) {
super();
+ closed = true;
createHome(bridgeSettings);
+ closed = false;
}
@Override
@@ -93,12 +96,18 @@ public class NestHome implements com.bwssystems.HABridge.Home {
@Override
public void closeHome() {
+ log.debug("Closing Home.");
+ if(closed) {
+ log.debug("Home is already closed....");
+ return;
+ }
if(theSession != null) {
theNest.endNestSession();
}
theNest = null;
theSession = null;
nestItems = null;
+ closed = true;
}
@Override
diff --git a/src/main/java/com/bwssystems/HABridge/plugins/domoticz/DomoticzHome.java b/src/main/java/com/bwssystems/HABridge/plugins/domoticz/DomoticzHome.java
index e75dfd1..a6ef1f8 100644
--- a/src/main/java/com/bwssystems/HABridge/plugins/domoticz/DomoticzHome.java
+++ b/src/main/java/com/bwssystems/HABridge/plugins/domoticz/DomoticzHome.java
@@ -27,10 +27,13 @@ public class DomoticzHome implements Home {
private Map domoticzs;
private Boolean validDomoticz;
private HTTPHandler httpClient;
+ private boolean closed;
public DomoticzHome(BridgeSettings bridgeSettings) {
super();
+ closed = true;
createHome(bridgeSettings);
+ closed = false;
}
@Override
@@ -162,8 +165,15 @@ public class DomoticzHome implements Home {
}
@Override
public void closeHome() {
+ log.debug("Closing Home.");
+ if(closed) {
+ log.debug("Home is already closed....");
+ return;
+ }
+
if(httpClient != null)
httpClient.closeHandler();
-
+
+ closed = true;
}
}
diff --git a/src/main/java/com/bwssystems/HABridge/plugins/exec/CommandHome.java b/src/main/java/com/bwssystems/HABridge/plugins/exec/CommandHome.java
index eb2c69e..a501c7b 100644
--- a/src/main/java/com/bwssystems/HABridge/plugins/exec/CommandHome.java
+++ b/src/main/java/com/bwssystems/HABridge/plugins/exec/CommandHome.java
@@ -19,10 +19,13 @@ import com.bwssystems.HABridge.hue.TimeDecode;
public class CommandHome implements Home {
private static final Logger log = LoggerFactory.getLogger(CommandHome.class);
private BridgeSettings theSettings;
+ private boolean closed;
public CommandHome(BridgeSettings bridgeSettings) {
super();
+ closed = true;
createHome(bridgeSettings);
+ closed = false;
}
@Override
@@ -93,8 +96,13 @@ public class CommandHome implements Home {
@Override
public void closeHome() {
- // noop
+ log.debug("Closing Home.");
+ if(closed) {
+ log.debug("Home is already closed....");
+ return;
+ }
+ closed = true;
}
}
diff --git a/src/main/java/com/bwssystems/HABridge/plugins/fibaro/FibaroHome.java b/src/main/java/com/bwssystems/HABridge/plugins/fibaro/FibaroHome.java
index d122586..591baef 100644
--- a/src/main/java/com/bwssystems/HABridge/plugins/fibaro/FibaroHome.java
+++ b/src/main/java/com/bwssystems/HABridge/plugins/fibaro/FibaroHome.java
@@ -25,11 +25,14 @@ public class FibaroHome implements Home
private static final Logger log = LoggerFactory.getLogger(FibaroHome.class);
private Map fibaros;
private Boolean validFibaro;
+ private boolean closed;
public FibaroHome(BridgeSettings bridgeSettings)
{
super();
+ closed = true;
createHome(bridgeSettings);
+ closed = false;
}
public List getDevices()
@@ -102,6 +105,12 @@ public class FibaroHome implements Home
@Override
public void closeHome()
{
+ log.debug("Closing Home.");
+ if(closed) {
+ log.debug("Home is already closed....");
+ return;
+ }
fibaros = null;
+ closed = true;
}
}
\ No newline at end of file
diff --git a/src/main/java/com/bwssystems/HABridge/plugins/hal/HalHome.java b/src/main/java/com/bwssystems/HABridge/plugins/hal/HalHome.java
index 6c45035..1a87d00 100644
--- a/src/main/java/com/bwssystems/HABridge/plugins/hal/HalHome.java
+++ b/src/main/java/com/bwssystems/HABridge/plugins/hal/HalHome.java
@@ -27,10 +27,13 @@ public class HalHome implements Home {
private static final Logger log = LoggerFactory.getLogger(HalHome.class);
private Map hals;
private Boolean validHal;
+ private boolean closed;
public HalHome(BridgeSettings bridgeSettings) {
super();
+ closed = true;
createHome(bridgeSettings);
+ closed = false;
}
@Override
@@ -194,7 +197,13 @@ public class HalHome implements Home {
@Override
public void closeHome() {
- // noop
+ log.debug("Closing Home.");
+ if(closed) {
+ log.debug("Home is already closed....");
+ return;
+ }
+ hals = null;
+ closed = true;
}
}
diff --git a/src/main/java/com/bwssystems/HABridge/plugins/harmony/HarmonyHome.java b/src/main/java/com/bwssystems/HABridge/plugins/harmony/HarmonyHome.java
index 6eb4f5b..8991f72 100644
--- a/src/main/java/com/bwssystems/HABridge/plugins/harmony/HarmonyHome.java
+++ b/src/main/java/com/bwssystems/HABridge/plugins/harmony/HarmonyHome.java
@@ -32,16 +32,24 @@ public class HarmonyHome implements Home {
private Boolean isDevMode;
private Boolean validHarmony;
private Gson aGsonHandler;
+ private boolean closed;
public HarmonyHome(BridgeSettings bridgeSettings) {
super();
+ closed = true;
createHome(bridgeSettings);
+ closed = false;
}
@Override
public void closeHome() {
if(!validHarmony)
return;
+ log.debug("Closing Home.");
+ if(closed) {
+ log.debug("Home is already closed....");
+ return;
+ }
if(isDevMode || hubs == null)
return;
Iterator keys = hubs.keySet().iterator();
@@ -51,6 +59,7 @@ public class HarmonyHome implements Home {
}
hubs = null;
+ closed = true;
}
public HarmonyHandler getHarmonyHandler(String aName) {
diff --git a/src/main/java/com/bwssystems/HABridge/plugins/hass/HassHome.java b/src/main/java/com/bwssystems/HABridge/plugins/hass/HassHome.java
index c338861..74cb6da 100644
--- a/src/main/java/com/bwssystems/HABridge/plugins/hass/HassHome.java
+++ b/src/main/java/com/bwssystems/HABridge/plugins/hass/HassHome.java
@@ -26,10 +26,13 @@ public class HassHome implements Home {
private Map hassMap;
private Boolean validHass;
private Gson aGsonHandler;
+ private boolean closed;
public HassHome(BridgeSettings bridgeSettings) {
super();
+ closed = true;
createHome(bridgeSettings);
+ closed = false;
}
@Override
@@ -152,6 +155,11 @@ public class HassHome implements Home {
public void closeHome() {
if(!validHass)
return;
+ log.debug("Closing Home.");
+ if(closed) {
+ log.debug("Home is already closed....");
+ return;
+ }
if(hassMap == null)
return;
Iterator keys = hassMap.keySet().iterator();
@@ -161,5 +169,6 @@ public class HassHome implements Home {
}
hassMap = null;
+ closed = true;
}
}
diff --git a/src/main/java/com/bwssystems/HABridge/plugins/http/HTTPHandler.java b/src/main/java/com/bwssystems/HABridge/plugins/http/HTTPHandler.java
index 01a544b..195076a 100644
--- a/src/main/java/com/bwssystems/HABridge/plugins/http/HTTPHandler.java
+++ b/src/main/java/com/bwssystems/HABridge/plugins/http/HTTPHandler.java
@@ -4,28 +4,15 @@ import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.Charset;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.TimeUnit;
-import org.apache.http.HttpClientConnection;
-import org.apache.http.HttpException;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpUriRequest;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.conn.ConnectionPoolTimeoutException;
-import org.apache.http.conn.ConnectionRequest;
-import org.apache.http.conn.HttpClientConnectionManager;
-import org.apache.http.conn.routing.HttpRoute;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.conn.BasicHttpClientConnectionManager;
-import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
-import org.apache.http.protocol.HttpRequestExecutor;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -34,29 +21,9 @@ import com.bwssystems.HABridge.api.NameValue;
public class HTTPHandler {
private static final Logger log = LoggerFactory.getLogger(HTTPHandler.class);
-// private CloseableHttpClient httpClient;
-// private RequestConfig globalConfig;
- private HttpClientContext context;
- private PoolingHttpClientConnectionManager connMgr;
- private HttpRoute route;
- private HttpClientConnection conn;
- private HttpHost theHost;
public HTTPHandler() {
- context = HttpClientContext.create();
- connMgr = new PoolingHttpClientConnectionManager();
- // Increase max total connection to 200
- connMgr.setMaxTotal(200);
- // Increase default max connection per route to 20
- connMgr.setDefaultMaxPerRoute(20);
- // Increase max connections for localhost:80 to 50
- HttpHost localhost = new HttpHost("locahost", 80);
- connMgr.setMaxPerRoute(new HttpRoute(localhost), 50);
- route = null;
- conn = null;
- theHost = null;
-// globalConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).build();
-// httpClient = HttpClients.custom().setDefaultRequestConfig(globalConfig).build();
+ super();
}
@@ -68,9 +35,8 @@ public class HTTPHandler {
String theContent = null;
URI theURI = null;
ContentType parsedContentType = null;
- ConnectionRequest connRequest = null;
StringEntity requestBody = null;
- boolean badResponse = false;
+
if (contentType != null && !contentType.trim().isEmpty()) {
parsedContentType = ContentType.parse(contentType);
if (body != null && body.length() > 0)
@@ -82,44 +48,7 @@ public class HTTPHandler {
log.warn("Error creating URI http request: " + url + " with message: " + e1.getMessage());
return null;
}
- if(route == null) {
- theHost = new HttpHost(theURI.getHost(), theURI.getPort());
- route = new HttpRoute(theHost);
- }
- if(conn == null) {
- // Request new connection. This can be a long process
- connRequest = connMgr.requestConnection(route, null);
- // Wait for connection up to 10 sec
- try {
- conn = connRequest.get(10, TimeUnit.SECONDS);
- } catch (ConnectionPoolTimeoutException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (ExecutionException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- // If not open
- if (!conn.isOpen()) {
- // establish connection based on its route info
- try {
- connMgr.connect(conn, route, 1000, context);
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- // and mark it as route complete
- try {
- connMgr.routeComplete(conn, route, context);
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
+
try {
if (httpVerb == null || httpVerb.trim().isEmpty() || HttpGet.METHOD_NAME.equalsIgnoreCase(httpVerb)) {
request = new HttpGet(theURI);
@@ -146,28 +75,12 @@ public class HTTPHandler {
request.setHeader(headers[i].getName(), headers[i].getValue());
}
}
- HttpResponse response = null;
- HttpRequestExecutor exeRequest = new HttpRequestExecutor();
- context.setTargetHost(theHost);
+ CloseableHttpResponse response = null;
for (int retryCount = 0; retryCount < 2; retryCount++) {
try {
- response = exeRequest.execute(request, conn, context);
+ response = HttpClientPool.getClient().execute(request);
log.debug((httpVerb == null ? "GET" : httpVerb) + " execute (" + retryCount + ") on URL responded: "
+ response.getStatusLine().getStatusCode());
- if (response != null && response.getStatusLine().getStatusCode() >= 200 && response.getStatusLine().getStatusCode() < 300) {
- log.debug("Successfull response - The http response is <<<" + theContent + ">>>");
- retryCount = 2;
- } else if (response != null) {
- log.warn("HTTP response code was not an expected successful response of between 200 - 299, the code was: "
- + response.getStatusLine());
- if (response.getStatusLine().getStatusCode() == 504) {
- log.warn("HTTP response code was 504, retrying...");
- } else
- retryCount = 2;
-
- badResponse = true;
- }
-
if (response != null && response.getEntity() != null) {
try {
@@ -180,18 +93,28 @@ public class HTTPHandler {
// inputstream
// ignore
// content
- if(!badResponse)
- theContent = null;
} catch (Exception e) {
log.debug("Error ocurred in handling response entity after successful call, still responding success. "
+ e.getMessage(), e);
}
}
+ if (response != null && response.getStatusLine().getStatusCode() >= 200 && response.getStatusLine().getStatusCode() < 300) {
+ log.debug("Successfull response - The http response is <<<" + theContent + ">>>");
+ retryCount = 2;
+ } else if (response != null) {
+ log.warn("HTTP response code was not an expected successful response of between 200 - 299, the code was: "
+ + response.getStatusLine());
+ if (response.getStatusLine().getStatusCode() == 504) {
+ log.warn("HTTP response code was 504, retrying...");
+ } else
+ retryCount = 2;
+
+ theContent = null;
+ }
+
} catch (ClientProtocolException e) {
log.warn("Client Protocol Exception received, retyring....");
- } catch (HttpException e) {
- log.warn("Error calling out to HA gateway: HttpException in log", e);
- } catch (IOException e) {
+ }catch (IOException e) {
log.warn("Error calling out to HA gateway: IOException in log: " + e.getMessage());
retryCount = 2;
}
@@ -205,30 +128,8 @@ public class HTTPHandler {
}
}
}
- connMgr.releaseConnection(conn, null, 1, TimeUnit.SECONDS);
return theContent;
}
-
-// public HttpClient getHttpClient() {
-// return httpClient;
-// }
-
-
-// public CloseableHttpClient getHttpClient() {
-// return httpClient;
-// }
-
-
public void closeHandler() {
- try {
-// httpClient.close();
- if(conn != null)
- conn.close();
- connMgr.closeExpiredConnections();
- connMgr.shutdown();
- } catch (IOException e) {
- // noop
- }
-// httpClient = null;
}
}
diff --git a/src/main/java/com/bwssystems/HABridge/plugins/http/HTTPHome.java b/src/main/java/com/bwssystems/HABridge/plugins/http/HTTPHome.java
index 35ae28d..2e0abbc 100644
--- a/src/main/java/com/bwssystems/HABridge/plugins/http/HTTPHome.java
+++ b/src/main/java/com/bwssystems/HABridge/plugins/http/HTTPHome.java
@@ -1,5 +1,7 @@
package com.bwssystems.HABridge.plugins.http;
+import java.io.IOException;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -21,10 +23,15 @@ import com.google.gson.Gson;
public class HTTPHome implements Home {
private static final Logger log = LoggerFactory.getLogger(HTTPHome.class);
private HTTPHandler anHttpHandler;
+ protected HttpClientPool thePool;
+ private boolean closed;
public HTTPHome(BridgeSettings bridgeSettings) {
super();
+ closed = true;
+ thePool = new HttpClientPool();
createHome(bridgeSettings);
+ closed = false;
}
@Override
@@ -101,9 +108,22 @@ public class HTTPHome implements Home {
@Override
public void closeHome() {
+ log.debug("Closing Home.");
+ if(closed) {
+ log.debug("Home is already closed....");
+ return;
+ }
if(anHttpHandler != null)
anHttpHandler.closeHandler();
anHttpHandler = null;
+ try {
+ HttpClientPool.shutdown();
+ } catch (InterruptedException e) {
+ log.warn("Error shutting down http pool: " + e.getMessage());;
+ } catch (IOException e) {
+ log.warn("Error shutting down http pool: " + e.getMessage());;
+ }
+ closed = true;
}
}
diff --git a/src/main/java/com/bwssystems/HABridge/plugins/http/HttpClientPool.java b/src/main/java/com/bwssystems/HABridge/plugins/http/HttpClientPool.java
new file mode 100644
index 0000000..022d29d
--- /dev/null
+++ b/src/main/java/com/bwssystems/HABridge/plugins/http/HttpClientPool.java
@@ -0,0 +1,128 @@
+package com.bwssystems.HABridge.plugins.http;
+
+import java.io.IOException;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public final class HttpClientPool {
+ private static final Logger log = LoggerFactory.getLogger(HttpClientPool.class);
+
+ // Single-element enum to implement Singleton.
+ private static enum Singleton {
+ // Just one of me so constructor will be called once.
+ Client;
+ // The thread-safe client.
+ private final CloseableHttpClient threadSafeClient;
+ // The pool monitor.
+ private final IdleConnectionMonitorThread monitor;
+
+ // The constructor creates it - thus late
+ private Singleton() {
+ PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
+ // Increase max total connection to 200
+ cm.setMaxTotal(200);
+ // Increase default max connection per route to 20
+ cm.setDefaultMaxPerRoute(20);
+ // Build the client.
+ threadSafeClient = HttpClients.custom()
+ .setConnectionManager(cm)
+ .build();
+ // Start up an eviction thread.
+ monitor = new IdleConnectionMonitorThread(cm);
+ // Don't stop quitting.
+ monitor.setDaemon(true);
+ monitor.start();
+ }
+
+ public CloseableHttpClient get() {
+ return threadSafeClient;
+ }
+
+ }
+
+ public static CloseableHttpClient getClient() {
+ // The thread safe client is held by the singleton.
+ return Singleton.Client.get();
+ }
+
+ // Watches for stale connections and evicts them.
+ private static class IdleConnectionMonitorThread extends Thread {
+ // The manager to watch.
+ private final PoolingHttpClientConnectionManager cm;
+ // Use a BlockingQueue to stop everything.
+ private final BlockingQueue stopSignal = new ArrayBlockingQueue(1);
+
+ // Pushed up the queue.
+ private static class Stop {
+ // The return queue.
+ private final BlockingQueue stop = new ArrayBlockingQueue(1);
+
+ // Called by the process that is being told to stop.
+ public void stopped() {
+ // Push me back up the queue to indicate we are now stopped.
+ stop.add(this);
+ }
+
+ // Called by the process requesting the stop.
+ public void waitForStopped() throws InterruptedException {
+ // Wait until the callee acknowledges that it has stopped.
+ stop.take();
+ }
+
+ }
+
+ IdleConnectionMonitorThread(PoolingHttpClientConnectionManager cm) {
+ super();
+ this.cm = cm;
+ }
+
+ @Override
+ public void run() {
+ try {
+ // Holds the stop request that stopped the process.
+ Stop stopRequest;
+ // Every 5 seconds.
+ while ((stopRequest = stopSignal.poll(5, TimeUnit.SECONDS)) == null) {
+ // Close expired connections
+ cm.closeExpiredConnections();
+ // Optionally, close connections that have been idle too long.
+ cm.closeIdleConnections(60, TimeUnit.SECONDS);
+ // Look at pool stats.
+ log.debug("Stats: {}", cm.getTotalStats());
+ }
+ // Acknowledge the stop request.
+ stopRequest.stopped();
+ } catch (InterruptedException ex) {
+ // terminate
+ }
+ }
+
+ public void shutdown() throws InterruptedException, IOException {
+ log.info("Shutting down client pool");
+ // Signal the stop to the thread.
+ Stop stop = new Stop();
+ stopSignal.add(stop);
+ // Wait for the stop to complete.
+ stop.waitForStopped();
+ // Close the pool - Added
+ Singleton.Client.threadSafeClient.close();
+ // Close the connection manager.
+ cm.close();
+ log.info("Client pool shut down");
+ }
+
+ }
+
+ public static void shutdown() throws InterruptedException, IOException {
+ // Shutdown the monitor.
+ Singleton.Client.monitor.shutdown();
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/bwssystems/HABridge/plugins/hue/HueHome.java b/src/main/java/com/bwssystems/HABridge/plugins/hue/HueHome.java
index a3d693e..ace49bf 100644
--- a/src/main/java/com/bwssystems/HABridge/plugins/hue/HueHome.java
+++ b/src/main/java/com/bwssystems/HABridge/plugins/hue/HueHome.java
@@ -27,11 +27,14 @@ public class HueHome implements Home {
private Boolean validHue;
private Gson aGsonHandler;
private BridgeSettings theBridgeSettings;
+ private boolean closed;
public HueHome(BridgeSettings bridgeSettings) {
super();
+ closed = true;
theBridgeSettings = bridgeSettings;
createHome(bridgeSettings);
+ closed = false;
}
@Override
@@ -135,6 +138,11 @@ public class HueHome implements Home {
public void closeHome() {
if(!validHue)
return;
+ log.debug("Closing Home.");
+ if(closed) {
+ log.debug("Home is already closed....");
+ return;
+ }
if(hues == null)
return;
Iterator keys = hues.keySet().iterator();
@@ -143,5 +151,6 @@ public class HueHome implements Home {
hues.get(key).closeHue();;
}
hues = null;
+ closed = true;
}
}
diff --git a/src/main/java/com/bwssystems/HABridge/plugins/lifx/LifxHome.java b/src/main/java/com/bwssystems/HABridge/plugins/lifx/LifxHome.java
index 0c692f1..252e32a 100644
--- a/src/main/java/com/bwssystems/HABridge/plugins/lifx/LifxHome.java
+++ b/src/main/java/com/bwssystems/HABridge/plugins/lifx/LifxHome.java
@@ -38,10 +38,13 @@ public class LifxHome implements Home {
private LFXClient client;
private Boolean validLifx;
private Gson aGsonHandler;
+ private boolean closed;
public LifxHome(BridgeSettings bridgeSettings) {
super();
+ closed = true;
createHome(bridgeSettings);
+ closed = false;
}
@Override
@@ -213,7 +216,13 @@ public class LifxHome implements Home {
public void closeHome() {
if(!validLifx)
return;
+ log.debug("Closing Home.");
+ if(closed) {
+ log.debug("Home is already closed....");
+ return;
+ }
client.close();
+ closed = true;
}
private static class MyLightListener implements LFXLightCollectionListener {
private static final Logger log = LoggerFactory.getLogger(MyLightListener.class);
diff --git a/src/main/java/com/bwssystems/HABridge/plugins/mqtt/MQTTHome.java b/src/main/java/com/bwssystems/HABridge/plugins/mqtt/MQTTHome.java
index 894a9a1..a5c5853 100644
--- a/src/main/java/com/bwssystems/HABridge/plugins/mqtt/MQTTHome.java
+++ b/src/main/java/com/bwssystems/HABridge/plugins/mqtt/MQTTHome.java
@@ -26,16 +26,24 @@ public class MQTTHome implements Home {
private Map handlers;
private Boolean validMqtt;
private Gson aGsonHandler;
+ private boolean closed;
public MQTTHome(BridgeSettings bridgeSettings) {
super();
+ closed = true;
createHome(bridgeSettings);
+ closed = false;
}
@Override
public void closeHome() {
if(!validMqtt)
return;
+ log.debug("Closing Home.");
+ if(closed) {
+ log.debug("Home is already closed....");
+ return;
+ }
log.debug("Shutting down MQTT handlers.");
if(handlers != null && !handlers.isEmpty()) {
for (String key : handlers.keySet()) {
@@ -43,6 +51,7 @@ public class MQTTHome implements Home {
}
}
handlers = null;
+ closed = false;
}
public MQTTHandler getMQTTHandler(String aName) {
diff --git a/src/main/java/com/bwssystems/HABridge/plugins/somfy/SomfyHome.java b/src/main/java/com/bwssystems/HABridge/plugins/somfy/SomfyHome.java
index 1acc683..7ac13d5 100644
--- a/src/main/java/com/bwssystems/HABridge/plugins/somfy/SomfyHome.java
+++ b/src/main/java/com/bwssystems/HABridge/plugins/somfy/SomfyHome.java
@@ -31,10 +31,13 @@ public class SomfyHome implements Home {
private static final Logger log = LoggerFactory.getLogger(SomfyHome.class);
private Map somfys;
private Boolean validSomfy;
+ private boolean closed;
public SomfyHome(BridgeSettings bridgeSettings) {
+ super();
+ closed = true;
createHome(bridgeSettings);
-
+ closed = false;
}
public SomfyInfo getSomfyHandler(String somfyName) {
@@ -114,6 +117,12 @@ public class SomfyHome implements Home {
@Override
public void closeHome() {
+ log.debug("Closing Home.");
+ if(closed) {
+ log.debug("Home is already closed....");
+ return;
+ }
somfys = null;
+ closed = true;
}
}
diff --git a/src/main/java/com/bwssystems/HABridge/plugins/tcp/TCPHome.java b/src/main/java/com/bwssystems/HABridge/plugins/tcp/TCPHome.java
index 0c69aa4..e3f958d 100644
--- a/src/main/java/com/bwssystems/HABridge/plugins/tcp/TCPHome.java
+++ b/src/main/java/com/bwssystems/HABridge/plugins/tcp/TCPHome.java
@@ -34,11 +34,13 @@ public class TCPHome implements Home {
private byte[] sendData;
private Map theSockets;
private Gson aGsonHandler;
-
+ private boolean closed;
public TCPHome(BridgeSettings bridgeSettings) {
super();
+ closed = true;
createHome(bridgeSettings);
+ closed = false;
}
@Override
@@ -145,6 +147,11 @@ public class TCPHome implements Home {
@Override
public void closeHome() {
+ log.debug("Closing Home.");
+ if(closed) {
+ log.debug("Home is already closed....");
+ return;
+ }
log.debug("Shutting down TCP sockets.");
if(theSockets != null && !theSockets.isEmpty()) {
Iterator keys = theSockets.keySet().iterator();
@@ -157,6 +164,7 @@ public class TCPHome implements Home {
}
}
}
+ closed = true;
}
}
diff --git a/src/main/java/com/bwssystems/HABridge/plugins/udp/UDPHome.java b/src/main/java/com/bwssystems/HABridge/plugins/udp/UDPHome.java
index 76a07e1..483d78d 100644
--- a/src/main/java/com/bwssystems/HABridge/plugins/udp/UDPHome.java
+++ b/src/main/java/com/bwssystems/HABridge/plugins/udp/UDPHome.java
@@ -26,11 +26,14 @@ public class UDPHome implements Home {
private static final Logger log = LoggerFactory.getLogger(UDPHome.class);
private UDPDatagramSender theUDPDatagramSender;
private byte[] sendData;
+ private boolean closed;
public UDPHome(BridgeSettings bridgeSettings, UDPDatagramSender aUDPDatagramSender) {
super();
theUDPDatagramSender = aUDPDatagramSender;
+ closed = true;
createHome(bridgeSettings);
+ closed = false;
}
@Override
@@ -104,8 +107,12 @@ public class UDPHome implements Home {
@Override
public void closeHome() {
- // TODO Auto-generated method stub
-
+ log.debug("Closing Home.");
+ if(closed) {
+ log.debug("Home is already closed....");
+ return;
+ }
+ closed = true;
}
}
diff --git a/src/main/java/com/bwssystems/HABridge/plugins/vera/VeraHome.java b/src/main/java/com/bwssystems/HABridge/plugins/vera/VeraHome.java
index 829154b..51f0104 100644
--- a/src/main/java/com/bwssystems/HABridge/plugins/vera/VeraHome.java
+++ b/src/main/java/com/bwssystems/HABridge/plugins/vera/VeraHome.java
@@ -25,10 +25,13 @@ public class VeraHome implements Home {
private static final Logger log = LoggerFactory.getLogger(VeraHome.class);
private Map veras;
private Boolean validVera;
+ private boolean closed;
public VeraHome(BridgeSettings bridgeSettings) {
super();
+ closed = true;
createHome(bridgeSettings);
+ closed = false;
}
public List getDevices() {
@@ -107,6 +110,12 @@ public class VeraHome implements Home {
@Override
public void closeHome() {
+ log.debug("Closing Home.");
+ if(closed) {
+ log.debug("Home is already closed....");
+ return;
+ }
veras = null;
+ closed = true;
}
}
diff --git a/src/main/resources/public/views/veradevice.html b/src/main/resources/public/views/veradevice.html
index 3541487..91eae29 100644
--- a/src/main/resources/public/views/veradevice.html
+++ b/src/main/resources/public/views/veradevice.html
@@ -4,8 +4,8 @@
Logs
Vera Devices
Vera Scenes
- Fibaro Devices
- Fibaro Scenes
+ Fibaro Devices
+ Fibaro Scenes
Harmony Activities
Logs
Vera Devices
Vera Scenes
- Fibaro Devices
- Fibaro Scenes
+ Fibaro Devices
+ Fibaro Scenes
Harmony Activities