events

package module
v1.3.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 18, 2024 License: MIT Imports: 7 Imported by: 44

README

events

Package events is implementation of Observer

GoDoc

Import

go.events available through gopkg.in interface:

import "github.com/admpub/events"

or directly from github:

import "github.com/adone/go.events.v2"

Usage

Event

Create event:

event := events.New("eventName")
event.Context["key"] = value

Or create with predefined context:

data := events.Map{"foo": "bar"} // or map[string]interface{}{"foo": "bar"}
event := events.New("eventName", events.WithContext(data))
Emitter
Create

Emitter can be embed into other struct:

type Object struct {
	*events.Emitter
}

object := Object{events.NewEmitter()}

it is a preferable use of Emitter

Emitter supports different delivery strategies:

events.NewEmitter(events.WithDefaultStrategy(Broadcast))

events.NewEmitter(events.WithEventStrategy("event.for.parallel.processing", ParallelBroadcast))

You can define custom strategies by implementing DispatchStrategy function:

customStrategy := func(event events.Event, listeners map[events.Listener]struct{}) error {
	// ...
	return nil
}
Fire event
em := events.NewEmitter()

em.Fire(events.New("event"))

fire event with parameters

em.Fire("event")
//or
em.Fire(events.New("event"))
Subscription on event
  • channels
channel := make(chan events.Event)

object.On("event", events.Stream(channel))
  • handlers
type Handler struct {}

func (Handler) Handle (events.Event) error {
	// handle events
	return nil
}

object.On("event", Handler{})
// or
object.On("event", Handler{}, Handler{}).On("anotherEvent", Handler{})
  • functions
object.On("event", events.Callback(func(event events.Event) error {
	// handle event
	return nil
}))
Ticker

PeriodicEmitter adds support for periodic events on Emitter

import (
	"github.com/admpub/events"
	"time"
)
tick := events.NewTicker(events.NewEmitter())
tick.RegisterEvent("periodic.event.1", 5*time.Second)
// or
tick.RegisterEvent("periodic.event.2", time.NewTicker(5*time.Second))
// or
tick.RegisterEvent("periodic.event.3", 5*time.Second, Handler{})

Documentation

Index

Constants

This section is empty.

Variables

View Source
var Default = NewEmitter()

Functions

func Broadcast added in v1.3.0

func Broadcast(event Event, handlers map[Listener]struct{}) (err error)

Broadcast event to all handlers

func ParallelBroadcast added in v1.3.0

func ParallelBroadcast(event Event, handlers map[Listener]struct{}) error

ParallelBroadcast calls event handlers in separate goroutines

func ParallelBroadcastWithReturning added in v1.3.0

func ParallelBroadcastWithReturning(event Event, handlers map[Listener]struct{}) error

ParallelBroadcastWithReturning calls event handlers in separate goroutines

Types

type DispatchStrategy added in v1.3.0

type DispatchStrategy func(Event, map[Listener]struct{}) error

DispatchStrategy defines strategy of delivery event to handlers

type Dispatcher

type Dispatcher struct {
	// contains filtered or unexported fields
}

Dispatcher stores event listeners of concrete event

func NewDispatcher added in v1.3.0

func NewDispatcher(strategy DispatchStrategy) *Dispatcher

NewDispatcher creates new dispatcher

func (*Dispatcher) AddSubscriber added in v1.3.0

func (dispatcher *Dispatcher) AddSubscriber(handler Listener)

AddSubscriber adds one listener

func (*Dispatcher) AddSubscribers

func (dispatcher *Dispatcher) AddSubscribers(handlers []Listener)

AddSubscribers adds slice of listeners

func (*Dispatcher) Dispatch

func (dispatcher *Dispatcher) Dispatch(event Event) error

Dispatch deliver event to listeners using strategy

func (*Dispatcher) RemoveSubscriber added in v1.3.0

func (dispatcher *Dispatcher) RemoveSubscriber(handler Listener)

RemoveSubscriber removes listener

type Dispatcherer added in v1.3.0

type Dispatcherer interface {
	AddSubscriber(handler Listener)
	AddSubscribers([]Listener)
	RemoveSubscriber(handler Listener)
	Dispatch(Event) error
}

type Emitter

type Emitter struct {
	// contains filtered or unexported fields
}

Emitter

func NewEmitter added in v1.3.0

func NewEmitter(options ...EmitterOption) *Emitter

NewEmitter creates new event emitter

func (*Emitter) AddEventListener added in v1.3.0

func (emitter *Emitter) AddEventListener(handler Listener, events ...string)

AddEventListener subscribes listeners to provided events

func (*Emitter) AddEventListeners added in v1.3.0

func (emitter *Emitter) AddEventListeners(event string, handlers ...Listener)

AddEventListeners subscribes listeners to provided event

func (*Emitter) EventNames added in v1.3.1

func (emitter *Emitter) EventNames() []string

EventNames ...

func (*Emitter) Fire

func (emitter *Emitter) Fire(data interface{}) (err error)

Fire start delivering event to listeners

func (*Emitter) FireByName added in v1.3.2

func (emitter *Emitter) FireByName(name string, options ...EventOption) error

func (*Emitter) FireByNameWithMap added in v1.3.2

func (emitter *Emitter) FireByNameWithMap(name string, data Map) error

func (*Emitter) HasEvent

func (emitter *Emitter) HasEvent(event string) bool

HasEvent ...

func (*Emitter) Off

func (emitter *Emitter) Off(event string) Emitterer

Off unsubscribe all listeners from provided event

func (*Emitter) On

func (emitter *Emitter) On(event string, handlers ...Listener) Emitterer

On subscribes listeners to provided event and return emitter usefull for chain subscriptions

func (*Emitter) RemoveEventListener added in v1.3.0

func (emitter *Emitter) RemoveEventListener(handler Listener)

RemoveEventListener unsubscribe provided listener from all events

func (*Emitter) RemoveEventListeners added in v1.3.0

func (emitter *Emitter) RemoveEventListeners(event string)

RemoveEventListeners unsubscribe all listeners from provided event

type EmitterOption added in v1.3.0

type EmitterOption struct {
	// contains filtered or unexported fields
}

EmitterOption defines option for Emitter

func WithDefaultStrategy added in v1.3.0

func WithDefaultStrategy(strategy DispatchStrategy) EmitterOption

WithDefaultStrategy sets default delivery strategy for event emitter

func WithEventStategy added in v1.3.0

func WithEventStategy(event string, strategy DispatchStrategy) EmitterOption

WithEventStategy sets delivery strategy for provided event

type Emitterer added in v1.3.0

type Emitterer interface {
	On(string, ...Listener) Emitterer
	AddEventListener(handler Listener, events ...string)
	Off(string) Emitterer
	RemoveEventListener(handler Listener)
	Fire(interface{}) error
	FireByName(name string, options ...EventOption) error
	FireByNameWithMap(name string, data Map) error
	EventNames() []string
	HasEvent(string) bool
}

type Event

type Event struct {
	Key     string
	Context param.Store
	// contains filtered or unexported fields
}

Event

func New

func New(data interface{}, options ...EventOption) Event

New create new event with provided name and options

func (*Event) Abort

func (event *Event) Abort() *Event

func (*Event) Aborted

func (event *Event) Aborted() bool

func (*Event) String

func (event *Event) String() string

type EventOption added in v1.3.0

type EventOption struct {
	// contains filtered or unexported fields
}

EventOption for event

func WithContext added in v1.3.0

func WithContext(context Map) EventOption

WithContext sets event metadata

type ID added in v1.3.3

type ID interface {
	ID() string
}

type Listener

type Listener interface {
	Handle(Event) error
}

Listener defines event handler interface

func Callback

func Callback(function func(Event) error, id ...string) Listener

Callback implements Listener interface on function

func WithID added in v1.3.5

func WithID(l Listener, id string) Listener

type Map added in v1.3.0

type Map = param.Store

func ToMap

func ToMap(key string, value interface{}, args ...interface{}) Map

type PeriodicEmitter added in v1.3.0

type PeriodicEmitter struct {
	*Emitter
	// contains filtered or unexported fields
}

PeriodicEmitter is a source of periodic events

func NewTicker added in v1.3.0

func NewTicker(emitter *Emitter) *PeriodicEmitter

NewTicker creates new PeriodicEmitter

func (*PeriodicEmitter) RegisterEvent added in v1.3.0

func (emitter *PeriodicEmitter) RegisterEvent(event string, period interface{}, handlers ...Listener)

RegisterEvent registers new periodic event

func (*PeriodicEmitter) RemoveEvent added in v1.3.0

func (emitter *PeriodicEmitter) RemoveEvent(event string)

RemoveEvent removes provided event

func (*PeriodicEmitter) Stop added in v1.3.0

func (emitter *PeriodicEmitter) Stop()

type Stream

type Stream chan Event

Stream implements Listener interface on channel

func (Stream) Handle

func (stream Stream) Handle(event Event) error

Handle Listener

type Streamer added in v1.3.3

type Streamer interface {
	Listener
	ID
	Chan() <-chan Event
}

func StreamWithID added in v1.3.3

func StreamWithID(ch chan Event, id string) Streamer

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL