新增:trylock 尝试获取锁,并立即返回加锁结果
This commit is contained in:
@@ -203,21 +203,21 @@ func messageHandler(v Message) {
|
||||
}
|
||||
Bus.shutdown()
|
||||
}
|
||||
case "lock":
|
||||
case "lock", "trylock":
|
||||
// lock key uuid 5
|
||||
if len(rcmd) != 4 {
|
||||
c.send("-Error: lock para number![" + strings.Join(rcmd, " ") + "]")
|
||||
return
|
||||
}
|
||||
d, _ := strconv.Atoi(rcmd[3])
|
||||
Bus._lock(&Lock{key: rcmd[1], uuid: rcmd[2], duration: d})
|
||||
Bus._lock(&Lock{cmd: cmd, key: rcmd[1], uuid: rcmd[2], duration: d})
|
||||
case "unlock":
|
||||
// unlock key uuid
|
||||
if len(rcmd) != 3 {
|
||||
c.send("-Error: unlock para number![" + strings.Join(rcmd, " ") + "]")
|
||||
return
|
||||
}
|
||||
Bus._unlock(Lock{key: rcmd[1], uuid: rcmd[2]})
|
||||
Bus._unlock(Lock{cmd: cmd, key: rcmd[1], uuid: rcmd[2]})
|
||||
default:
|
||||
c.send("-Error: default not supported:[" + strings.Join(rcmd, " ") + "]")
|
||||
return
|
||||
|
||||
@@ -95,9 +95,10 @@ type ZConn struct { //ZConn
|
||||
}
|
||||
|
||||
type Lock struct {
|
||||
key string
|
||||
uuid string
|
||||
duration int
|
||||
cmd string // lock|trylock|unlock
|
||||
key string // lock key
|
||||
uuid string // apply for unique identification
|
||||
duration int // lock duration (seconds)
|
||||
timer *time.Timer
|
||||
start int64
|
||||
//stop time.Time
|
||||
@@ -432,7 +433,12 @@ func (s *ZBus) _lock(lock *Lock) {
|
||||
}
|
||||
}()
|
||||
} else {
|
||||
s.locks[lock.key] = append(locks, lock)
|
||||
switch lock.cmd {
|
||||
case "trylock": // send trylock fail message
|
||||
s.broadcast("trylock", lock.uuid)
|
||||
case "lock":
|
||||
s.locks[lock.key] = append(locks, lock)
|
||||
}
|
||||
}
|
||||
}
|
||||
func (s *ZBus) _unlock(l Lock) {
|
||||
|
||||
@@ -161,6 +161,7 @@ func (s *ZBus) loadLock() {
|
||||
}
|
||||
|
||||
s._lock(&Lock{
|
||||
cmd: "lock",
|
||||
key: split[0],
|
||||
uuid: split[1],
|
||||
duration: duration,
|
||||
|
||||
Reference in New Issue
Block a user