package Observer
type (
Event struct {
Content interface{}
Response chan<- float32
}
Monitor chan<- Event
Target interface{
Add(monitor Monitor)
Remove(monitor Monitor) bool
}
repeater []Monitor
)
func (self *repeater) Add(m Monitor) {
*self = append(*self, m)
}
func (self *repeater) Remove(m Monitor) bool {
for i, which := range *self {
if which == m {
copy((*self)[i:], (*self)[i + 1:])
return true
}
}
return false
}
func (self *repeater) repeat(source <-chan Event) {
for e := range source {
for _, m := range *self {
m <- e
}
}
}
func NewTarget(source <-chan Event) Target {
t := &repeater{}
go t.repeat(source)
return &t
}
Comments