events

package
v0.1.6 Latest Latest
Warning

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

Go to latest
Published: Jul 12, 2021 License: AGPL-3.0 Imports: 2 Imported by: 0

Documentation

Overview

Package events provides types to implement busses of events in an application. Senders can send events on these busses and receiver receive the events. What differenciate such a bus from a Go channel is that each event is dispatched to all receiver.

By providing a central busses to different parts of the application, these parts can communicate together without knowing each other.

Index

Constants

View Source
const DefaultManagerChannelSize = 256

Variables

View Source
var (
	ManagerClosedError = errors.New("The manager is closed")
)

Errors

Functions

This section is empty.

Types

type AsyncForwarder

type AsyncForwarder struct {
	// Filter returns true for events that must be forwarded through the channel.
	Filter func(Event) bool
	Chan   chan<- Event
}

AsyncForwarder is a simple Receiver that forward events through a channel.

func (AsyncForwarder) Close

func (self AsyncForwarder) Close()

func (AsyncForwarder) Receive

func (self AsyncForwarder) Receive(evt Event)

type Event

type Event interface {
}

type Manager

type Manager interface {

	// Send dispatch an event to all the Receivers of the Manager.
	// It takes ownership of the event.
	Send(Event) error

	// AddReceiver registers a Receiver to receive all events sent to the Manager.
	// If the Receiver is added to more than one Manager, it must be goroutine-safe.
	AddReceiver(Receiver) error

	// Close stops the Manager. Any subsequent Send will result in an error.
	// The Close method of all the Receivers of the Manager will eventually be called.
	Close() error
}

Manager dispatches events from senders to Receivers.

All its method must be goroutine-safe.

func NewAsyncManager

func NewAsyncManager(chanSize int) Manager

NewAsyncManager creates a new asynchronous Manager.

The returned Manager send the events over a channel of the size given as argument. All its Receivers receive the events in the same goroutine, in the order they've been added to the manager.

type Receiver

type Receiver interface {
	Receive(Event)
	Close()
}

Receiver receives events from a Manager.

It can be assumed that the methods of a given Receiver are always called from the same goroutine by the Manager.

type ReceiverFunc

type ReceiverFunc func(Event)

ReceiverFunc turn a function into a stateless Receiver, whose Close method does nothing.

func (ReceiverFunc) Close

func (self ReceiverFunc) Close()

func (ReceiverFunc) Receive

func (self ReceiverFunc) Receive(evt Event)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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