diff --git a/controllers/daemon.go b/controllers/daemon.go index 3ca444b..3a6093d 100644 --- a/controllers/daemon.go +++ b/controllers/daemon.go @@ -4,6 +4,8 @@ import ( "fmt" "github.com/Mmx233/BitSrunLoginGo/global" "github.com/Mmx233/tool" + "github.com/howeyc/fsnotify" + "os" "time" ) @@ -29,8 +31,32 @@ func (a *daemon) MarkDaemon() error { func (a *daemon) CheckDaemon() bool { if data, err := tool.File.Read(a.Path); err != nil { - return true + return false } else { return string(data) == a.Mark } } + +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) + } + } +} diff --git a/controllers/guardian.go b/controllers/guardian.go index d805103..b30e658 100644 --- a/controllers/guardian.go +++ b/controllers/guardian.go @@ -11,15 +11,14 @@ import ( func Guardian(output bool) { global.Status.Output = output + go Daemon.DaemonChan() + if e := Daemon.MarkDaemon(); e != nil { util.Log.Fatalln(e) } var c = make(chan bool) for { - if !Daemon.CheckDaemon() { - os.Exit(1) - } global.Status.Output = output go func() { defer func() { diff --git a/go.mod b/go.mod index 1f2f282..100f17b 100644 --- a/go.mod +++ b/go.mod @@ -7,5 +7,6 @@ require ( github.com/Mmx233/tool v0.3.5 github.com/PuerkitoBio/goquery v1.8.0 // indirect github.com/andybalholm/cascadia v1.3.1 // indirect + github.com/howeyc/fsnotify v0.9.0 golang.org/x/net v0.0.0-20211123203042-d83791d6bcd9 // indirect ) diff --git a/go.sum b/go.sum index e1fd2c3..b4ff149 100644 --- a/go.sum +++ b/go.sum @@ -2,18 +2,13 @@ github.com/Mmx233/config v0.0.3 h1:E744hob5fWD5P7m7q+91Z41R+Y1LDkxIhQXIeV1tel0= github.com/Mmx233/config v0.0.3/go.mod h1:3mt+LSHUvD/C6tq1ge/Dmp8xKivFmo7gxSihCPjIAi0= github.com/Mmx233/tool v0.3.5 h1:tZkJKngHhzzPKWENgCdIAWIMW/31qKMy8yXRLAALxPE= github.com/Mmx233/tool v0.3.5/go.mod h1:un5MCoI21lH40fFI5S9++aja8nJb+2sjATak7PnGMZ0= -github.com/PuerkitoBio/goquery v1.7.1 h1:oE+T06D+1T7LNrn91B4aERsRIeCLJ/oPSa6xB9FPnz4= -github.com/PuerkitoBio/goquery v1.7.1/go.mod h1:XY0pP4kfraEmmV1O7Uf6XyjoslwsneBbgeDjLYuN8xY= github.com/PuerkitoBio/goquery v1.8.0 h1:PJTF7AmFCFKk1N6V6jmKfrNH9tV5pNE6lZMkG0gta/U= github.com/PuerkitoBio/goquery v1.8.0/go.mod h1:ypIiRMtY7COPGk+I/YbZLbxsxn9g5ejnI2HSMtkjZvI= -github.com/andybalholm/cascadia v1.2.0/go.mod h1:YCyR8vOZT9aZ1CHEd8ap0gMVm2aFgxBp0T0eFw1RUQY= github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c= github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA= -golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +github.com/howeyc/fsnotify v0.9.0 h1:0gtV5JmOKH4A8SsFxG2BczSeXWWPvcMT0euZt5gDAxY= +github.com/howeyc/fsnotify v0.9.0/go.mod h1:41HzSPxBGeFRQKEEwgh49TRw/nKBsYZ2cF1OzPjSJsA= golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210924151903-3ad01bbaa167 h1:eDd+TJqbgfXruGQ5sJRU7tEtp/58OAx4+Ayjxg4SM+4= -golang.org/x/net v0.0.0-20210924151903-3ad01bbaa167/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211123203042-d83791d6bcd9 h1:0qxwC5n+ttVOINCBeRHO0nq9X7uy8SDsPoi5OaCdIEI= golang.org/x/net v0.0.0-20211123203042-d83791d6bcd9/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=