From 6757a84b6b7620aa1d92cc494a47a77e5a4be9ce Mon Sep 17 00:00:00 2001 From: goopilot <40123561+goopilot@users.noreply.github.com> Date: Sun, 26 Mar 2023 05:16:09 -0500 Subject: [PATCH] [Yeelight] Fix disconnect method (#14670) * fix disconnect --------- Signed-off-by: Alexandr Salamatov --- .../internal/handler/YeelightHandlerBase.java | 5 +++++ .../yeelight/internal/lib/device/DeviceBase.java | 5 +++++ .../lib/device/connection/WifiConnection.java | 16 +++++++++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/bundles/org.openhab.binding.yeelight/src/main/java/org/openhab/binding/yeelight/internal/handler/YeelightHandlerBase.java b/bundles/org.openhab.binding.yeelight/src/main/java/org/openhab/binding/yeelight/internal/handler/YeelightHandlerBase.java index 827d5543e..8543fcdae 100644 --- a/bundles/org.openhab.binding.yeelight/src/main/java/org/openhab/binding/yeelight/internal/handler/YeelightHandlerBase.java +++ b/bundles/org.openhab.binding.yeelight/src/main/java/org/openhab/binding/yeelight/internal/handler/YeelightHandlerBase.java @@ -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; diff --git a/bundles/org.openhab.binding.yeelight/src/main/java/org/openhab/binding/yeelight/internal/lib/device/DeviceBase.java b/bundles/org.openhab.binding.yeelight/src/main/java/org/openhab/binding/yeelight/internal/lib/device/DeviceBase.java index d8c17b308..f933e6249 100644 --- a/bundles/org.openhab.binding.yeelight/src/main/java/org/openhab/binding/yeelight/internal/lib/device/DeviceBase.java +++ b/bundles/org.openhab.binding.yeelight/src/main/java/org/openhab/binding/yeelight/internal/lib/device/DeviceBase.java @@ -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) { diff --git a/bundles/org.openhab.binding.yeelight/src/main/java/org/openhab/binding/yeelight/internal/lib/device/connection/WifiConnection.java b/bundles/org.openhab.binding.yeelight/src/main/java/org/openhab/binding/yeelight/internal/lib/device/connection/WifiConnection.java index d257816d1..cb12e82d6 100644 --- a/bundles/org.openhab.binding.yeelight/src/main/java/org/openhab/binding/yeelight/internal/lib/device/connection/WifiConnection.java +++ b/bundles/org.openhab.binding.yeelight/src/main/java/org/openhab/binding/yeelight/internal/lib/device/connection/WifiConnection.java @@ -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; } }