]> git.basschouten.com Git - openhab-addons.git/commitdiff
[dmx] Improve exception handling in refresh job (#16281)
authorJ-N-K <github@klug.nrw>
Sun, 14 Jan 2024 19:29:38 +0000 (20:29 +0100)
committerGitHub <noreply@github.com>
Sun, 14 Jan 2024 19:29:38 +0000 (20:29 +0100)
If an exception is thrown while sending (or connecting) the refreshJob died. This exception is now handled gracefully.

Signed-off-by: Jan N. Klug <github@klug.nrw>
bundles/org.openhab.binding.dmx/src/main/java/org/openhab/binding/dmx/internal/DmxBridgeHandler.java

index 5097e24203624e3289487b55f4ba98587d2bd91c..2fba7b729272ceb9a0807e5d85f8b7380fe94662 100644 (file)
@@ -60,7 +60,7 @@ public abstract class DmxBridgeHandler extends BaseBridgeHandler {
     private boolean isMuted = false;
     private int refreshTime = 1000 / DEFAULT_REFRESH_RATE;
 
-    public DmxBridgeHandler(Bridge dmxBridge) {
+    protected DmxBridgeHandler(Bridge dmxBridge) {
         super(dmxBridge);
     }
 
@@ -148,21 +148,27 @@ public abstract class DmxBridgeHandler extends BaseBridgeHandler {
             uninstallScheduler();
         }
         if (refreshTime > 0) {
-            senderJob = scheduler.scheduleAtFixedRate(() -> {
-                logger.trace("runnable packet sender for universe {} called, state {}/{}", universe.getUniverseId(),
-                        getThing().getStatus(), isMuted);
-                if (!isMuted) {
-                    sendDmxData();
-                } else {
-                    logger.trace("bridge {} is muted", getThing().getUID());
-                }
-            }, 1, refreshTime, TimeUnit.MILLISECONDS);
+            senderJob = scheduler.scheduleAtFixedRate(this::refresh, 1, refreshTime, TimeUnit.MILLISECONDS);
             logger.trace("started scheduler for thing {}", this.thing.getUID());
         } else {
             logger.info("refresh disabled for thing {}", this.thing.getUID());
         }
     }
 
+    private void refresh() {
+        try {
+            logger.trace("runnable packet sender for universe {} called, state {}/{}", universe.getUniverseId(),
+                    getThing().getStatus(), isMuted);
+            if (!isMuted) {
+                sendDmxData();
+            } else {
+                logger.trace("bridge {} is muted", getThing().getUID());
+            }
+        } catch (RuntimeException e) {
+            logger.debug("failed to send DMX data: ", e);
+        }
+    }
+
     /**
      * uninstall the sending and updating scheduler
      */