diff --git a/pom.xml b/pom.xml index 92917f5..7337ded 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.12.1 + 3.14.0 21 21 @@ -20,7 +20,7 @@ org.apache.maven.plugins maven-surefire-plugin - 2.22.2 + 3.5.3 org.apache.maven.plugins @@ -44,12 +44,12 @@ org.springframework spring-web - 6.1.4 + 6.2.7 com.fasterxml.jackson.core jackson-databind - 2.16.1 + 2.18.4 org.eclipse.paho @@ -59,29 +59,29 @@ org.apache.httpcomponents.client5 httpclient5 - 5.3.1 + 5.5 org.slf4j slf4j-api - 2.0.12 + 2.0.17 org.mockito mockito-core - 5.10.0 + 5.18.0 test org.mockito mockito-junit-jupiter - 5.10.0 + 5.18.0 test org.junit.jupiter junit-jupiter - 5.10.2 + 5.11.4 test diff --git a/src/main/java/com/orange/lo/sdk/LOApiClientParameters.java b/src/main/java/com/orange/lo/sdk/LOApiClientParameters.java index 73cbd57..69e935a 100644 --- a/src/main/java/com/orange/lo/sdk/LOApiClientParameters.java +++ b/src/main/java/com/orange/lo/sdk/LOApiClientParameters.java @@ -9,6 +9,7 @@ import com.orange.lo.sdk.externalconnector.DataManagementExtConnectorCommandCallback; import com.orange.lo.sdk.fifomqtt.DataManagementFifoCallback; +import com.orange.lo.sdk.mqtt.DataManagementReconnectCallback; import java.util.ArrayList; import java.util.List; @@ -47,6 +48,7 @@ public final class LOApiClientParameters { private final List topics; private final DataManagementFifoCallback dataManagementFifoCallback; private final DataManagementExtConnectorCommandCallback dataManagementExtConnectorCommandCallback; + private final DataManagementReconnectCallback dataManagementReconnectCallback; private final String extConnectorCommandRequestTopic; private final String extConnectorCommandResponseTopic; private final String extConnectorStatusTopicTemplate; @@ -74,6 +76,7 @@ private LOApiClientParameters(LOApiClientParametersBuilder builder) { this.extConnectorCommandResponseTopic = builder.extConnectorCommandResponseTopic; this.extConnectorStatusTopicTemplate = builder.extConnectorStatusTopicTemplate; this.extConnectorDataTopicTemplate = builder.extConnectorDataTopicTemplate; + this.dataManagementReconnectCallback = builder.dataManagementReconnectCallback; } public String getConnectorType() { @@ -144,6 +147,10 @@ public DataManagementExtConnectorCommandCallback getDataManagementExtConnectorCo return dataManagementExtConnectorCommandCallback; } + public DataManagementReconnectCallback getDataManagementReconnectCallback() { + return dataManagementReconnectCallback; + } + public String getExtConnectorCommandResponseTopic() { return extConnectorCommandResponseTopic; } @@ -183,6 +190,7 @@ public static final class LOApiClientParametersBuilder { private List topics = new ArrayList<>(); private DataManagementFifoCallback dataManagementFifoCallback; private DataManagementExtConnectorCommandCallback dataManagementExtConnectorCommandCallback; + private DataManagementReconnectCallback dataManagementReconnectCallback; private String extConnectorCommandRequestTopic = DEFAULT_EXT_CONNECTOR_COMMAND_REQUEST_TOPIC; private String extConnectorCommandResponseTopic = DEFAULT_EXT_CONNECTOR_COMMAND_RESPONSE_TOPIC; private String extConnectorStatusTopicTemplate = DEFAULT_EXT_CONNECTOR_STATUS_TOPIC_TEMPLATE; @@ -274,6 +282,12 @@ public LOApiClientParametersBuilder dataManagementExtConnectorCommandCallback( return this; } + public LOApiClientParametersBuilder dataManagementReconnectCallback( + DataManagementReconnectCallback dataManagementReconnectCallback) { + this.dataManagementReconnectCallback = dataManagementReconnectCallback; + return this; + } + public LOApiClientParametersBuilder extConnectorCommandRequestTopic(String extConnectorCommandRequestTopic) { this.extConnectorCommandRequestTopic = extConnectorCommandRequestTopic; return this; diff --git a/src/main/java/com/orange/lo/sdk/mqtt/AbstractDataManagementMqtt.java b/src/main/java/com/orange/lo/sdk/mqtt/AbstractDataManagementMqtt.java index 2a5afaf..d5f9afd 100644 --- a/src/main/java/com/orange/lo/sdk/mqtt/AbstractDataManagementMqtt.java +++ b/src/main/java/com/orange/lo/sdk/mqtt/AbstractDataManagementMqtt.java @@ -10,6 +10,7 @@ import java.lang.invoke.MethodHandles; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import org.eclipse.paho.client.mqttv3.IMqttClient; import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; @@ -36,7 +37,8 @@ public abstract class AbstractDataManagementMqtt { private final MqttReconnectCallback mqttReconnectCallback; public AbstractDataManagementMqtt(LOApiClientParameters parameters, MqttClientFactory mqttClientFactory) { - this.mqttReconnectCallback = new MqttReconnectCallback(); + DataManagementReconnectCallback reconnectCallback = parameters.getDataManagementReconnectCallback(); + this.mqttReconnectCallback = new MqttReconnectCallback(reconnectCallback); this.mqttClient = mqttClientFactory.getMqttClient(); this.mqttClient.setCallback(mqttReconnectCallback); this.parameters = parameters; @@ -147,6 +149,11 @@ class MqttReconnectCallback implements MqttCallbackExtended { private final List topicFiltersList = new ArrayList<>(); private final List qosList = new ArrayList<>(); private final List listenersList = new ArrayList<>(); + private final DataManagementReconnectCallback reconnectCallback; + + public MqttReconnectCallback(DataManagementReconnectCallback reconnectCallback) { + this.reconnectCallback = reconnectCallback; + } public void addSubscriptions(String[] topicFilters, int[] qos, IMqttMessageListener[] messageListeners) { // To remove duplicates causing the error "This Topic Is Already Subscribed In The Same MQTT Connection" @@ -163,9 +170,12 @@ public void addSubscriptions(String[] topicFilters, int[] qos, IMqttMessageListe LOG.info("MqttReconnectCallback listenersList: {}", listenersList); } - public void connectionLost(Throwable cause) { + public void connectionLost(Throwable cause) { LOG.error("Connection lost: {}", cause.getMessage()); - } + if (thereIsA(reconnectCallback)) { + reconnectCallback.connectionLost(cause); + } + } public void messageArrived(String topic, MqttMessage message) throws Exception { } @@ -181,6 +191,13 @@ public void connectComplete(boolean reconnect, String serverURI) { qosList.stream().mapToInt(Integer::intValue).toArray(), listenersList.toArray(new IMqttMessageListener[0])); } + if (thereIsA(reconnectCallback)) { + reconnectCallback.connectComplete(reconnect, serverURI); + } } + + private boolean thereIsA(Object object) { + return Objects.nonNull(object); + } } } diff --git a/src/main/java/com/orange/lo/sdk/mqtt/DataManagementReconnectCallback.java b/src/main/java/com/orange/lo/sdk/mqtt/DataManagementReconnectCallback.java new file mode 100644 index 0000000..c0c3736 --- /dev/null +++ b/src/main/java/com/orange/lo/sdk/mqtt/DataManagementReconnectCallback.java @@ -0,0 +1,13 @@ +/** + * Copyright (c) Orange. All Rights Reserved. + *

+ * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.orange.lo.sdk.mqtt; + +public interface DataManagementReconnectCallback { + void connectComplete(boolean reconnect, String serverURI); + void connectionLost(Throwable cause); +} \ No newline at end of file