mqtt_relay/mqtt/server.go
2024-08-22 02:58:23 +08:00

57 lines
1.0 KiB
Go

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"
)
func MqttServerStart(cfg *config.Config) *mqttServerV2.Server {
server := mqttServerV2.New(nil)
// _ = 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)
}
}()
return server
}