Skip to content

admpub/events

 
 

Repository files navigation

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{})

About

golang observer implementation

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 98.3%
  • Makefile 1.7%