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

68 lines
1.2 KiB
Go

package main
import (
"os/signal"
"syscall"
//"crypto/x509"
"io/ioutil"
"log"
"os"
"gopkg.in/yaml.v2"
"github.com/ssp97/mqtt_relay/config"
"github.com/ssp97/mqtt_relay/mqtt"
)
// LoadConfig loads configuration from a YAML file
func LoadConfig(filename string) (*config.Config, error) {
data, err := ioutil.ReadFile(filename)
if err != nil {
return nil, err
}
var cfg config.Config
err = yaml.Unmarshal(data, &cfg)
if err != nil {
return nil, err
}
return &cfg, nil
}
func main() {
sigs := make(chan os.Signal, 1)
done := make(chan bool, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-sigs
done <- true
}()
// Load configuration
cfg, err := LoadConfig("userdata/config.yml")
if err != nil {
log.Fatalf("Failed to load config: %v", err)
}
// Set up logging
logFile, err := os.OpenFile(cfg.LogFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
log.Fatalf("Failed to open log file: %v", err)
}
defer logFile.Close()
log.SetOutput(logFile)
// Create a new MQTT server
server := mqtt.MqttServerStart(cfg)
<-done
server.Log.Warn("caught signal, stopping...")
_ = server.Close()
server.Log.Info("main.go finished")
}