# EventBus EventBus is an event bus used for handling events within an application.
## Source: - [https://github.com/duke-git/lancet/blob/main/eventbus/eventbus.go](https://github.com/duke-git/lancet/blob/main/eventbus/eventbus.go) ## Usage: ```go import ( "github.com/duke-git/lancet/v2/eventbus" ) ``` ## Index - [NewEventBus](#NewEventBus) - [Subscribe](#Subscribe) - [Unsubscribe](#Unsubscribe) - [Publish](#Publish) - [ClearListeners](#ClearListeners) - [ClearListenersByTopic](#ClearListenersByTopic) - [GetListenersCount](#GetListenersCount) - [GetAllListenersCount](#GetAllListenersCount) - [GetEvents](#GetEvents) - [SetErrorHandler](#SetErrorHandler) ## Documentation ### NewEventBusCreate an EventBus instance.
Signature: ```go func NewEventBus[T any]() *EventBus[T] ``` Example:[Run](https://go.dev/play/p/gHbOPV_NUOJ) ```go import ( "fmt" "github.com/duke-git/lancet/v2/eventbus" ) func main() { eb := eventbus.NewEventBus[int]() receivedData := 0 listener := func(eventData int) { receivedData = eventData } eb.Subscribe("event1", listener, false, 0, nil) eb.Publish(eventbus.Event[int]{Topic: "event1", Payload: 1}) fmt.Println(receivedData) // Output: // 1 } ``` ### SubscribeSubscribes to an event with a specific event topic and listener function.
Signature: ```go func (eb *EventBus[T]) Subscribe(topic string, listener func(eventData T), async bool, priority int, filter func(eventData T) bool) ``` Example:[Run](https://go.dev/play/p/EYGf_8cHei-) ```go import ( "fmt" "github.com/duke-git/lancet/v2/eventbus" ) func main() { eb := eventbus.NewEventBus[int]() receivedData := 0 listener := func(eventData int) { receivedData = eventData } filter := func(eventData int) bool { return eventData == 1 } eb.Subscribe("event1", listener, false, 0, filter) eb.Publish(eventbus.Event[int]{Topic: "event1", Payload: 1}) eb.Publish(eventbus.Event[int]{Topic: "event1", Payload: 2}) fmt.Println(receivedData) // Output: // 1 } ``` ### UnsubscribeUnsubscribes from an event with a specific event topic and listener function.
Signature: ```go func (eb *EventBus[T]) Unsubscribe(topic string, listener func(eventData T)) ``` Example:[Run](https://go.dev/play/p/Tmh7Ttfvprf) ```go import ( "fmt" "github.com/duke-git/lancet/v2/eventbus" ) func main() { eb := eventbus.NewEventBus[int]() receivedData := 0 listener := func(eventData int) { receivedData = eventData } eb.Subscribe("event1", listener, false, 0, nil) eb.Unsubscribe("event1", listener) eb.Publish(eventbus.Event[int]{Topic: "event1", Payload: 1}) fmt.Println(receivedData) // Output: // 0 } ``` ### PublishPublishes an event with a specific event topic and data payload.
Signature: ```go func (eb *EventBus[T]) Publish(event eventbus.Event[T]) ``` Example:[Run](https://go.dev/play/p/gHTtVexFSH9) ```go import ( "fmt" "github.com/duke-git/lancet/v2/eventbus" ) func main() { eb := eventbus.NewEventBus[int]() eb.Subscribe("event1", func(eventData int) { fmt.Println(eventData) }, false, 0, nil) eb.Publish(eventbus.Event[int]{Topic: "event1", Payload: 1}) // Output: // 1 } ``` ### ClearListenersClears all the listeners.
Signature: ```go func (eb *EventBus[T]) ClearListeners() ``` Example:[Run](https://go.dev/play/p/KBfBYlKPgqD) ```go import ( "fmt" "github.com/duke-git/lancet/v2/eventbus" ) func main() { eb := eventbus.NewEventBus[int]() receivedData := 0 listener := func(eventData int) { receivedData = eventData } eb.Subscribe("event1", listener, false, 0, nil) eb.Subscribe("event2", listener, false, 0, nil) eb.ClearListeners() eb.Publish(eventbus.Event[int]{Topic: "event1", Payload: 1}) eb.Publish(eventbus.Event[int]{Topic: "event2", Payload: 2}) fmt.Println(receivedData) // Output: // 0 } ``` ### ClearListenersByTopicClears all the listeners by topic.
Signature: ```go func (eb *EventBus[T]) ClearListenersByTopic(topic string) ``` Example:[Run](https://go.dev/play/p/gvMljmJOZmU) ```go import ( "fmt" "github.com/duke-git/lancet/v2/eventbus" ) func main() { eb := eventbus.NewEventBus[int]() receivedData := 0 listener := func(eventData int) { receivedData = eventData } eb.Subscribe("event1", listener, false, 0, nil) eb.Subscribe("event2", listener, false, 0, nil) eb.ClearListenersByTopic("event1") eb.Publish(eventbus.Event[int]{Topic: "event1", Payload: 1}) eb.Publish(eventbus.Event[int]{Topic: "event2", Payload: 2}) fmt.Println(receivedData) // Output: // 2 } ``` ### GetListenersCountReturns the number of listeners for a specific event topic.
Signature: ```go func (eb *EventBus[T]) GetListenersCount(topic string) int ``` Example:[Run](https://go.dev/play/p/j6yaJ2xAmFz) ```go import ( "fmt" "github.com/duke-git/lancet/v2/eventbus" ) func main() { eb := eventbus.NewEventBus[int]() eb.Subscribe("event1", func(eventData int) {}, false, 0, nil) eb.Subscribe("event2", func(eventData int) {}, false, 0, nil) count := eb.GetListenersCount("event1") fmt.Println(count) // Output: // 1 } ``` ### GetAllListenersCountReturns the total number of all listeners.
Signature: ```go func (eb *EventBus[T]) GetAllListenersCount() int ``` Example:[Run](https://go.dev/play/p/PUlr0xcpEOz) ```go import ( "fmt" "github.com/duke-git/lancet/v2/eventbus" ) func main() { eb := eventbus.NewEventBus[int]() eb.Subscribe("event1", func(eventData int) {}, false, 0, nil) eb.Subscribe("event2", func(eventData int) {}, false, 0, nil) count := eb.GetAllListenersCount() fmt.Println(count) // Output: // 2 } ``` ### GetEventsReturns all the events topics.
Signature: ```go func (eb *EventBus[T]) GetEvents() []string ``` Example:[Run](https://go.dev/play/p/etgjjcOtAjX) ```go import ( "fmt" "github.com/duke-git/lancet/v2/eventbus" ) func main() { eb := eventbus.NewEventBus[int]() eb.Subscribe("event1", func(eventData int) {}, false, 0, nil) eb.Subscribe("event2", func(eventData int) {}, false, 0, nil) events := eb.GetEvents() for _, event := range events { fmt.Println(event) } // Output: // event2 // event1 } ``` ### SetErrorHandlerSets the error handler function.
Signature: ```go func (eb *EventBus[T]) SetErrorHandler(handler func(err error)) ``` Example:[Run](https://go.dev/play/p/gmB0gnFe5mc) ```go import ( "fmt" "github.com/duke-git/lancet/v2/eventbus" ) func main() { eb := eventbus.NewEventBus[int]() eb.SetErrorHandler(func(err error) { fmt.Println(err) }) eb.Subscribe("event1", func(eventData int) { panic("error") }, false, 0, nil) eb.Publish(eventbus.Event[int]{Topic: "event1", Payload: 1}) // Output: // error } ```