aboutsummaryrefslogtreecommitdiffstats
path: root/eventer/eventer.go
diff options
context:
space:
mode:
Diffstat (limited to 'eventer/eventer.go')
-rw-r--r--eventer/eventer.go83
1 files changed, 0 insertions, 83 deletions
diff --git a/eventer/eventer.go b/eventer/eventer.go
deleted file mode 100644
index 6e5ee2ec5..000000000
--- a/eventer/eventer.go
+++ /dev/null
@@ -1,83 +0,0 @@
-package eventer
-
-import "sync"
-
-// Basic receiver interface.
-type Receiver interface {
- Send(Event)
-}
-
-// Receiver as channel
-type Channel chan Event
-
-func (self Channel) Send(ev Event) {
- self <- ev
-}
-
-// Receiver as function
-type Function func(ev Event)
-
-func (self Function) Send(ev Event) {
- self(ev)
-}
-
-type Event struct {
- Type string
- Data interface{}
-}
-
-type Channels map[string][]Receiver
-
-type EventMachine struct {
- mu sync.RWMutex
- channels Channels
-}
-
-func New() *EventMachine {
- return &EventMachine{channels: make(Channels)}
-}
-
-func (self *EventMachine) add(typ string, r Receiver) {
- self.mu.Lock()
- self.channels[typ] = append(self.channels[typ], r)
- self.mu.Unlock()
-}
-
-// Generalised methods for the known receiver types
-// * Channel
-// * Function
-func (self *EventMachine) On(typ string, r interface{}) {
- if eventFunc, ok := r.(func(Event)); ok {
- self.RegisterFunc(typ, eventFunc)
- } else if eventChan, ok := r.(Channel); ok {
- self.RegisterChannel(typ, eventChan)
- } else {
- panic("Invalid type for EventMachine::On")
- }
-}
-
-func (self *EventMachine) RegisterChannel(typ string, c Channel) {
- self.add(typ, c)
-}
-
-func (self *EventMachine) RegisterFunc(typ string, f Function) {
- self.add(typ, f)
-}
-
-func (self *EventMachine) Register(typ string) Channel {
- c := make(Channel, 1)
- self.add(typ, c)
- return c
-}
-
-func (self *EventMachine) Post(typ string, data interface{}) {
- self.mu.RLock()
- if self.channels[typ] != nil {
- ev := Event{typ, data}
- for _, receiver := range self.channels[typ] {
- // Blocking is OK. These are internals and need to be handled
- receiver.Send(ev)
- }
- }
- self.mu.RUnlock()
-}