61 lines
1.0 KiB
Go
61 lines
1.0 KiB
Go
package controllers
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/Mmx233/BitSrunLoginGo/internal/global"
|
|
"github.com/Mmx233/tool"
|
|
"github.com/howeyc/fsnotify"
|
|
"os"
|
|
"time"
|
|
)
|
|
|
|
type daemon struct {
|
|
Mark string
|
|
Path string
|
|
}
|
|
|
|
// Daemon 后台模式控制包
|
|
var Daemon = daemon{
|
|
Mark: fmt.Sprint(time.Now().UnixNano()),
|
|
Path: global.Config.Settings.Daemon.Path,
|
|
}
|
|
|
|
// MarkDaemon 写入后台标记文件
|
|
func (a *daemon) MarkDaemon() error {
|
|
return tool.File.WriteAll(a.Path, []byte(a.Mark))
|
|
}
|
|
|
|
// CheckDaemon 检查后台标记文件
|
|
func (a *daemon) CheckDaemon() bool {
|
|
if data, err := tool.File.ReadAll(a.Path); err != nil {
|
|
return false
|
|
} else {
|
|
return string(data) == a.Mark
|
|
}
|
|
}
|
|
|
|
// DaemonChan 后台标记文件监听
|
|
func (a *daemon) DaemonChan() bool {
|
|
f, err := fsnotify.NewWatcher()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
err = f.Watch(Daemon.Path)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
for {
|
|
select {
|
|
case event := <-f.Event:
|
|
if event.IsModify() && a.CheckDaemon() {
|
|
continue
|
|
}
|
|
os.Exit(0)
|
|
case e := <-f.Error:
|
|
panic(e)
|
|
}
|
|
}
|
|
}
|