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") }