|  | @@ -1,46 +0,0 @@
 | 
											
												
													
														|  | -package event
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -import "sync"
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -type Event uint16
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -type Handler func(data interface{}) error
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -type Registry interface {
 |  | 
 | 
											
												
													
														|  | -	On(Event, Handler)
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -type Listener struct {
 |  | 
 | 
											
												
													
														|  | -	sync.RWMutex
 |  | 
 | 
											
												
													
														|  | -	events map[Event][]Handler
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -func (l *Listener) On(e Event, h Handler) {
 |  | 
 | 
											
												
													
														|  | -	l.Lock()
 |  | 
 | 
											
												
													
														|  | -	defer l.Unlock()
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -	if l.events == nil {
 |  | 
 | 
											
												
													
														|  | -		l.events = make(map[Event][]Handler)
 |  | 
 | 
											
												
													
														|  | -	}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -	handlers := l.events[e]
 |  | 
 | 
											
												
													
														|  | -	handlers = append(handlers, h)
 |  | 
 | 
											
												
													
														|  | -	l.events[e] = handlers
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -func (l *Listener) Fire(e Event, data interface{}) error {
 |  | 
 | 
											
												
													
														|  | -	l.RLock()
 |  | 
 | 
											
												
													
														|  | -	defer l.RUnlock()
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -	if l.events == nil {
 |  | 
 | 
											
												
													
														|  | -		return nil
 |  | 
 | 
											
												
													
														|  | -	}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -	for _, h := range l.events[e] {
 |  | 
 | 
											
												
													
														|  | -		if err := h(data); err != nil {
 |  | 
 | 
											
												
													
														|  | -			return err
 |  | 
 | 
											
												
													
														|  | -		}
 |  | 
 | 
											
												
													
														|  | -	}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -	return nil
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 |