Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ws
- func New() EventHandler {
- event := new(event)
- event.event = make(chan EventName)
- event.list = make(eventList)
- return event
- }
- func runEvents(stack handlerStack, data interface{}) {
- for _, handler := range stack {
- handler(data)
- }
- }
- func (evn *event) Start() {
- go func() {
- var eName EventName
- for {
- select {
- case eName = <-evn.event:
- case <-evn.destroy:
- break
- }
- stack, ok := evn.list[eName]
- if !ok {
- continue
- }
- runEvents(stack, evn.data)
- }
- }()
- }
- func (evn *event) On(name EventName, handler HandleFunc) {
- list, ok := evn.list[name]
- if !ok {
- list = make(handlerStack)
- }
- list[&handler] = handler
- evn.list[name] = list
- }
- func (evn *event) Off(name EventName, handler HandleFunc) {
- delete(evn.list[name], &handler)
- }
- //TODO: add delEvent function which will accept event Name and delete complete tree for eventlist
- func (evn *event) Emit(name EventName, data interface{}) {
- evn.event <- name
- if data != nil {
- evn.data = data
- } else {
- evn.data = nil
- }
- }
- func (evn *event) Destroy() {
- evn.destroy <- true
- evn.list = nil
- evn.data = nil
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement