package main import ( "flag" "git.swzry.com/zry/zry-go-program-framework/core" "git.swzry.com/zry/zry-go-program-framework/easy_toml_config" "git.swzry.com/zry/zry-go-program-framework/svcfw" "os" ) var ArgsHelp bool var ArgsCli bool var ArgsCfg string var App *svcfw.AppFramework var Config ConfigDefClass var SubSvcSerial *SerialSubSvc var SubSvcServer core.ISubService func main() { flag.BoolVar(&ArgsHelp, "h", false, "print help") flag.BoolVar(&ArgsCli, "cli", false, "specify config by cli args") flag.StringVar(&ArgsCfg, "cfg", "config.toml", "specify cfg file, default is 'config.toml'") // TODO: Add more args flag.Parse() if ArgsHelp { flag.PrintDefaults() return } App = svcfw.NewAppFramework(true, "main") App.InitConsoleLogBackend(os.Stdout, "") if ArgsCli { App.Panic("load config from cli not supported yet.") // TODO: Config from CLI Args //App.Info("load config from cli args...") } else { App.InfoF("load config from '%s'...", ArgsCfg) App.MustPrepare("config", func() error { return easy_toml_config.LoadConfigFromFile(ArgsCfg, &Config) }) App.MustPrepare("config", ConfigVerifyAndFillDefault) } switch Config.Server.Mode { case "tcp": SubSvcServer = NewTCPServerSubSvc() break case "udp": SubSvcServer = NewUDPServerSubSvc() break case "ws": SubSvcServer = NewWSServerSubSvc() break default: App.PanicF("invalid server mode '%s'", Config.Server.Mode) return } SubSvcSerial = NewSerialSubSvc() App.AddSubSvc("serial", SubSvcSerial) App.AddSubSvc("server", SubSvcServer) App.AddSubSvc("sig-quit", svcfw.NewWatchSignalExitSubServiceWithDefault()) App.Info("preparing sub services...") err := App.Prepare() if err != nil { App.Panic("error in preparing sub services: ", err) } App.Info("start running sub services...") err = App.Run() App.Info("all sub services end.") if err != nil { App.Panic("error in running sub services: ", err) } }