mirror of
https://github.com/danieldemus/openhab-addons
synced 2026-07-29 12:34:21 +02:00
[freeathome] Fix periodic WebSocket disconnect in ping keep-alive mode (#21065)
The bridge sends a WebSocket ping every 10 seconds but only refreshed its liveness timestamp on incoming text frames. Pong replies were never seen because the handler did not implement WebSocketPingPongListener, so on an idle SysAP the 90 second watchdog closed a healthy connection and the binding reconnected in a loop. Implement WebSocketPingPongListener and update lastReceivedTime on every pong, so ping/pong keeps the connection alive while a genuinely dead peer is still detected once pongs stop. Signed-off-by: Danilo Bürger <info@danilobuerger.de>
This commit is contained in:
+14
-1
@@ -50,6 +50,7 @@ import org.eclipse.jetty.util.thread.QueuedThreadPool;
|
||||
import org.eclipse.jetty.websocket.api.Session;
|
||||
import org.eclipse.jetty.websocket.api.StatusCode;
|
||||
import org.eclipse.jetty.websocket.api.WebSocketListener;
|
||||
import org.eclipse.jetty.websocket.api.WebSocketPingPongListener;
|
||||
import org.eclipse.jetty.websocket.client.ClientUpgradeRequest;
|
||||
import org.eclipse.jetty.websocket.client.WebSocketClient;
|
||||
import org.openhab.binding.freeathome.internal.FreeAtHomeDiscoveryService;
|
||||
@@ -82,7 +83,7 @@ import com.google.gson.stream.JsonReader;
|
||||
*
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public class FreeAtHomeBridgeHandler extends BaseBridgeHandler implements WebSocketListener {
|
||||
public class FreeAtHomeBridgeHandler extends BaseBridgeHandler implements WebSocketListener, WebSocketPingPongListener {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(FreeAtHomeBridgeHandler.class);
|
||||
|
||||
@@ -1148,6 +1149,18 @@ public class FreeAtHomeBridgeHandler extends BaseBridgeHandler implements WebSoc
|
||||
logger.warn("Binary message received via websocket - It shall not happen with the free@home SysAp");
|
||||
}
|
||||
|
||||
@Override
|
||||
@NonNullByDefault({})
|
||||
public void onWebSocketPong(ByteBuffer payload) {
|
||||
lastReceivedTime = System.currentTimeMillis();
|
||||
logger.debug("WebSocket pong received");
|
||||
}
|
||||
|
||||
@Override
|
||||
@NonNullByDefault({})
|
||||
public void onWebSocketPing(ByteBuffer payload) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Text message received. Processing will be started
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user