diff --git a/documentazione.md b/documentazione.md index aab6a0c..9b64aef 100644 --- a/documentazione.md +++ b/documentazione.md @@ -375,14 +375,16 @@ L'applicazione, all'interno dell'architettura, svolge il ruolo di *publisher* e - ***Messaggi di contatto***: utilizzati sia nella modalità *A* che nella *B*, permettono di notificare al server un contatto tra due utenti. Nel caso della modalità *A* viene svolto un invio in *real-time*, mentre nella configurazione *B* l'invio avviene solo dopo aver eseguito l'*upload*. + Il contenuto di questi messaggi coincide con la rappresentazione JSON dei dati di contatto illustrati nel @lst:contact-data. - ***Messaggi di report***: 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. + Questi messaggi trasportano come *payload* la rappresentazione esadecimale del 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. +Sempre dal @lst:mqtt-publish è possibile notare l'utilizzo del parametro `cleanSession` impostato a `false` e l'utilizzo dei *QoS* a livello uno, ciò si è reso necessario per garantire un corretto funzionamento con il resto dell'infrastruttura. ``` {.kotlin #lst:mqtt-publish caption="Funzione wrap che consente la publicazione di un messaggio MQTT."} fun publish( @@ -398,26 +400,33 @@ fun publish( 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() - } + val option = MqttConnectOptions().apply { + isCleanSession = false } + + client.connect(option) + .actionCallback = object: IMqttActionListener { + override fun onSuccess(asyncActionToken: IMqttToken?) { + val msg = MqttMessage(payload).apply { + qos = 1 + } + + client.publish(topic, msg).apply { + actionCallback = Disconnect(client) + } + } + + override fun onFailure( + asyncActionToken: IMqttToken?, + exception: Throwable? + ) { + onFailure() + } + } } ``` +Le funzionalità di rete sono state testate attraverso l'impiego di un brocker pubblico e l'utilizzo del topic `untori`. +Entrambi i parametri sono stati settati tramite delle costanti e quindi possono essere modificati facilmente. + # Riferimenti