github.com/goravel/framework@v1.13.9/event/application.go (about)

     1  package event
     2  
     3  import (
     4  	"github.com/goravel/framework/contracts/event"
     5  	queuecontract "github.com/goravel/framework/contracts/queue"
     6  )
     7  
     8  type Application struct {
     9  	events map[event.Event][]event.Listener
    10  	queue  queuecontract.Queue
    11  }
    12  
    13  func NewApplication(queue queuecontract.Queue) *Application {
    14  	return &Application{
    15  		queue: queue,
    16  	}
    17  }
    18  
    19  func (app *Application) Register(events map[event.Event][]event.Listener) {
    20  	var jobs []queuecontract.Job
    21  
    22  	if app.events == nil {
    23  		app.events = map[event.Event][]event.Listener{}
    24  	}
    25  
    26  	for e, listeners := range events {
    27  		app.events[e] = listeners
    28  		for _, listener := range listeners {
    29  			jobs = append(jobs, listener)
    30  		}
    31  	}
    32  
    33  	app.queue.Register(jobs)
    34  }
    35  
    36  func (app *Application) GetEvents() map[event.Event][]event.Listener {
    37  	return app.events
    38  }
    39  
    40  func (app *Application) Job(e event.Event, args []event.Arg) event.Task {
    41  	listeners, ok := app.events[e]
    42  	if !ok {
    43  		listeners = make([]event.Listener, 0)
    44  	}
    45  
    46  	return NewTask(app.queue, args, e, listeners)
    47  }