Skip to content

Instantly share code, notes, and snippets.

@blinkinglight
Created May 23, 2015 11:38
Show Gist options
  • Save blinkinglight/33717844325c0173c3d4 to your computer and use it in GitHub Desktop.
Save blinkinglight/33717844325c0173c3d4 to your computer and use it in GitHub Desktop.
package main
type Event struct {
Command string
Payload interface{}
}
type EventMananger struct {
eventsChan chan *Event
events map[string]func(interface{})
}
func NewEventMananger() *EventMananger {
em := &EventMananger{
eventsChan: make(chan *Event),
events: make(map[string]func(interface{})),
}
go em.Start()
return em
}
func (em *EventMananger) Start() {
for {
select {
case m := <-em.eventsChan:
go em.runTask(m.Command, m.Payload)
}
}
}
func (em *EventMananger) AddFunc(name string, f func(interface{})) {
em.events[name] = f
}
func (em *EventMananger) RunTask(name string, payload interface{}) bool {
if _, ok := em.events[name]; ok != false {
em.eventsChan <- &Event{name, payload}
return true
}
return false
}
func (em *EventMananger) runTask(name string, payload interface{}) bool {
if f, ok := em.events[name]; ok != false {
go f(payload)
return true
}
return false
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment