Skip to content
Snippets Groups Projects
main.go 1022 B
package mqttserver

import (
	"os"

	"github.com/wind-c/comqtt/v2/mqtt"
	"github.com/wind-c/comqtt/v2/mqtt/hooks/auth"
	"github.com/wind-c/comqtt/v2/mqtt/listeners"
	"jonasled.dev/jonasled/ems-esp-logger/log"
)

func Start() {
	server := mqtt.New(nil)

	if os.Getenv("MQTT_USERNAME") == "" {
		_ = server.AddHook(new(auth.AllowHook), nil)
	} else {
		_ = server.AddHook(new(auth.Hook), &auth.Options{
			Ledger: &auth.Ledger{
				Auth: auth.AuthRules{
					{
						Username: auth.RString(os.Getenv("MQTT_USERNAME")),
						Password: auth.RString(os.Getenv("MQTT_PASSWORD")),
						Allow:    true,
					},
				},
			},
		})
	}

	if os.Getenv("MQTT_LISTEN") == "" {
		log.Log.Fatal("please set MQTT_LISTEN")
	}

	tcp := listeners.NewTCP("t1", os.Getenv("MQTT_LISTEN"), nil)
	err := server.AddListener(tcp)
	if err != nil {
		log.Log.Fatal("Failed creating TCP listener on ", os.Getenv("MQTT_LISTEN"), err.Error())
	}

	err = server.Serve()
	if err != nil {
		log.Log.Fatal("Failed starting MQTT server: ", err.Error())
	}
}