diff options
Diffstat (limited to 'mqtt.go')
| -rw-r--r-- | mqtt.go | 51 |
1 files changed, 51 insertions, 0 deletions
@@ -0,0 +1,51 @@ +package main + +import ( + "log" + "time" + + mqtt "github.com/eclipse/paho.mqtt.golang" +) + +const ( + BROKER = `tcp://127.0.0.1:1883` + CLIENT_ID = `siaserver` + TOPIC_PREFIX = `sia` + QOS = byte(1) + RETAINED = true + MQTT_CONNECT_TIMEOUT = 1 * time.Second + MQTT_DISCONNECT_TIMEOUT_US = 500 + MQTT_RECONNECT_PERIOD = 2 * time.Second +) + +type MQTTMessage struct { + Topic string + Payload []byte +} + +func MQTTRun(tx chan MQTTMessage) { + opts := mqtt.NewClientOptions() + opts.AddBroker(BROKER) + opts.SetClientID(CLIENT_ID) + opts.SetCleanSession(true) + opts.SetOnConnectHandler(MQTTOnConnectHandler) + + client := mqtt.NewClient(opts) + + token := client.Connect() + + success := token.WaitTimeout(MQTT_CONNECT_TIMEOUT) + if !success { + log.Printf("Timed out after %v.", MQTT_CONNECT_TIMEOUT) + return + } + defer client.Disconnect(MQTT_DISCONNECT_TIMEOUT_US) + + for message := range tx { + client.Publish(message.Topic, QOS, RETAINED, message.Payload) + } +} + +func MQTTOnConnectHandler(c mqtt.Client) { + log.Printf("Connected to MQTT broker (%s)", BROKER) +} |
