本文整理匯總了Golang中doozer/store.Store.GetDirAndWatch方法的典型用法代碼示例。如果您正苦於以下問題:Golang Store.GetDirAndWatch方法的具體用法?Golang Store.GetDirAndWatch怎麽用?Golang Store.GetDirAndWatch使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類doozer/store.Store
的用法示例。
在下文中一共展示了Store.GetDirAndWatch方法的2個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: activate
func activate(st *store.Store, self string, c *client.Client, cal chan int) {
logger := util.NewLogger("activate")
ch := make(chan store.Event)
st.GetDirAndWatch("/doozer/slot", ch)
for ev := range ch {
// TODO ev.IsEmpty()
if ev.IsSet() && ev.Body == "" {
_, err := c.Set(ev.Path, self, ev.Cas)
if err != nil {
logger.Println(err)
continue
}
close(cal)
close(ch)
}
}
}
示例2: Monitor
func Monitor(self string, st *store.Store, cl SetDeler) os.Error {
mon := &monitor{
self: self,
st: st,
cl: cl,
clock: make(chan ticker),
units: make(map[string]unit),
refs: make(map[string]int),
exitCh: make(chan exit),
readyCh: make(chan ready),
logger: util.NewLogger("monitor"),
}
mon.logger.Println("reading units")
evs := make(chan store.Event)
st.GetDirAndWatch(ctlKey, evs)
go func(c <-chan store.Event) {
for e := range c {
evs <- e
}
close(evs)
}(st.Watch(lockKey + "/*"))
for {
select {
case t := <-mon.clock:
t.tick()
case ev := <-evs:
prefix, id := path.Split(ev.Path)
switch prefix {
case ctlDir:
if ev.IsDel() {
mon.logger.Println("\n\n\ndel", id)
mon.decrefUnit(id)
break
}
ut := mon.increfUnit(id)
if ut == nil {
break
}
switch ev.Body {
case "start":
ut.start()
case "stop":
ut.stop()
case "auto", "":
fallthrough
default:
// nothing
}
case lockDir:
ut := mon.units[id]
if ut == nil {
break
}
ut.dispatchLockEvent(ev)
}
case e := <-mon.exitCh:
e.e.exited(e.w)
case r := <-mon.readyCh:
r.r.ready(r.f)
}
}
panic("unreachable")
}