Skip to content

Commit e12835a

Browse files
committed
reconnect to mqtt when connection lost (and rewrite half the mqtt code while implementing this)
1 parent 56253d7 commit e12835a

2 files changed

Lines changed: 12 additions & 22 deletions

File tree

src/main/kotlin/gent/zeus/guitar/mqtt/Mqtt.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import gent.zeus.guitar.StartupCheckResult
55
import org.springframework.boot.ApplicationArguments
66
import org.springframework.boot.ApplicationRunner
77
import org.springframework.stereotype.Component
8+
import java.util.UUID
89

910

1011
internal object MqttEnv : StartupCheck {
@@ -14,7 +15,7 @@ internal object MqttEnv : StartupCheck {
1415
val PUBLISH_TOPIC: String? = System.getenv("MQTT_PUBLISH_TOPIC")
1516

1617
val hostString: String get() = "tcp://$URL:$PORT"
17-
18+
val clientId = "GUITAR-" + UUID.randomUUID().toString()
1819

1920
override fun checkOnStartup(): StartupCheckResult {
2021
val passed = with(MqttEnv) {

src/main/kotlin/gent/zeus/guitar/mqtt/MqttCallbackClient.kt

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.fasterxml.jackson.module.kotlin.readValue
66
import gent.zeus.guitar.Logging
77
import gent.zeus.guitar.data.DataProvider
88
import gent.zeus.guitar.db.InMemoryTrackStore
9+
import org.apache.juli.logging.Log
910
import org.eclipse.paho.client.mqttv3.*
1011
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence
1112
import java.util.*
@@ -15,11 +16,12 @@ class MqttCallbackClient : MqttCallback {
1516
private val trackStore = InMemoryTrackStore()
1617
private val dataProvider = DataProvider(trackStore)
1718

18-
private lateinit var mqttClientId: String
19-
private lateinit var mqttClient: MqttClient
20-
21-
init {
22-
makeClient()
19+
private var mqttClient: MqttClient = MqttClient(
20+
"tcp://${MqttEnv.URL}:${MqttEnv.PORT}",
21+
MqttEnv.clientId,
22+
MemoryPersistence(),
23+
).apply {
24+
setCallback(this@MqttCallbackClient)
2325
}
2426

2527
private val publisher = MqttTrackDetailPublisher(mqttClient, dataProvider)
@@ -30,33 +32,20 @@ class MqttCallbackClient : MqttCallback {
3032
connectionTimeout = 10
3133
}
3234

33-
private fun makeClient() {
34-
mqttClientId = "GUITAR-" + UUID.randomUUID().toString()
35-
mqttClient = MqttClient(
36-
"tcp://${MqttEnv.URL}:${MqttEnv.PORT}",
37-
mqttClientId,
38-
MemoryPersistence(),
39-
).apply {
40-
setCallback(this@MqttCallbackClient)
41-
}
42-
Logging.log.info("mqtt: made new client with id $mqttClientId")
43-
}
44-
4535
fun connect() {
4636
Logging.log.info("mqtt: connecting...")
4737
mqttClient.connect(mqttOptions)
4838
mqttClient.subscribe(MqttEnv.LISTEN_TOPIC)
49-
Logging.log.info("mqtt: connected to ${MqttEnv.hostString} with id $mqttClientId")
39+
Logging.log.info("mqtt: connected to ${MqttEnv.hostString} with id ${MqttEnv.clientId}")
5040
}
5141

5242
override fun connectionLost(cause: Throwable?) {
53-
Logging.log.warn("mqtt: connection lost, reconnecting...")
54-
makeClient()
43+
Logging.log.warn("mqtt: connection lost, reconnecting...", cause)
5544
connect()
56-
// reconnect()
5745
}
5846

5947
override fun messageArrived(topic: String?, message: MqttMessage?) {
48+
Logging.log.info("mqtt: received message on $topic")
6049
message ?: return
6150
val playingJson = try {
6251
val playingJson: MqttPlayingJson = with(jacksonObjectMapper()) {

0 commit comments

Comments
 (0)