66 lines
1.2 KiB
Go
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
|
|
}
|