Skip to content

Commit

Permalink
[lcn] Fix displaying of "not enough licenses" message (openhab#9761)
Browse files Browse the repository at this point in the history
Signed-off-by: Fabian Wolter <[email protected]>
Signed-off-by: John Marshall <[email protected]>
  • Loading branch information
fwolter authored and themillhousegroup committed May 10, 2021
1 parent 37ea208 commit 58ae597
Show file tree
Hide file tree
Showing 7 changed files with 58 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import java.util.concurrent.ScheduledExecutorService;

import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.lcn.internal.common.LcnAddr;
import org.openhab.binding.lcn.internal.common.LcnDefs;

Expand Down Expand Up @@ -84,6 +85,23 @@ protected void parseLcnBusDiconnectMessage(String pck) {
}
}

/**
* Invoked by any state, if the connection fails.
*
* @param e the cause
*/
public void handleConnectionFailed(@Nullable Throwable e) {
synchronized (context) {
if (e != null) {
String message = e.getMessage();
connection.getCallback().onOffline(message != null ? message : "");
} else {
connection.getCallback().onOffline("");
}
context.setState(ConnectionStateGracePeriodBeforeReconnect::new);
}
}

/**
* Closes the Connection SocketChannel.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public void startWorking() {
*/
protected void startTimeoutTimer() {
addTimer(getScheduler().schedule(
() -> context.handleConnectionFailed(
() -> handleConnectionFailed(
new LcnException("Network timeout in state " + getClass().getSimpleName())),
connection.getSettings().getTimeout(), TimeUnit.MILLISECONDS));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ private void handleConnectionFailure(@Nullable Throwable e) {
message = e.getMessage();
}
connection.getCallback().onOffline(Objects.requireNonNullElse(message, ""));
context.handleConnectionFailed(e);
handleConnectionFailed(e);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import java.util.concurrent.TimeUnit;

import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;

/**
* This state is active when the connection failed. A grace period is enforced to prevent fast cycling through the
Expand Down Expand Up @@ -42,4 +43,9 @@ public void startWorking() {
public void onPckMessageReceived(String data) {
// nothing
}

@Override
public void handleConnectionFailed(@Nullable Throwable e) {
// nothing
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ protected ScheduledExecutorService getScheduler() {

/**
* Gets the PCHK Connection object.
*
*
* @return the connection
*/
public Connection getConnection() {
Expand All @@ -72,15 +72,10 @@ public void queue(LcnAddr addr, boolean wantsAck, byte[] data) {
*
* @param e the cause
*/
public void handleConnectionFailed(@Nullable Throwable e) {
if (!(state instanceof ConnectionStateShutdown)) {
if (e != null) {
String message = e.getMessage();
connection.getCallback().onOffline(message != null ? message : "");
} else {
connection.getCallback().onOffline("");
}
setState(ConnectionStateGracePeriodBeforeReconnect::new);
public synchronized void handleConnectionFailed(@Nullable Throwable e) {
AbstractConnectionState localState = state;
if (localState != null) {
localState.handleConnectionFailed(e);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
package org.openhab.binding.lcn.internal.connection;

import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.lcn.internal.common.LcnAddr;

/**
Expand Down Expand Up @@ -42,4 +43,9 @@ public void queue(LcnAddr addr, boolean wantsAck, byte[] data) {
public void onPckMessageReceived(String data) {
// nothing
}

@Override
public void handleConnectionFailed(@Nullable Throwable e) {
// nothing
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,21 +48,28 @@ public void startWorking() {

@Override
public void onPckMessageReceived(String data) {
switch (data) {
case LcnDefs.LCNCONNSTATE_DISCONNECTED:
cancelLegacyTimer();
connection.getCallback().onOffline("LCN bus not connected to LCN-PCHK/PKE");
break;
case LcnDefs.LCNCONNSTATE_CONNECTED:
cancelLegacyTimer();
connection.getCallback().onOnline();
nextState(ConnectionStateSendDimMode::new);
break;
case LcnDefs.INSUFFICIENT_LICENSES:
cancelLegacyTimer();
handleConnectionFailed(
new LcnException("LCN-PCHK/PKE has not enough licenses to handle this connection"));
break;
}
}

private void cancelLegacyTimer() {
ScheduledFuture<?> localLegacyTimer = legacyTimer;
if (data.equals(LcnDefs.LCNCONNSTATE_DISCONNECTED)) {
if (localLegacyTimer != null) {
localLegacyTimer.cancel(true);
}
connection.getCallback().onOffline("LCN bus not connected to LCN-PCHK/PKE");
} else if (data.equals(LcnDefs.LCNCONNSTATE_CONNECTED)) {
if (localLegacyTimer != null) {
localLegacyTimer.cancel(true);
}
connection.getCallback().onOnline();
nextState(ConnectionStateSendDimMode::new);
} else if (data.equals(LcnDefs.INSUFFICIENT_LICENSES)) {
context.handleConnectionFailed(
new LcnException("LCN-PCHK/PKE has not enough licenses to handle this connection"));
if (localLegacyTimer != null) {
localLegacyTimer.cancel(true);
}
}
}

0 comments on commit 58ae597

Please sign in to comment.