Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2017
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.08 KB | None | 0 0
  1. package ws
  2.  
  3. func New() EventHandler {
  4. event := new(event)
  5. event.event = make(chan EventName)
  6. event.list = make(eventList)
  7. return event
  8. }
  9. func runEvents(stack handlerStack, data interface{}) {
  10. for _, handler := range stack {
  11. handler(data)
  12. }
  13. }
  14. func (evn *event) Start() {
  15. go func() {
  16. var eName EventName
  17. for {
  18.  
  19. select {
  20. case eName = <-evn.event:
  21. case <-evn.destroy:
  22. break
  23. }
  24. stack, ok := evn.list[eName]
  25. if !ok {
  26. continue
  27. }
  28. runEvents(stack, evn.data)
  29.  
  30. }
  31. }()
  32. }
  33. func (evn *event) On(name EventName, handler HandleFunc) {
  34. list, ok := evn.list[name]
  35. if !ok {
  36. list = make(handlerStack)
  37. }
  38. list[&handler] = handler
  39. evn.list[name] = list
  40. }
  41.  
  42. func (evn *event) Off(name EventName, handler HandleFunc) {
  43. delete(evn.list[name], &handler)
  44. }
  45.  
  46. //TODO: add delEvent function which will accept event Name and delete complete tree for eventlist
  47. func (evn *event) Emit(name EventName, data interface{}) {
  48. evn.event <- name
  49. if data != nil {
  50. evn.data = data
  51. } else {
  52. evn.data = nil
  53. }
  54. }
  55. func (evn *event) Destroy() {
  56. evn.destroy <- true
  57. evn.list = nil
  58. evn.data = nil
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement