// perform connect in background
scheduler.execute(() -> {
// WebThing URI present?
- var uri = toUri(getConfigAs(WebThingConfiguration.class).webThingURI);
- if (uri != null) {
- logger.debug("try to connect WebThing {}", uri);
- var connected = tryReconnect(uri);
+ if (getWebThingURI() != null) {
+ logger.debug("try to connect WebThing {}", webThingURI);
+ var connected = tryReconnect();
if (connected) {
logger.debug("WebThing {} connected", getWebThingLabel());
}
.ifPresent(future -> future.cancel(true));
}
+ private @Nullable URI getWebThingURI() {
+ if (webThingURI == null) {
+ webThingURI = toUri(getConfigAs(WebThingConfiguration.class).webThingURI);
+ }
+ return webThingURI;
+ }
+
private @Nullable URI toUri(@Nullable String uri) {
try {
if (uri != null) {
}
}
- private boolean tryReconnect(@Nullable URI uri) {
+ private boolean tryReconnect() {
if (isActivated.get()) { // will try reconnect only, if activated
try {
// create the client-side WebThing representation
+ var uri = getWebThingURI();
if (uri != null) {
var webThing = ConsumedThingFactory.instance().create(webSocketClient, httpClient, uri, scheduler,
this::onError);
itemChangedListenerMap.getOrDefault(channelUID, EMPTY_ITEM_CHANGED_LISTENER).onItemStateChanged(channelUID,
(State) command);
} else if (command instanceof RefreshType) {
- tryReconnect(webThingURI);
+ tryReconnect();
}
}
// try reconnect, if necessary
if (isDisconnected() || (isOnline() && !isAlive())) {
logger.debug("try reconnecting WebThing {}", getWebThingLabel());
- if (tryReconnect(webThingURI)) {
+ if (tryReconnect()) {
logger.debug("WebThing {} reconnected", getWebThingLabel());
}
// force reconnecting periodically, to fix erroneous states that occurs for unknown reasons
var elapsedSinceLastReconnect = Duration.between(lastReconnect.get(), Instant.now());
if (isOnline() && (elapsedSinceLastReconnect.getSeconds() > RECONNECT_PERIOD.getSeconds())) {
- if (tryReconnect(webThingURI)) {
+ if (tryReconnect()) {
logger.debug("WebThing {} reconnected. Initiated by periodic reconnect", getWebThingLabel());
} else {
logger.debug("could not reconnect WebThing {} (periodic reconnect failed). Next trial in {} sec",
import java.util.function.BiConsumer;
import java.util.function.Consumer;
-import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.jetty.websocket.api.Session;
}
@Override
- public void observeProperty(@NonNull String propertyName, @NonNull BiConsumer<String, Object> listener) {
+ public void observeProperty(String propertyName, BiConsumer<String, Object> listener) {
propertyChangedListeners.put(propertyName, listener);
}
import java.util.function.BiConsumer;
import java.util.function.Consumer;
-import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.jetty.client.HttpClient;
public final AtomicReference<WebSocketImpl> webSocketRef = new AtomicReference<>();
@Override
- public WebSocketConnection create(@NonNull URI webSocketURI, @NonNull ScheduledExecutorService executor,
- @NonNull Consumer<String> errorHandler, @NonNull Duration pingPeriod) {
+ public WebSocketConnection create(URI webSocketURI, ScheduledExecutorService executor,
+ Consumer<String> errorHandler, Duration pingPeriod) {
var webSocketConnection = new WebSocketConnectionImpl(executor, errorHandler, pingPeriod);
var webSocket = new WebSocketImpl(webSocketConnection);
webSocketRef.set(webSocket);