package mqtt import ( "crypto/tls" "fmt" "log" mqttServerV2 "github.com/mochi-mqtt/server/v2" "github.com/mochi-mqtt/server/v2/listeners" "github.com/ssp97/mqtt_relay/config" ) var globalServer *mqttServerV2.Server func GetMqttServer() *mqttServerV2.Server { return globalServer } func MqttServerStart(cfg *config.Config) *mqttServerV2.Server { server := mqttServerV2.New(&mqttServerV2.Options{ InlineClient: true, }) // _ = server.AddHook(new(auth.AllowHook), nil) var tlsConfig *tls.Config var err error if cfg.Server.EnableTLS { tlsConfig, err = CreateTLSConfig(cfg.Server.CertFile, cfg.Server.KeyFile) if err != nil { log.Fatalf("CreateTLSConfig fail, err= %v\r\n", err) } } else { tlsConfig = nil } tcp := listeners.NewTCP(listeners.Config{ ID: "TCP TLS", Address: fmt.Sprintf("%s:%d", cfg.Server.Host, cfg.Server.Port), TLSConfig: tlsConfig, }) err = server.AddListener(tcp) if err != nil { log.Fatal(err) } err = server.AddHook(new(MqttServerHook), &MqttServerHookOptions{ Server: server, }) if err != nil { log.Fatal(err) } go func() { err := server.Serve() if err != nil { log.Fatal(err) } }() globalServer = server return server }