diff --git a/mqtt-client/src/main/java/com/gojek/mqtt/client/connectioninfo/ConnectionInfoStore.kt b/mqtt-client/src/main/java/com/gojek/mqtt/client/connectioninfo/ConnectionInfoStore.kt index 7779e311..9acb268a 100644 --- a/mqtt-client/src/main/java/com/gojek/mqtt/client/connectioninfo/ConnectionInfoStore.kt +++ b/mqtt-client/src/main/java/com/gojek/mqtt/client/connectioninfo/ConnectionInfoStore.kt @@ -11,6 +11,10 @@ internal object ConnectionInfoStore { fun updateConnectionInfo(connectionInfo: ConnectionInfo) { state = State.InitialisedState(connectionInfo) } + + fun removeConnectionInfo() { + state = State.UninitialisedState + } } private sealed class State( diff --git a/mqtt-client/src/main/java/com/gojek/mqtt/client/internal/MqttClientInternal.kt b/mqtt-client/src/main/java/com/gojek/mqtt/client/internal/MqttClientInternal.kt index f04a2101..5ae69ceb 100644 --- a/mqtt-client/src/main/java/com/gojek/mqtt/client/internal/MqttClientInternal.kt +++ b/mqtt-client/src/main/java/com/gojek/mqtt/client/internal/MqttClientInternal.kt @@ -19,6 +19,7 @@ import com.gojek.mqtt.client.model.ConnectionState import com.gojek.mqtt.client.v3.IAndroidMqttClient import com.gojek.mqtt.event.AdaptivePingEventHandler import com.gojek.mqtt.event.EventHandler +import com.gojek.mqtt.event.MqttEvent.OperationDiscardedEvent import com.gojek.mqtt.event.MqttEvent.OptimalKeepAliveFoundEvent import com.gojek.mqtt.event.PingEventHandler import com.gojek.mqtt.model.AdaptiveKeepAliveConfig @@ -90,6 +91,7 @@ internal class MqttClientInternal( fun disconnect() { if (initialisationState == UNINITIALISED) { mqttConfiguration.logger.d("MqttClient", "MqttClient is not initialised") + eventHandler.onEvent(OperationDiscardedEvent("Disconnect", "State uninitialised")) return } androidMqttClient?.disconnect() @@ -100,6 +102,7 @@ internal class MqttClientInternal( fun destroy() { if (initialisationState == UNINITIALISED) { mqttConfiguration.logger.d("MqttClient", "MqttClient is not initialised") + eventHandler.onEvent(OperationDiscardedEvent("Destroy", "State uninitialised")) return } androidMqttClient?.destroy() @@ -111,6 +114,7 @@ internal class MqttClientInternal( fun reconnect() { if (initialisationState == UNINITIALISED) { mqttConfiguration.logger.d("MqttClient", "MqttClient is not initialised") + eventHandler.onEvent(OperationDiscardedEvent("Reconnect", "State uninitialised")) return } androidMqttClient?.reconnect() @@ -121,6 +125,7 @@ internal class MqttClientInternal( fun subscribe(vararg topics: Pair) { if (initialisationState == UNINITIALISED) { mqttConfiguration.logger.d("MqttClient", "MqttClient is not initialised") + eventHandler.onEvent(OperationDiscardedEvent("Subscribe", "State uninitialised")) return } androidMqttClient?.subscribe(mapOf(*topics)) @@ -130,6 +135,7 @@ internal class MqttClientInternal( fun unsubscribe(vararg topics: String) { if (initialisationState == UNINITIALISED) { mqttConfiguration.logger.d("MqttClient", "MqttClient is not initialised") + eventHandler.onEvent(OperationDiscardedEvent("Unsubscribe", "State uninitialised")) return } androidMqttClient?.unsubscribe(listOf(*topics)) @@ -139,6 +145,7 @@ internal class MqttClientInternal( fun send(mqttPacket: MqttPacket, sendMessageCallback: SendMessageCallback): Boolean { if (initialisationState == UNINITIALISED) { mqttConfiguration.logger.d("MqttClient", "MqttClient is not initialised") + eventHandler.onEvent(OperationDiscardedEvent("SendMessage", "State uninitialised")) return false } return androidMqttClient?.send(mqttPacket, sendMessageCallback) ?: false @@ -148,6 +155,7 @@ internal class MqttClientInternal( fun addMessageListener(topic: String, listener: MessageListener) { if (initialisationState == UNINITIALISED) { mqttConfiguration.logger.d("MqttClient", "MqttClient is not initialised") + eventHandler.onEvent(OperationDiscardedEvent("AddMessageListener", "State uninitialised")) return } androidMqttClient?.addMessageListener(topic, listener) @@ -157,6 +165,7 @@ internal class MqttClientInternal( fun removeMessageListener(topic: String, listener: MessageListener) { if (initialisationState == UNINITIALISED) { mqttConfiguration.logger.d("MqttClient", "MqttClient is not initialised") + eventHandler.onEvent(OperationDiscardedEvent("RemoveMessageListener", "State uninitialised")) return } androidMqttClient?.removeMessageListener(topic, listener) @@ -166,6 +175,7 @@ internal class MqttClientInternal( fun addGlobalMessageListener(listener: MessageListener) { if (initialisationState == UNINITIALISED) { mqttConfiguration.logger.d("MqttClient", "MqttClient is not initialised") + eventHandler.onEvent(OperationDiscardedEvent("AddGlobalMessageListener", "State uninitialised")) return } androidMqttClient?.addGlobalMessageListener(listener) diff --git a/mqtt-client/src/main/java/com/gojek/mqtt/client/v3/impl/AndroidMqttClient.kt b/mqtt-client/src/main/java/com/gojek/mqtt/client/v3/impl/AndroidMqttClient.kt index 355039d7..9d47d85a 100644 --- a/mqtt-client/src/main/java/com/gojek/mqtt/client/v3/impl/AndroidMqttClient.kt +++ b/mqtt-client/src/main/java/com/gojek/mqtt/client/v3/impl/AndroidMqttClient.kt @@ -433,6 +433,7 @@ internal class AndroidMqttClient( runnableScheduler.stopThread() networkHandler.destroy() eventHandler.onEvent(MqttClientDestroyedEvent()) + ConnectionInfoStore.removeConnectionInfo() } } } diff --git a/mqtt-client/src/main/java/com/gojek/mqtt/event/MqttEvent.kt b/mqtt-client/src/main/java/com/gojek/mqtt/event/MqttEvent.kt index 4c46cf80..75fe1fbb 100644 --- a/mqtt-client/src/main/java/com/gojek/mqtt/event/MqttEvent.kt +++ b/mqtt-client/src/main/java/com/gojek/mqtt/event/MqttEvent.kt @@ -290,4 +290,10 @@ sealed class MqttEvent(open var connectionInfo: ConnectionInfo?) { val timeTakenMillis: Long, override var connectionInfo: ConnectionInfo? = null ) : MqttEvent(connectionInfo) + + data class OperationDiscardedEvent( + val name: String, + val reason: String, + override var connectionInfo: ConnectionInfo? = null + ) : MqttEvent(connectionInfo) }