新增:延时事件持久化
git-svn-id: svn://47.119.165.148/zhub@101 e63fbceb-bcc3-4977-ac22-735b83d8d0f4
This commit is contained in:
75
zsub/zdb.go
75
zsub/zdb.go
@@ -1,7 +1,17 @@
|
||||
package zsub
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
var (
|
||||
chanMessages = make(chan Message, 1000) //接收到的 所有消息数据
|
||||
// hubChan = make(chan Message, 1000) //接收到的 所有消息数据
|
||||
)
|
||||
|
||||
// 数据封装
|
||||
@@ -9,3 +19,66 @@ type Message struct {
|
||||
Conn *ZConn
|
||||
Rcmd []string
|
||||
}
|
||||
|
||||
// 文件追加内容
|
||||
func Append(str string, fileName string) {
|
||||
file, err := os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY, os.ModeAppend)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
_, err = file.WriteString(str)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
}
|
||||
|
||||
// 数据持久化
|
||||
func (s *ZSub) saveDelay() {
|
||||
s.Lock()
|
||||
defer s.Unlock()
|
||||
err := os.Remove("delay.z")
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
for _, delay := range s.delays {
|
||||
Append(fmt.Sprintf("%s %s %s\n", delay.topic, delay.value, strconv.FormatInt(delay.exectime.Unix(), 10)), "delay.z")
|
||||
}
|
||||
}
|
||||
|
||||
func (s *ZSub) reloadDelay() {
|
||||
f, err := os.Open("delay.z")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
r := bufio.NewReader(f)
|
||||
for {
|
||||
bytes, err := r.ReadBytes('\n')
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
line := string(bytes)
|
||||
if len(line) == 0 {
|
||||
continue
|
||||
}
|
||||
line = strings.Trim(line, " \r\n")
|
||||
split := strings.Split(line, " ")
|
||||
if len(split) != 3 {
|
||||
continue
|
||||
}
|
||||
|
||||
exectime, err := strconv.ParseInt(split[2], 10, 64)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
continue
|
||||
}
|
||||
if exectime < time.Now().Unix() {
|
||||
continue
|
||||
}
|
||||
s.delay([]string{"delay", split[0], split[1], strconv.FormatInt((exectime-time.Now().Unix())*1000, 10)}, nil)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user