]> git.basschouten.com Git - openhab-addons.git/commitdiff
[WebThing] If WebThing network connection is crashed, WebThing will not be reconnecte...
authorgrro <grro@users.noreply.github.com>
Sun, 9 May 2021 17:18:39 +0000 (19:18 +0200)
committerGitHub <noreply@github.com>
Sun, 9 May 2021 17:18:39 +0000 (19:18 +0200)
* Unnecessary NonNull annotations removed

Signed-off-by: Gregor Roth <gregor.roth@web.de>
Signed-off-by: gregor roth <gregor.roth@web.de>
* Bugfix  "If network connection is interrupted, WebThing will not be reconnected." Due to the variable webThingURI is unset, re connection fails

Signed-off-by: Gregor Roth <gregor.roth@web.de>
Signed-off-by: gregor roth <gregor.roth@web.de>
* webThingURI will be loaded in a lazy way

Signed-off-by: Gregor Roth <gregor.roth@web.de>
Signed-off-by: gregor roth <gregor.roth@web.de>
bundles/org.openhab.binding.webthing/src/main/java/org/openhab/binding/webthing/internal/WebThingHandler.java
bundles/org.openhab.binding.webthing/src/main/java/org/openhab/binding/webthing/internal/client/WebSocketConnectionImpl.java
bundles/org.openhab.binding.webthing/src/test/java/org/openhab/binding/webthing/internal/client/WebthingTest.java

index 8e1c7cc61db1472ff96327542d3b52809234c86e..7c0327a2a47512beb3747fd9cfa7ce8cc46ff24d 100644 (file)
@@ -97,10 +97,9 @@ public class WebThingHandler extends BaseThingHandler implements ChannelHandler
         // perform connect in background
         scheduler.execute(() -> {
             // WebThing URI present?
-            var uri = toUri(getConfigAs(WebThingConfiguration.class).webThingURI);
-            if (uri != null) {
-                logger.debug("try to connect WebThing {}", uri);
-                var connected = tryReconnect(uri);
+            if (getWebThingURI() != null) {
+                logger.debug("try to connect WebThing {}", webThingURI);
+                var connected = tryReconnect();
                 if (connected) {
                     logger.debug("WebThing {} connected", getWebThingLabel());
                 }
@@ -118,6 +117,13 @@ public class WebThingHandler extends BaseThingHandler implements ChannelHandler
                 .ifPresent(future -> future.cancel(true));
     }
 
+    private @Nullable URI getWebThingURI() {
+        if (webThingURI == null) {
+            webThingURI = toUri(getConfigAs(WebThingConfiguration.class).webThingURI);
+        }
+        return webThingURI;
+    }
+
     private @Nullable URI toUri(@Nullable String uri) {
         try {
             if (uri != null) {
@@ -142,10 +148,11 @@ public class WebThingHandler extends BaseThingHandler implements ChannelHandler
         }
     }
 
-    private boolean tryReconnect(@Nullable URI uri) {
+    private boolean tryReconnect() {
         if (isActivated.get()) { // will try reconnect only, if activated
             try {
                 // create the client-side WebThing representation
+                var uri = getWebThingURI();
                 if (uri != null) {
                     var webThing = ConsumedThingFactory.instance().create(webSocketClient, httpClient, uri, scheduler,
                             this::onError);
@@ -258,7 +265,7 @@ public class WebThingHandler extends BaseThingHandler implements ChannelHandler
             itemChangedListenerMap.getOrDefault(channelUID, EMPTY_ITEM_CHANGED_LISTENER).onItemStateChanged(channelUID,
                     (State) command);
         } else if (command instanceof RefreshType) {
-            tryReconnect(webThingURI);
+            tryReconnect();
         }
     }
 
@@ -282,7 +289,7 @@ public class WebThingHandler extends BaseThingHandler implements ChannelHandler
         // try reconnect, if necessary
         if (isDisconnected() || (isOnline() && !isAlive())) {
             logger.debug("try reconnecting WebThing {}", getWebThingLabel());
-            if (tryReconnect(webThingURI)) {
+            if (tryReconnect()) {
                 logger.debug("WebThing {} reconnected", getWebThingLabel());
             }
 
@@ -290,7 +297,7 @@ public class WebThingHandler extends BaseThingHandler implements ChannelHandler
             // force reconnecting periodically, to fix erroneous states that occurs for unknown reasons
             var elapsedSinceLastReconnect = Duration.between(lastReconnect.get(), Instant.now());
             if (isOnline() && (elapsedSinceLastReconnect.getSeconds() > RECONNECT_PERIOD.getSeconds())) {
-                if (tryReconnect(webThingURI)) {
+                if (tryReconnect()) {
                     logger.debug("WebThing {} reconnected. Initiated by periodic reconnect", getWebThingLabel());
                 } else {
                     logger.debug("could not reconnect WebThing {} (periodic reconnect failed). Next trial in {} sec",
index e491a9e8dcc2fe2866be0f997d00fd3926def15d..ccab0ef4667274fba66ad4f00761c9eab42c61b1 100644 (file)
@@ -26,7 +26,6 @@ import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.BiConsumer;
 import java.util.function.Consumer;
 
-import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jdt.annotation.Nullable;
 import org.eclipse.jetty.websocket.api.Session;
@@ -88,7 +87,7 @@ public class WebSocketConnectionImpl implements WebSocketConnection, WebSocketLi
     }
 
     @Override
-    public void observeProperty(@NonNull String propertyName, @NonNull BiConsumer<String, Object> listener) {
+    public void observeProperty(String propertyName, BiConsumer<String, Object> listener) {
         propertyChangedListeners.put(propertyName, listener);
     }
 
index 8d7699e73c31780249d5126f475e56b1bb1609ee..7ba7901c07c540dd3afe86beb632f1faf3bfeb65 100644 (file)
@@ -34,7 +34,6 @@ import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.BiConsumer;
 import java.util.function.Consumer;
 
-import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jdt.annotation.Nullable;
 import org.eclipse.jetty.client.HttpClient;
@@ -289,8 +288,8 @@ public class WebthingTest {
         public final AtomicReference<WebSocketImpl> webSocketRef = new AtomicReference<>();
 
         @Override
-        public WebSocketConnection create(@NonNull URI webSocketURI, @NonNull ScheduledExecutorService executor,
-                @NonNull Consumer<String> errorHandler, @NonNull Duration pingPeriod) {
+        public WebSocketConnection create(URI webSocketURI, ScheduledExecutorService executor,
+                Consumer<String> errorHandler, Duration pingPeriod) {
             var webSocketConnection = new WebSocketConnectionImpl(executor, errorHandler, pingPeriod);
             var webSocket = new WebSocketImpl(webSocketConnection);
             webSocketRef.set(webSocket);