Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement