Add publish code

This commit is contained in:
Raffaele Mignone 2020-07-17 15:25:42 +02:00
parent 8648e99370
commit ca5e20c7a0
Signed by: norangebit
GPG Key ID: F5255658CB220573
1 changed files with 41 additions and 0 deletions

View File

@ -379,4 +379,45 @@ L'applicazione, all'interno dell'architettura, svolge il ruolo di *publisher* e
utilizzati esclusivamente nella modalità *C*.
Questi messaggi trasportano come *payload* il report TCN discusso nella @sec:report e vengono inviati solo quando l'*upload* è richiesto dall'utente.
Anche in questo caso si è scelto di *wrappare* la libreria utilizzata all'interno di una classe sviluppata in proprio.
Poiché l'unica funzionalità di nostro interesse è la *publish* è stato necessario scrivere un'unica funzione statica che si occupa di eseguire quest'operazione.
Questa funzione, riportata nel @lst:mqtt-publish, permette di specificare il topic e il contenuto del messaggio da pubblicare.
Inoltre attraverso una *lambda expression* è possibile specificare come comportarsi in caso di errori.
``` {.kotlin #lst:mqtt-publish caption="Funzione wrap che consente la publicazione di un messaggio MQTT."}
fun publish(
context: Context,
topic: String,
payload: ByteArray,
onFailure: () -> Unit = LOG_ERROR
) {
val clientId = MqttClient.generateClientId()
val client = MqttAndroidClient(
context.applicationContext,
BROKER_URL,
clientId
)
client.connect().actionCallback = object: IMqttActionListener {
override fun onSuccess(asyncActionToken: IMqttToken?) {
val msg = MqttMessage(payload).apply {
qos = 2
}
client.publish(topic, msg).apply {
actionCallback = Disconnect(client)
}
}
override fun onFailure(
asyncActionToken: IMqttToken?,
exception: Throwable?
) {
onFailure()
}
}
}
```
# Riferimenti