|  | @@ -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
 | 
	
		
			
				|  |  | -}
 |