diff --git a/controllers/daemon.go b/controllers/daemon.go new file mode 100644 index 0000000..3b74f73 --- /dev/null +++ b/controllers/daemon.go @@ -0,0 +1,13 @@ +package controllers + +import ( + "flag" +) + +func init() { + goDaemon := flag.Bool("daemon", false, "") + flag.Parse() + if *goDaemon { + Guardian() + } +} diff --git a/controllers/guardian.go b/controllers/guardian.go index 48447db..0a3f9ec 100644 --- a/controllers/guardian.go +++ b/controllers/guardian.go @@ -3,6 +3,8 @@ package controllers import ( "Mmx/global" "Mmx/util" + "os" + "os/exec" "time" ) @@ -19,3 +21,19 @@ func Guardian() { }() } } + +func EnterGuardian() { + if global.Config.Settings.Guardian != 0 { + global.Status.Daemon = true + util.Log.Println("[Guardian mode]") + if global.Config.Settings.Daemon { + if err := exec.Command(os.Args[0], "-daemon").Start(); err != nil { + util.ErrHandler(err) + return + } + util.Log.Println("[Daemon mode entered]") + return + } + Guardian() + } +} diff --git a/main.go b/main.go index 850ec12..4729b04 100644 --- a/main.go +++ b/main.go @@ -3,44 +3,15 @@ package main import ( "Mmx/Util" "Mmx/controllers" - "Mmx/global" - "flag" - "os" - "os/exec" - "runtime" ) func main() { - goDaemon := flag.Bool("daemon", false, "") - flag.Parse() - if *goDaemon { - controllers.Guardian() - } + defer util.Log.CatchRecover() - defer func() { - if e := recover(); e != nil { - util.Log.Println(e) - var buf [4096]byte - util.Log.Println(string(buf[:runtime.Stack(buf[:], false)])) - os.Exit(1) - } - }() if err := controllers.Login(true); err != nil { util.ErrHandler(err) return } - if global.Config.Settings.Guardian != 0 { - global.Status.Daemon = true - util.Log.Println("[Guardian mode]") - if global.Config.Settings.Daemon { - if err := exec.Command(os.Args[0], "-daemon").Start(); err != nil { - util.ErrHandler(err) - return - } - util.Log.Println("[Daemon mode entered]") - return - } - controllers.Guardian() - } + controllers.EnterGuardian() } diff --git a/util/log.go b/util/log.go index 9171849..e909e46 100644 --- a/util/log.go +++ b/util/log.go @@ -4,7 +4,9 @@ import ( "Mmx/Global" "fmt" "log" + "os" "reflect" + "runtime" "time" ) @@ -57,3 +59,12 @@ func (c *loG) Fatalln(a ...interface{}) { c.WriteLog("LoginError-"+c.timeStamp+".log", a...) log.Fatalln(a...) } + +func (c *loG) CatchRecover() { + if e := recover(); e != nil { + c.Println(e) + var buf [4096]byte + c.Println(string(buf[:runtime.Stack(buf[:], false)])) + os.Exit(1) + } +}