Невозможно переподключить MQTT, если соединение потеряно Android - PullRequest
0 голосов
/ 27 февраля 2020

Я использую MQTT-клиент, работающий на Android Mobile API Level 27, при попытке переподключиться к моему москитному брокеру, если мое соединение потеряно. оно успешно подключается к mosquitto при инициализации приложения, однако по какой-то причине, если соединение теряется, оно не восстанавливает соединение.

Я установил isAutomaticReconnect в true.

Mqtt объект класс

 fun connect(context: Context) {


        connectOptions.keepAliveInterval=60//seconds
        connectOptions.isAutomaticReconnect = true
        connectOptions.isCleanSession = false



        try {
            val token = mqttAndroidClient.connect()
            token.actionCallback = object : IMqttActionListener {
                override fun onSuccess(asyncActionToken: IMqttToken)
                {

                    subscribe(context)


                }override fun onFailure(asyncActionToken: IMqttToken, exception: Throwable) {

                    Log.i("Connection", "failure")
                    // Give your callback on connection failure here
                    exception.printStackTrace()
                }
            }
        } catch (e: MqttException) {
            // Give your callback on connection failure here
            e.printStackTrace()
        }



}

    private fun subscribe(context:Context) {

    val qos = 2 // Mention your qos value
    try {
        mqttAndroidClient.subscribe(topic,qos,null,object :
        IMqttActionListener{
            override fun onSuccess(asyncActionToken: IMqttToken?) {

            }

            override fun onFailure(asyncActionToken: IMqttToken?, exception: Throwable?) {
            }

        })

    }catch (e:MqttException){
        e.printStackTrace()
    }

    mqttAndroidClient.setCallback(object : MqttCallbackExtended {
        override fun connectComplete(reconnect: Boolean, serverURI: String) {

    }

    override fun connectionLost(cause: Throwable) {
        Log.e("mqtt", "The connection was lost")

    }

    @Throws(Exception::class)
    override fun messageArrived(topic: String, message: MqttMessage) {


        recieveQueue.add(String(message.payload, StandardCharsets.UTF_8))




    }

    override fun deliveryComplete(token: IMqttDeliveryToken) {

    }
})

}

MainActivity:

         MqttClient.connect(this)
...