Files
BitSrunLoginGo/internal/controllers/daemon.go
2023-03-01 18:58:38 +08:00

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)
}
}
}