package main import ( "os" "gopkg.in/yaml.v2" ) type Config struct { Timeout int `yaml:"timeout"` // minutes StartCommand string `yaml:"start_command"` Port string `yaml:"port"` ConnectTimeout int `yaml:"connect_timeout"` //seconds MCPort string `yaml:"mc_port"` } var defaultConfig = Config{ MCPort: "25565", ConnectTimeout: 10, Port: "4567", Timeout: 1, } // this is a global constant since it's shared var config = Config{} const DEFAULT_VALUE_FMT_STR = "%s not found, default to %v" func LoadConfig(filePath string) error { data, err := os.ReadFile(filePath) if err != nil { GetLogger().Fatalf("Failed to read config file: %v", err) return err } if err := yaml.Unmarshal(data, &config); err != nil { GetLogger().Fatalf("Failed to unmarshal config: %v", err) return err } GetLogger().Info("Configuration loaded successfully") if config.MCPort == "" { GetLogger().Warnf(DEFAULT_VALUE_FMT_STR, "MCPort", defaultConfig.MCPort) config.MCPort = defaultConfig.MCPort } if config.ConnectTimeout == 0 { GetLogger().Warnf(DEFAULT_VALUE_FMT_STR, "ConnectTimeout", defaultConfig.ConnectTimeout) config.ConnectTimeout = defaultConfig.ConnectTimeout } if config.Port == "" { GetLogger().Warnf(DEFAULT_VALUE_FMT_STR, "Port", defaultConfig.Port) config.Port = defaultConfig.Port } if config.Timeout == 0 { GetLogger().Warnf(DEFAULT_VALUE_FMT_STR, "Timeout", defaultConfig.Timeout) config.Timeout = defaultConfig.Timeout } return nil }