123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- package mainfunc
- import (
- "errors"
- "fmt"
- "github.com/SongZihuan/huan-proxy/src/config"
- "github.com/SongZihuan/huan-proxy/src/config/configwatcher"
- "github.com/SongZihuan/huan-proxy/src/flagparser"
- "github.com/SongZihuan/huan-proxy/src/logger"
- "github.com/SongZihuan/huan-proxy/src/server"
- "github.com/SongZihuan/huan-proxy/src/server/httpserver"
- "github.com/SongZihuan/huan-proxy/src/server/httpsserver"
- "github.com/SongZihuan/huan-proxy/src/utils"
- "os"
- )
- func MainV1() int {
- var err error
- err = flagparser.InitFlag()
- if errors.Is(err, flagparser.StopFlag) {
- return 0
- } else if err != nil {
- return utils.ExitByError(err)
- }
- if !flagparser.IsReady() {
- return utils.ExitByErrorMsg("flag parser unknown error")
- }
- utils.SayHellof("%s", "The backend service program starts normally, thank you.")
- defer func() {
- utils.SayGoodByef("%s", "The backend service program is offline/shutdown normally, thank you.")
- }()
- cfgErr := config.InitConfig(flagparser.ConfigFile())
- if cfgErr != nil && cfgErr.IsError() {
- return utils.ExitByError(cfgErr)
- }
- if !config.IsReady() {
- return utils.ExitByErrorMsg("config parser unknown error")
- }
- err = logger.InitLogger(os.Stdout, os.Stderr)
- if err != nil {
- return utils.ExitByError(err)
- }
- if !logger.IsReady() {
- return utils.ExitByErrorMsg("logger unknown error")
- }
- if flagparser.RunAutoReload() {
- err = configwatcher.WatcherConfigFile()
- if err != nil {
- return utils.ExitByError(err)
- }
- defer configwatcher.CloseNotifyConfigFile()
- logger.Infof("Auto reload enable.")
- } else {
- logger.Infof("Auto reload disable.")
- }
- logger.Executablef("%s", "ready")
- logger.Infof("run mode: %s", config.GetConfig().GlobalConfig.GetRunMode())
- ser := server.NewHuanProxyServer()
- httpschan := make(chan error)
- httpchan := make(chan error)
- err = ser.Run(httpschan, httpchan)
- if err != nil {
- return utils.ExitByErrorMsg(fmt.Sprintf("run http/https error: %s", err.Error()))
- }
- select {
- case <-config.GetSignalChan():
- return 0
- case err := <-httpchan:
- if errors.Is(err, httpserver.ServerStop) {
- return 0
- } else if err != nil {
- return utils.ExitByError(err)
- } else {
- return 0
- }
- case err := <-httpschan:
- if errors.Is(err, httpsserver.ServerStop) {
- return 0
- } else if err != nil {
- return utils.ExitByError(err)
- } else {
- return 0
- }
- }
- }
|