From 67511de4a89a84381da01eece06dce2f0fa84e9d Mon Sep 17 00:00:00 2001 From: q191201771 <191201771@qq.com> Date: Tue, 21 May 2024 11:42:17 +0800 Subject: [PATCH] refactor new func base.WrapReadConfigFile --- pkg/base/base.go | 38 ++++++++++++++++++++++++++++++++ pkg/logic/server_manager__.go | 41 +++-------------------------------- 2 files changed, 41 insertions(+), 38 deletions(-) diff --git a/pkg/base/base.go b/pkg/base/base.go index ee89dbd4..23e24a45 100644 --- a/pkg/base/base.go +++ b/pkg/base/base.go @@ -10,6 +10,8 @@ package base import ( + "flag" + "fmt" "os" "strings" "time" @@ -47,6 +49,42 @@ func LogoutStartInfo() { Log.Infof(" doc: %s", LalDocSite) } +func WrapReadConfigFile(theConfigFile string, defaultConfigFiles []string, hookBeforeExit func()) []byte { + // TODO(chef): 统一本函数内的Log和stderr输出 202405 + + // 如果没有指定配置文件,则尝试从默认路径找配置文件 + if theConfigFile == "" { + Log.Warnf("config file did not specify in the command line, try to load it in the usual path.") + for _, dcf := range defaultConfigFiles { + fi, err := os.Stat(dcf) + if err == nil && fi.Size() > 0 && !fi.IsDir() { + Log.Warnf("%s exist. using it as config file.", dcf) + theConfigFile = dcf + break + } else { + Log.Warnf("%s not exist.", dcf) + } + } + + // 如果默认路径也没有配置文件,则退出 + if theConfigFile == "" { + flag.Usage() + if hookBeforeExit != nil { + hookBeforeExit() + } + OsExitAndWaitPressIfWindows(1) + } + } + + // 读取配置文件 + rawContent, err := os.ReadFile(theConfigFile) + if err != nil { + _, _ = fmt.Fprintf(os.Stderr, "read conf file failed. file=%s err=%+v", theConfigFile, err) + OsExitAndWaitPressIfWindows(1) + } + return rawContent +} + func init() { startTime = ReadableNowTime() } diff --git a/pkg/logic/server_manager__.go b/pkg/logic/server_manager__.go index 36471146..4783f172 100644 --- a/pkg/logic/server_manager__.go +++ b/pkg/logic/server_manager__.go @@ -9,7 +9,6 @@ package logic import ( - "flag" "fmt" "net" "net/http" @@ -28,7 +27,6 @@ import ( "github.com/q191201771/lal/pkg/rtmp" "github.com/q191201771/lal/pkg/rtsp" "github.com/q191201771/naza/pkg/defertaskthread" - "github.com/q191201771/naza/pkg/nazalog" //"github.com/felixge/fgprof" ) @@ -74,33 +72,15 @@ func NewServerManager(modOption ...ModOption) *ServerManager { rawContent := sm.option.ConfRawContent if len(rawContent) == 0 { - confFile := sm.option.ConfFilename - // 运行参数中没有配置文件,尝试从几个默认位置读取 - if confFile == "" { - nazalog.Warnf("config file did not specify in the command line, try to load it in the usual path.") - confFile = firstExistDefaultConfFilename() - - // 所有默认位置都找不到配置文件,退出程序 - if confFile == "" { - // TODO(chef): refactor ILalserver既然已经作为package提供了,那么内部就不应该包含flag和os exit的操作,应该返回给上层 - // TODO(chef): refactor new中逻辑是否该往后移 - flag.Usage() - _, _ = fmt.Fprintf(os.Stderr, ` + rawContent = base.WrapReadConfigFile(sm.option.ConfFilename, DefaultConfFilenameList, func() { + _, _ = fmt.Fprintf(os.Stderr, ` Example: %s -c %s Github: %s Doc: %s `, os.Args[0], filepath.FromSlash("./conf/lalserver.conf.json"), base.LalGithubSite, base.LalDocSite) - base.OsExitAndWaitPressIfWindows(1) - } - } - var err error - rawContent, err = os.ReadFile(confFile) - if err != nil { - _, _ = fmt.Fprintf(os.Stderr, "read conf file failed. file=%s err=%+v", confFile, err) - base.OsExitAndWaitPressIfWindows(1) - } + }) } sm.config = LoadConfAndInitLog(rawContent) base.LogoutStartInfo() @@ -842,18 +822,3 @@ func (sm *ServerManager) serveHls(writer http.ResponseWriter, req *http.Request) sm.hlsServerHandler.ServeHTTP(writer, req) } - -// --------------------------------------------------------------------------------------------------------------------- - -func firstExistDefaultConfFilename() string { - for _, dcf := range DefaultConfFilenameList { - fi, err := os.Stat(dcf) - if err == nil && fi.Size() > 0 && !fi.IsDir() { - nazalog.Warnf("%s exist. using it as config file.", dcf) - return dcf - } else { - nazalog.Warnf("%s not exist.", dcf) - } - } - return "" -}