github.com/woremacx/kocha@v0.7.1-0.20150731103243-a5889322afc9/event.go (about) 1 package kocha 2 3 import ( 4 "os" 5 "reflect" 6 "strconv" 7 8 "github.com/woremacx/kocha/event" 9 ) 10 11 // EventHandlerMap represents a map of event handlers. 12 type EventHandlerMap map[event.Queue]map[string]func(app *Application, args ...interface{}) error 13 14 // Evevnt represents the event. 15 type Event struct { 16 // HandlerMap is a map of queue/handlers. 17 HandlerMap EventHandlerMap 18 19 // WorkersPerQueue is a number of workers per queue. 20 // The default value is taken from GOMAXPROCS. 21 // If value of GOMAXPROCS is invalid, set to 1. 22 WorkersPerQueue int 23 24 // ErrorHandler is the handler for error. 25 // If you want to use your own error handler, please set to ErrorHandler. 26 ErrorHandler func(err interface{}) 27 28 e *event.Event 29 app *Application 30 } 31 32 // Trigger emits the event. 33 // The name is an event name that is defined in e.HandlerMap. 34 // If args given, they will be passed to event handler that is defined in e.HandlerMap. 35 func (e *Event) Trigger(name string, args ...interface{}) error { 36 return e.e.Trigger(name, args...) 37 } 38 39 func (e *Event) addHandler(name string, queueName string, handler func(app *Application, args ...interface{}) error) error { 40 return e.e.AddHandler(name, queueName, func(args ...interface{}) error { 41 return handler(e.app, args...) 42 }) 43 } 44 45 func (e *Event) build(app *Application) (*Event, error) { 46 if e == nil { 47 e = &Event{} 48 } 49 e.e = event.New() 50 for queue, handlerMap := range e.HandlerMap { 51 queueName := reflect.TypeOf(queue).String() 52 if err := e.e.RegisterQueue(queueName, queue); err != nil { 53 return nil, err 54 } 55 for name, handler := range handlerMap { 56 if err := e.addHandler(name, queueName, handler); err != nil { 57 return nil, err 58 } 59 } 60 } 61 n := e.WorkersPerQueue 62 if n < 1 { 63 if n, _ = strconv.Atoi(os.Getenv("GOMAXPROCS")); n < 1 { 64 n = 1 65 } 66 } 67 e.e.SetWorkersPerQueue(n) 68 e.e.ErrorHandler = e.ErrorHandler 69 return e, nil 70 } 71 72 func (e *Event) start() { 73 e.e.Start() 74 } 75 76 func (e *Event) stop() { 77 e.e.Stop() 78 }