Skip to content

EventBus

EventBus is an event bus used for handling events within an application.

Source:

Usage:

go
import (
    "github.com/duke-git/lancet/v2/eventbus"
)

Index

Documentation

NewEventBus

Create an EventBus instance.

Signature:

go
func NewEventBus[T any]() *EventBus[T]

Example:Run

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
}

Subscribe

Subscribes 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

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
}

Unsubscribe

Unsubscribes 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

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
}

Publish

Publishes an event with a specific event topic and data payload.

Signature:

go
func (eb *EventBus[T]) Publish(event eventbus.Event[T])

Example:Run

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
}

ClearListeners

Clears all the listeners.

Signature:

go
func (eb *EventBus[T]) ClearListeners()

Example:Run

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
}

ClearListenersByTopic

Clears all the listeners by topic.

Signature:

go
func (eb *EventBus[T]) ClearListenersByTopic(topic string)

Example:Run

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
}

GetListenersCount

Returns the number of listeners for a specific event topic.

Signature:

go
func (eb *EventBus[T]) GetListenersCount(topic string) int

Example:Run

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
}

GetAllListenersCount

Returns the total number of all listeners.

Signature:

go
func (eb *EventBus[T]) GetAllListenersCount() int

Example:Run

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
}

GetEvents

Returns all the events topics.

Signature:

go
func (eb *EventBus[T]) GetEvents() []string

Example:Run

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
}

SetErrorHandler

Sets the error handler function.

Signature:

go
func (eb *EventBus[T]) SetErrorHandler(handler func(err error))

Example:Run

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
}