]> git.basschouten.com Git - openhab-addons.git/commitdiff
[Yeelight] Fix disconnect method (#14670)
authorgoopilot <40123561+goopilot@users.noreply.github.com>
Sun, 26 Mar 2023 10:16:09 +0000 (05:16 -0500)
committerGitHub <noreply@github.com>
Sun, 26 Mar 2023 10:16:09 +0000 (12:16 +0200)
* fix disconnect

---------

Signed-off-by: Alexandr Salamatov <goopilot@gmail.com>
bundles/org.openhab.binding.yeelight/src/main/java/org/openhab/binding/yeelight/internal/handler/YeelightHandlerBase.java
bundles/org.openhab.binding.yeelight/src/main/java/org/openhab/binding/yeelight/internal/lib/device/DeviceBase.java
bundles/org.openhab.binding.yeelight/src/main/java/org/openhab/binding/yeelight/internal/lib/device/connection/WifiConnection.java

index 827d5543e3e9c375ae06eebde12852ac513ac6a6..8543fcdae9f1496d0dbf73f58df55407f649a825 100644 (file)
@@ -80,6 +80,11 @@ public abstract class YeelightHandlerBase extends BaseThingHandler
         DeviceManager.getInstance().startDiscovery(15 * 1000);
     }
 
+    @Override
+    public void dispose() {
+        mDevice.disconnect();
+    }
+
     private DeviceType getDeviceModel(ThingTypeUID typeUID) {
         if (typeUID.equals(THING_TYPE_CEILING)) {
             return DeviceType.ceiling;
index d8c17b3084e929eed96f3118cff3d73f5dc9f9df..f933e62493e9d0bf577df55791b23f08d9c30ba7 100644 (file)
@@ -299,6 +299,11 @@ public abstract class DeviceBase {
         mConnection.connect();
     }
 
+    public void disconnect() {
+        setConnectionState(ConnectState.DISCONNECTED);
+        mConnection.disconnect();
+    }
+
     public void setConnectionState(ConnectState connectState) {
         logger.debug("{}: set connection state to: {}", TAG, connectState.name());
         if (connectState == ConnectState.DISCONNECTED) {
index d257816d18eef5c94ecc025b70ec1c76c9b57190..cb12e82d64492506f28693cb5c14b70e3d6a2a85 100644 (file)
@@ -128,6 +128,20 @@ public class WifiConnection implements ConnectionBase {
     @Override
     public boolean disconnect() {
         mDevice.setAutoConnect(false);
-        return false;
+        mCmdRun = false;
+        try {
+            if (mConnectThread != null) {
+                mConnectThread.interrupt();
+            }
+            if (mSocket != null) {
+                mSocket.close();
+            }
+        } catch (Exception e) {
+            logger.debug("Exception while terminating connection", e);
+        } finally {
+            mSocket = null;
+            mDevice.setConnectionState(ConnectState.DISCONNECTED);
+        }
+        return true;
     }
 }