mqtt_relay/mqtt/server.go
2024-08-22 13:09:44 +08:00

66 lines
1.2 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"
)
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
}