
Add an MQTT server (aka 'broker') that logs all published messages. This is purely for debugging Flamenco Manager's events. Although it should work fine as MQTT broker, it's not meant for production use. Run the server with `go run ./cmd/mqtt-server`
60 lines
1.4 KiB
Go
60 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"log/slog"
|
|
"os"
|
|
|
|
mqtt "github.com/mochi-mqtt/server/v2"
|
|
"github.com/mochi-mqtt/server/v2/hooks/auth"
|
|
"github.com/mochi-mqtt/server/v2/listeners"
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
const address = ":1883"
|
|
|
|
func run_mqtt_server(ctx context.Context) {
|
|
|
|
// Create the new MQTT Server.
|
|
options := mqtt.Options{
|
|
Logger: slog.Default(),
|
|
}
|
|
server := mqtt.New(&options)
|
|
|
|
// Allow all connections.
|
|
if err := server.AddHook(new(auth.AllowHook), nil); err != nil {
|
|
log.Error().Err(err).Msg("could not allow all connections, server may be unusable")
|
|
}
|
|
|
|
// Log incoming packets.
|
|
hook := PacketLoggingHook{
|
|
Logger: log.Logger,
|
|
}
|
|
if err := server.AddHook(&hook, nil); err != nil {
|
|
log.Error().Err(err).Msg("could not add packet-logging hook, server may be unusable")
|
|
}
|
|
|
|
// Create a TCP listener on a standard port.
|
|
tcp := listeners.NewTCP(listeners.Config{ID: "test-server", Address: address})
|
|
tcpLogger := log.With().Str("address", address).Logger()
|
|
if err := server.AddListener(tcp); err != nil {
|
|
tcpLogger.Error().Err(err).Msg("listening for TCP connections")
|
|
os.Exit(2)
|
|
}
|
|
tcpLogger.Info().Msg("listening for TCP connections")
|
|
|
|
// Start the MQTT server.
|
|
err := server.Serve()
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("starting the server")
|
|
os.Exit(3)
|
|
}
|
|
|
|
// Run server until interrupted
|
|
<-ctx.Done()
|
|
|
|
log.Info().Msg("shutting down server")
|
|
server.Close()
|
|
log.Info().Msg("shutting down")
|
|
}
|