initial commit
This commit is contained in:
commit
6358d0754b
34 changed files with 82616 additions and 0 deletions
66
client/listener.go
Normal file
66
client/listener.go
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
package client
|
||||
|
||||
import (
|
||||
"sync"
|
||||
)
|
||||
|
||||
func newListenerStore() *listenerStore {
|
||||
return &listenerStore{
|
||||
listeners: []*Listener{},
|
||||
}
|
||||
}
|
||||
|
||||
type listenerStore struct {
|
||||
sync.Mutex
|
||||
listeners []*Listener
|
||||
}
|
||||
|
||||
func (store *listenerStore) Add(listener *Listener) {
|
||||
store.Lock()
|
||||
defer store.Unlock()
|
||||
|
||||
store.listeners = append(store.listeners, listener)
|
||||
}
|
||||
|
||||
func (store *listenerStore) Listeners() []*Listener {
|
||||
store.Lock()
|
||||
defer store.Unlock()
|
||||
|
||||
return store.listeners
|
||||
}
|
||||
|
||||
func (store *listenerStore) gc() {
|
||||
store.Lock()
|
||||
defer store.Unlock()
|
||||
|
||||
oldListeners := store.listeners
|
||||
|
||||
store.listeners = []*Listener{}
|
||||
|
||||
for _, listener := range oldListeners {
|
||||
if listener.IsActive() {
|
||||
store.listeners = append(store.listeners, listener)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type Listener struct {
|
||||
mu sync.Mutex
|
||||
isActive bool
|
||||
Updates chan Type
|
||||
}
|
||||
|
||||
func (listener *Listener) Close() {
|
||||
listener.mu.Lock()
|
||||
defer listener.mu.Unlock()
|
||||
|
||||
listener.isActive = false
|
||||
close(listener.Updates)
|
||||
}
|
||||
|
||||
func (listener *Listener) IsActive() bool {
|
||||
listener.mu.Lock()
|
||||
defer listener.mu.Unlock()
|
||||
|
||||
return listener.isActive
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue