Last active
November 27, 2017 14:47
-
-
Save axetroy/a76733dd6d6a81a8382ff73154bda71e to your computer and use it in GitHub Desktop.
EventEmitter for golang
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package pool | |
import "time" | |
type Event struct { | |
Time time.Time | |
Name string | |
Data interface{} | |
Id string | |
} | |
type EventEmitter struct { | |
config *Config | |
events map[string][]EventHandler | |
} | |
type Config struct { | |
MaxListeners int | |
} | |
type EventHandler func(event Event) | |
var defaultConfig = Config{ | |
MaxListeners: 15, | |
} | |
func New(c *Config) *EventEmitter { | |
if c == nil { | |
c = &defaultConfig | |
} | |
return &EventEmitter{ | |
config: c, | |
} | |
} | |
/** | |
Listen on something | |
*/ | |
func (e *EventEmitter) on(eventName string, handler EventHandler) *EventEmitter { | |
if e.events[eventName] == nil { | |
list := *new([]EventHandler) | |
e.events[eventName] = list | |
} | |
list := e.events[eventName] | |
list = append(list, handler) | |
e.events[eventName] = list | |
return e | |
} | |
/** | |
Listen on something once | |
*/ | |
func (e *EventEmitter) once(eventName string, handler EventHandler) *EventEmitter { | |
if e.events[eventName] == nil { | |
list := *new([]EventHandler) | |
e.events[eventName] = list | |
} | |
list := e.events[eventName] | |
list = append(list, handler) | |
e.events[eventName] = list | |
return e | |
} | |
/** | |
Event event | |
*/ | |
func (e *EventEmitter) emit(eventName string, data interface{}) *EventEmitter { | |
list := e.events[eventName] | |
for _, handler := range list { | |
handler(Event{ | |
Time: time.Now(), | |
Name: eventName, | |
Id: "123123", | |
Data: data, | |
}) | |
} | |
return e | |
} | |
/** | |
Clear listener | |
*/ | |
func (e *EventEmitter) clear(eventName *string) *EventEmitter { | |
if eventName == nil { | |
// clear all event listener | |
for name := range e.events { | |
e.events[name] = nil | |
} | |
} else { | |
e.events[*eventName] = nil | |
} | |
return e | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment