Sfoglia il codice sorgente

Merge branch 'master' of http://192.168.3.207:8080/BP/common into master

zhangxinlei1996 3 anni fa
parent
commit
843b531cb2
2 ha cambiato i file con 61 aggiunte e 0 eliminazioni
  1. 10 0
      src/qfw/util/fsnotify/README.md
  2. 51 0
      src/qfw/util/fsnotify/fsnotify.go

+ 10 - 0
src/qfw/util/fsnotify/README.md

@@ -0,0 +1,10 @@
+#fsnotify监控文件
+
+#“sword->%s”:应用模块名称;“./test.json”:监控文件位置和名称;“true”:是否初始化;“func()”:逻辑处理;
+
+#fs.FSNotifyFUNC("sword->%s", "./test.json", true, func() {
+#	log.Println("------------")
+#	util.ReadConfig("./test.json", &TC)
+#})
+
+#默认5秒内 重复操作无效!!!

+ 51 - 0
src/qfw/util/fsnotify/fsnotify.go

@@ -0,0 +1,51 @@
+package fsnotify
+
+import (
+	"fmt"
+	"log"
+	"time"
+
+	"github.com/fsnotify/fsnotify"
+)
+
+var applyAction = map[string]int64{}
+var applyTime int64 = 5
+
+func FSNotifyFUNC(name, dir string, flag bool, f func()) {
+	if flag {
+		f()
+	}
+	watch, err := fsnotify.NewWatcher()
+	if err != nil {
+		log.Println("watch new err", err)
+	}
+	defer watch.Close()
+	err = watch.Add(dir)
+	if err != nil {
+		log.Println("watch add err", err)
+	}
+	for {
+		select {
+		case ev := <-watch.Events:
+			{
+				if ev.Op&fsnotify.Write == fsnotify.Write {
+					now := time.Now().Unix()
+					//5秒之内 同一个文件不作操作
+					if applyAction[fmt.Sprintf(name, ev.Name)] != 0 && now-applyAction[fmt.Sprintf(name, ev.Name)] < applyTime {
+						continue
+					}
+					log.Println("修改文件 : ", fmt.Sprintf(name, ev.Name))
+					applyAction[fmt.Sprintf(name, ev.Name)] = now
+					time.Sleep(1 * time.Second)
+					//更新应用版本号
+					go f()
+				}
+			}
+		case err := <-watch.Errors:
+			{
+				log.Println("watch error : ", err.Error())
+				return
+			}
+		}
+	}
+}