...
1 package common
2
3 import (
4 "sync"
5 )
6
7 var (
8 receiver_lock sync.Mutex
9 receivers = make(map[string]*broadcast_receiver)
10 )
11
12 type broadcast_receiver struct {
13 callbacks []func()
14 }
15
16 func AddRegistryChangeReceiver(f func()) {
17 receiver_lock.Lock()
18 defer receiver_lock.Unlock()
19 br := receivers["REGISTRYCHANGE"]
20 if br == nil {
21 br = &broadcast_receiver{}
22 receivers["REGISTRYCHANGE"] = br
23 }
24 br.callbacks = append(br.callbacks, f)
25 }
26
27 func NotifyRegistryChangeListeners() {
28 wake("REGISTRYCHANGE")
29 }
30 func wake(name string) {
31 receiver_lock.Lock()
32 br := receivers[name]
33 receiver_lock.Unlock()
34 if br == nil {
35 return
36 }
37 for _, cb := range br.callbacks {
38 cb()
39 }
40 }
41
View as plain text