[lcn] Fix displaying of "not enough licenses" message (#9761)
Signed-off-by: Fabian Wolter <github@fabian-wolter.de>pull/9806/head
parent
0f118c6b7e
commit
79dfb43e42
|
@ -17,6 +17,7 @@ import java.nio.channels.Channel;
|
|||
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;
|
||||
|
||||
|
@ -84,6 +85,23 @@ public abstract class AbstractConnectionState extends AbstractState<ConnectionSt
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
|
|
|
@ -41,7 +41,7 @@ public abstract class AbstractConnectionStateSendCredentials extends AbstractCon
|
|||
*/
|
||||
protected void startTimeoutTimer() {
|
||||
addTimer(getScheduler().schedule(
|
||||
() -> context.handleConnectionFailed(
|
||||
() -> handleConnectionFailed(
|
||||
new LcnException("Network timeout in state " + getClass().getSimpleName())),
|
||||
connection.getSettings().getTimeout(), TimeUnit.MILLISECONDS));
|
||||
}
|
||||
|
|
|
@ -86,7 +86,7 @@ public class ConnectionStateConnecting extends AbstractConnectionState {
|
|||
message = e.getMessage();
|
||||
}
|
||||
connection.getCallback().onOffline(Objects.requireNonNullElse(message, ""));
|
||||
context.handleConnectionFailed(e);
|
||||
handleConnectionFailed(e);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -15,6 +15,7 @@ package org.openhab.binding.lcn.internal.connection;
|
|||
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
|
||||
|
@ -42,4 +43,9 @@ public class ConnectionStateGracePeriodBeforeReconnect extends AbstractConnectio
|
|||
public void onPckMessageReceived(String data) {
|
||||
// nothing
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleConnectionFailed(@Nullable Throwable e) {
|
||||
// nothing
|
||||
}
|
||||
}
|
||||
|
|
|
@ -72,15 +72,10 @@ public class ConnectionStateMachine extends AbstractStateMachine<ConnectionState
|
|||
*
|
||||
* @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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
/**
|
||||
|
@ -42,4 +43,9 @@ public class ConnectionStateShutdown extends AbstractConnectionState {
|
|||
public void onPckMessageReceived(String data) {
|
||||
// nothing
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleConnectionFailed(@Nullable Throwable e) {
|
||||
// nothing
|
||||
}
|
||||
}
|
||||
|
|
|
@ -48,21 +48,28 @@ public class ConnectionStateWaitForLcnBusConnected extends AbstractConnectionSta
|
|||
|
||||
@Override
|
||||
public void onPckMessageReceived(String data) {
|
||||
ScheduledFuture<?> localLegacyTimer = legacyTimer;
|
||||
if (data.equals(LcnDefs.LCNCONNSTATE_DISCONNECTED)) {
|
||||
if (localLegacyTimer != null) {
|
||||
localLegacyTimer.cancel(true);
|
||||
}
|
||||
switch (data) {
|
||||
case LcnDefs.LCNCONNSTATE_DISCONNECTED:
|
||||
cancelLegacyTimer();
|
||||
connection.getCallback().onOffline("LCN bus not connected to LCN-PCHK/PKE");
|
||||
} else if (data.equals(LcnDefs.LCNCONNSTATE_CONNECTED)) {
|
||||
if (localLegacyTimer != null) {
|
||||
localLegacyTimer.cancel(true);
|
||||
}
|
||||
break;
|
||||
case LcnDefs.LCNCONNSTATE_CONNECTED:
|
||||
cancelLegacyTimer();
|
||||
connection.getCallback().onOnline();
|
||||
nextState(ConnectionStateSendDimMode::new);
|
||||
} else if (data.equals(LcnDefs.INSUFFICIENT_LICENSES)) {
|
||||
context.handleConnectionFailed(
|
||||
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 (localLegacyTimer != null) {
|
||||
localLegacyTimer.cancel(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue