123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- package filesystem
- import (
- "github.com/fsnotify/fsnotify"
- )
- type FSWatcher interface {
-
-
- Init(FSEventHandler, FSErrorHandler) error
-
-
- Run()
-
- AddWatch(path string) error
- }
- type FSEventHandler func(event fsnotify.Event)
- // FSErrorHandler is called when a fsnotify error occurs.
- type FSErrorHandler func(err error)
- type fsnotifyWatcher struct {
- watcher *fsnotify.Watcher
- eventHandler FSEventHandler
- errorHandler FSErrorHandler
- }
- var _ FSWatcher = &fsnotifyWatcher{}
- func NewFsnotifyWatcher() FSWatcher {
- return &fsnotifyWatcher{}
- }
- func (w *fsnotifyWatcher) AddWatch(path string) error {
- return w.watcher.Add(path)
- }
- func (w *fsnotifyWatcher) Init(eventHandler FSEventHandler, errorHandler FSErrorHandler) error {
- var err error
- w.watcher, err = fsnotify.NewWatcher()
- if err != nil {
- return err
- }
- w.eventHandler = eventHandler
- w.errorHandler = errorHandler
- return nil
- }
- func (w *fsnotifyWatcher) Run() {
- go func() {
- defer w.watcher.Close()
- for {
- select {
- case event := <-w.watcher.Events:
- if w.eventHandler != nil {
- w.eventHandler(event)
- }
- case err := <-w.watcher.Errors:
- if w.errorHandler != nil {
- w.errorHandler(err)
- }
- }
- }
- }()
- }
|