修改:delay 延时支持延时变更、取消事件
git-svn-id: svn://47.119.165.148/zhub@95 e63fbceb-bcc3-4977-ac22-735b83d8d0f4
This commit is contained in:
@@ -70,7 +70,7 @@ func msgAccept(v Message) {
|
|||||||
case "broadcast":
|
case "broadcast":
|
||||||
zsub.broadcast(rcmd[1], rcmd[2])
|
zsub.broadcast(rcmd[1], rcmd[2])
|
||||||
case "daly":
|
case "daly":
|
||||||
daly(rcmd, c)
|
zsub.daly(rcmd, c)
|
||||||
case "timer":
|
case "timer":
|
||||||
zsub.timer(rcmd, c)
|
zsub.timer(rcmd, c)
|
||||||
case "cmd":
|
case "cmd":
|
||||||
@@ -88,7 +88,9 @@ func msgAccept(v Message) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// daly topic value 100 -> publish topic value
|
// daly topic value 100 -> publish topic value
|
||||||
func daly(rcmd []string, c *ZConn) {
|
func (s *ZSub) daly(rcmd []string, c *ZConn) {
|
||||||
|
s.Lock()
|
||||||
|
defer s.Unlock()
|
||||||
if len(rcmd) != 4 {
|
if len(rcmd) != 4 {
|
||||||
c.send("-Error: subscribe para number!")
|
c.send("-Error: subscribe para number!")
|
||||||
return
|
return
|
||||||
@@ -100,10 +102,24 @@ func daly(rcmd []string, c *ZConn) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
timer := time.NewTimer(time.Duration(t) * time.Millisecond)
|
timer := s.delays[rcmd[1]+"-"+rcmd[2]]
|
||||||
|
if timer != nil {
|
||||||
|
if t == -1 {
|
||||||
|
timer.Stop()
|
||||||
|
s.delays[rcmd[1]+"-"+rcmd[2]] = nil
|
||||||
|
return
|
||||||
|
}
|
||||||
|
timer.Reset(time.Duration(t) * time.Millisecond)
|
||||||
|
} else {
|
||||||
|
timer = time.NewTimer(time.Duration(t) * time.Millisecond)
|
||||||
|
s.delays[rcmd[1]+"-"+rcmd[2]] = timer
|
||||||
|
go func() {
|
||||||
select {
|
select {
|
||||||
case <-timer.C:
|
case <-timer.C:
|
||||||
zsub.publish(rcmd[1], rcmd[2])
|
zsub.publish(rcmd[1], rcmd[2])
|
||||||
|
s.delays[rcmd[1]+"-"+rcmd[2]] = nil
|
||||||
|
}
|
||||||
|
}()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,12 +7,14 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
zsub = ZSub{
|
zsub = ZSub{
|
||||||
topics: make(map[string]*ZTopic),
|
topics: make(map[string]*ZTopic),
|
||||||
timers: make(map[string]*ZTimer),
|
timers: make(map[string]*ZTimer),
|
||||||
|
delays: make(map[string]*time.Timer),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -20,6 +22,7 @@ type ZSub struct {
|
|||||||
sync.RWMutex
|
sync.RWMutex
|
||||||
topics map[string]*ZTopic
|
topics map[string]*ZTopic
|
||||||
timers map[string]*ZTimer
|
timers map[string]*ZTimer
|
||||||
|
delays map[string]*time.Timer
|
||||||
}
|
}
|
||||||
|
|
||||||
type ZConn struct { //ZConn
|
type ZConn struct { //ZConn
|
||||||
|
|||||||
Reference in New Issue
Block a user