Merge branch 'mqtt' into develop
This commit is contained in:
commit
087a21eb07
@ -396,8 +396,58 @@ 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(
|
||||
context: Context,
|
||||
topic: String,
|
||||
payload: ByteArray,
|
||||
onFailure: () -> Unit = LOG_ERROR
|
||||
) {
|
||||
val clientId = MqttClient.generateClientId()
|
||||
val client = MqttAndroidClient(
|
||||
context.applicationContext,
|
||||
BROKER_URL,
|
||||
clientId
|
||||
)
|
||||
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user