TP-62634 | Mqtt fixes (#10554)

This commit is contained in:
Abhinav Gupta
2024-04-18 21:29:42 +05:30
committed by GitHub
parent 21efc0f805
commit 026c6a93de
2 changed files with 22 additions and 6 deletions

View File

@@ -10,14 +10,15 @@ import com.navi.mqtt.model.MqttSdkInitParams
import com.naviapp.BuildConfig
import com.naviapp.app.NaviApplication
import com.naviapp.common.repository.ConfigRepository
import com.naviapp.home.activity.NewDashboardActivity.Companion.PAGE_HOME
import com.naviapp.utils.COMMA
import com.naviapp.utils.Constants
import com.naviapp.utils.MqttMessageProviderImpl
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.launch
import javax.inject.Inject
class MqttSdkInitUseCase
@Inject
@@ -56,7 +57,11 @@ constructor(
topics = clientIdWithTopics
)
)
MqttManager.subscribe(clientIdWithTopics, mqttMessageProviderImpl)
MqttManager.subscribe(
clientIdWithTopics,
PAGE_HOME,
mqttMessageProviderImpl
)
NaviTrackEvent.trackEvent("mqtt_sdk_init_triggered")
} else {
NaviTrackEvent.trackEvent("mqtt_config_enabled_false")

View File

@@ -38,6 +38,8 @@ object MqttManager {
private lateinit var courierService: CourierService
private val addToQueue = arrayListOf<String>()
private val mqttListeners = hashMapOf<String, ArrayList<MqttMessageProvider>>()
private val mqttListenersScreen = hashSetOf<String>()
private val mqttSubscribeTopics = hashSetOf<String>()
private val analyticsEventTracker by lazy { MqttAnalytics.mqttAnalytics }
fun init(context: Context, mqttSdkInitParams: MqttSdkInitParams?) {
@@ -102,16 +104,22 @@ object MqttManager {
mqttSdkInitParams?.let { params -> mqttConnector.connectMqtt(params) }
}
fun subscribe(topic: String, listener: MqttMessageProvider) {
fun subscribe(topic: String, screenName: String, listener: MqttMessageProvider) {
var listeners = mqttListeners[topic]
if (listeners.isNullOrEmpty()) {
listeners = arrayListOf(listener)
} else {
listeners.add(listener)
if (mqttListenersScreen.contains(screenName).not()) {
listeners.add(listener)
}
}
mqttListeners[topic] = listeners
mqttListenersScreen.add(screenName)
if (isConnected()) {
subscribeToTopics(topic)
if (mqttSubscribeTopics.contains(topic).not()) {
subscribeToTopics(topic)
mqttSubscribeTopics.add(topic)
}
} else {
addToQueue.add(topic)
}
@@ -155,7 +163,10 @@ object MqttManager {
private fun subscribePendingTopics() {
val pendingTopics = ArrayList(addToQueue)
pendingTopics.forEach {
subscribeToTopics(it)
if (mqttSubscribeTopics.contains(it).not()) {
subscribeToTopics(it)
mqttSubscribeTopics.add(it)
}
addToQueue.remove(it)
}
}