v1.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package mainfunc
  2. import (
  3. "errors"
  4. "fmt"
  5. "github.com/SongZihuan/huan-proxy/src/config"
  6. "github.com/SongZihuan/huan-proxy/src/config/configwatcher"
  7. "github.com/SongZihuan/huan-proxy/src/flagparser"
  8. "github.com/SongZihuan/huan-proxy/src/logger"
  9. "github.com/SongZihuan/huan-proxy/src/server"
  10. "github.com/SongZihuan/huan-proxy/src/server/httpserver"
  11. "github.com/SongZihuan/huan-proxy/src/server/httpsserver"
  12. "github.com/SongZihuan/huan-proxy/src/utils"
  13. "os"
  14. )
  15. func MainV1() int {
  16. var err error
  17. err = flagparser.InitFlag()
  18. if errors.Is(err, flagparser.StopFlag) {
  19. return 0
  20. } else if err != nil {
  21. return utils.ExitByError(err)
  22. }
  23. if !flagparser.IsReady() {
  24. return utils.ExitByErrorMsg("flag parser unknown error")
  25. }
  26. utils.SayHellof("%s", "The backend service program starts normally, thank you.")
  27. defer func() {
  28. utils.SayGoodByef("%s", "The backend service program is offline/shutdown normally, thank you.")
  29. }()
  30. cfgErr := config.InitConfig(flagparser.ConfigFile())
  31. if cfgErr != nil && cfgErr.IsError() {
  32. return utils.ExitByError(cfgErr)
  33. }
  34. if !config.IsReady() {
  35. return utils.ExitByErrorMsg("config parser unknown error")
  36. }
  37. err = logger.InitLogger(os.Stdout, os.Stderr)
  38. if err != nil {
  39. return utils.ExitByError(err)
  40. }
  41. if !logger.IsReady() {
  42. return utils.ExitByErrorMsg("logger unknown error")
  43. }
  44. if flagparser.RunAutoReload() {
  45. err = configwatcher.WatcherConfigFile()
  46. if err != nil {
  47. return utils.ExitByError(err)
  48. }
  49. defer configwatcher.CloseNotifyConfigFile()
  50. logger.Infof("Auto reload enable.")
  51. } else {
  52. logger.Infof("Auto reload disable.")
  53. }
  54. logger.Executablef("%s", "ready")
  55. logger.Infof("run mode: %s", config.GetConfig().GlobalConfig.GetRunMode())
  56. ser := server.NewHuanProxyServer()
  57. httpschan := make(chan error)
  58. httpchan := make(chan error)
  59. err = ser.Run(httpschan, httpchan)
  60. if err != nil {
  61. return utils.ExitByErrorMsg(fmt.Sprintf("run http/https error: %s", err.Error()))
  62. }
  63. select {
  64. case <-config.GetSignalChan():
  65. return 0
  66. case err := <-httpchan:
  67. if errors.Is(err, httpserver.ServerStop) {
  68. return 0
  69. } else if err != nil {
  70. return utils.ExitByError(err)
  71. } else {
  72. return 0
  73. }
  74. case err := <-httpschan:
  75. if errors.Is(err, httpsserver.ServerStop) {
  76. return 0
  77. } else if err != nil {
  78. return utils.ExitByError(err)
  79. } else {
  80. return 0
  81. }
  82. }
  83. }