mirror of https://github.com/nealey/vail.git
repeater.Listeners()
This commit is contained in:
parent
cdf3869454
commit
7492e9d5bb
2
book.go
2
book.go
|
@ -79,7 +79,7 @@ func (b Book) loop() {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
repeater.Part(event.w)
|
repeater.Part(event.w)
|
||||||
if len(repeater.subscribers) == 0 {
|
if repeater.Listeners() == 0 {
|
||||||
delete(b.entries, event.name)
|
delete(b.entries, event.name)
|
||||||
}
|
}
|
||||||
case sendEvent:
|
case sendEvent:
|
||||||
|
|
21
repeater.go
21
repeater.go
|
@ -4,32 +4,37 @@ import (
|
||||||
"io"
|
"io"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// A Repeater is just a list of Writers.
|
||||||
type Repeater struct {
|
type Repeater struct {
|
||||||
subscribers []io.Writer
|
writers []io.Writer
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewRepeater() *Repeater {
|
func NewRepeater() *Repeater {
|
||||||
return &Repeater{
|
return &Repeater{
|
||||||
subscribers: make([]io.Writer, 0, 20),
|
writers: make([]io.Writer, 0, 20),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Repeater) Join(w io.Writer) {
|
func (r *Repeater) Join(w io.Writer) {
|
||||||
r.subscribers = append(r.subscribers, w)
|
r.writers = append(r.writers, w)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Repeater) Part(w io.Writer) {
|
func (r *Repeater) Part(w io.Writer) {
|
||||||
for i, s := range r.subscribers {
|
for i, s := range r.writers {
|
||||||
if s == w {
|
if s == w {
|
||||||
nsubs := len(r.subscribers)
|
nsubs := len(r.writers)
|
||||||
r.subscribers[i] = r.subscribers[nsubs-1]
|
r.writers[i] = r.writers[nsubs-1]
|
||||||
r.subscribers = r.subscribers[:nsubs-1]
|
r.writers = r.writers[:nsubs-1]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Repeater) Send(p []byte) {
|
func (r *Repeater) Send(p []byte) {
|
||||||
for _, s := range r.subscribers {
|
for _, s := range r.writers {
|
||||||
s.Write(p)
|
s.Write(p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *Repeater) Listeners() int {
|
||||||
|
return len(r.writers)
|
||||||
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ func TestRepeater(t *testing.T) {
|
||||||
|
|
||||||
buf1 := bytes.NewBufferString("buf1")
|
buf1 := bytes.NewBufferString("buf1")
|
||||||
r.Join(buf1)
|
r.Join(buf1)
|
||||||
if len(r.subscribers) != 1 {
|
if r.Listeners() != 1 {
|
||||||
t.Error("Joining did nothing")
|
t.Error("Joining did nothing")
|
||||||
}
|
}
|
||||||
r.Send([]byte("moo"))
|
r.Send([]byte("moo"))
|
||||||
|
|
Loading…
Reference in New Issue