main.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package main
  2. import (
  3. "flag"
  4. "git.swzry.com/zry/zry-go-program-framework/core"
  5. "git.swzry.com/zry/zry-go-program-framework/easy_toml_config"
  6. "git.swzry.com/zry/zry-go-program-framework/svcfw"
  7. "os"
  8. )
  9. var ArgsHelp bool
  10. var ArgsCli bool
  11. var ArgsCfg string
  12. var App *svcfw.AppFramework
  13. var Config ConfigDefClass
  14. var SubSvcSerial *SerialSubSvc
  15. var SubSvcServer core.ISubService
  16. func main() {
  17. flag.BoolVar(&ArgsHelp, "h", false, "print help")
  18. flag.BoolVar(&ArgsCli, "cli", false, "specify config by cli args")
  19. flag.StringVar(&ArgsCfg, "cfg", "config.toml", "specify cfg file, default is 'config.toml'")
  20. // TODO: Add more args
  21. flag.Parse()
  22. if ArgsHelp {
  23. flag.PrintDefaults()
  24. return
  25. }
  26. App = svcfw.NewAppFramework(true, "main")
  27. App.InitConsoleLogBackend(os.Stdout, "")
  28. if ArgsCli {
  29. App.Panic("load config from cli not supported yet.")
  30. // TODO: Config from CLI Args
  31. //App.Info("load config from cli args...")
  32. } else {
  33. App.InfoF("load config from '%s'...", ArgsCfg)
  34. App.MustPrepare("config", func() error {
  35. return easy_toml_config.LoadConfigFromFile(ArgsCfg, &Config)
  36. })
  37. App.MustPrepare("config", ConfigVerifyAndFillDefault)
  38. }
  39. switch Config.Server.Mode {
  40. case "tcp":
  41. SubSvcServer = NewTCPServerSubSvc()
  42. break
  43. case "udp":
  44. SubSvcServer = NewUDPServerSubSvc()
  45. break
  46. case "ws":
  47. SubSvcServer = NewWSServerSubSvc()
  48. break
  49. default:
  50. App.PanicF("invalid server mode '%s'", Config.Server.Mode)
  51. return
  52. }
  53. SubSvcSerial = NewSerialSubSvc()
  54. App.AddSubSvc("serial", SubSvcSerial)
  55. App.AddSubSvc("server", SubSvcServer)
  56. App.AddSubSvc("sig-quit", svcfw.NewWatchSignalExitSubServiceWithDefault())
  57. App.Info("preparing sub services...")
  58. err := App.Prepare()
  59. if err != nil {
  60. App.Panic("error in preparing sub services: ", err)
  61. }
  62. App.Info("start running sub services...")
  63. err = App.Run()
  64. App.Info("all sub services end.")
  65. if err != nil {
  66. App.Panic("error in running sub services: ", err)
  67. }
  68. }