Add network parameters

This commit is contained in:
Raffaele Mignone 2020-07-21 09:47:40 +02:00
parent ca5e20c7a0
commit 3abdf776b0
Signed by: norangebit
GPG Key ID: F5255658CB220573

View File

@ -375,14 +375,16 @@ L'applicazione, all'interno dell'architettura, svolge il ruolo di *publisher* e
- ***Messaggi di contatto***: - ***Messaggi di contatto***:
utilizzati sia nella modalità *A* che nella *B*, permettono di notificare al server un contatto tra due utenti. 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*. 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***: - ***Messaggi di report***:
utilizzati esclusivamente nella modalità *C*. 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. 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. 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. 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. 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."} ``` {.kotlin #lst:mqtt-publish caption="Funzione wrap che consente la publicazione di un messaggio MQTT."}
fun publish( fun publish(
@ -398,26 +400,33 @@ fun publish(
clientId clientId
) )
client.connect().actionCallback = object: IMqttActionListener { val option = MqttConnectOptions().apply {
override fun onSuccess(asyncActionToken: IMqttToken?) { isCleanSession = false
val msg = MqttMessage(payload).apply {
qos = 2
}
client.publish(topic, msg).apply {
actionCallback = Disconnect(client)
}
}
override fun onFailure(
asyncActionToken: IMqttToken?,
exception: Throwable?
) {
onFailure()
}
} }
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 # Riferimenti