Documentation
¶
Overview ¶
Package dispatch provides a general purpose object dispatcher. It can be used to asynchronously dispatch queues (channels) or synchronously dispatch single objects. For example one could use it to dispatch events or messages.
Index ¶
- type Dispatcher
- func (d *Dispatcher) AddQueues(queues ...chan interface{})
- func (d *Dispatcher) Dispatch(object interface{})
- func (d *Dispatcher) RegisterHandler(handler interface{}) HandlerIdentifier
- func (d *Dispatcher) RemoveAllQueues()
- func (d *Dispatcher) RemoveQueues(queues ...chan interface{}) error
- func (d *Dispatcher) SyncAllQueues()
- func (d *Dispatcher) SyncQueues(queues ...chan interface{}) error
- func (d *Dispatcher) UnregisterHandler(identifier HandlerIdentifier)
- type HandlerIdentifier
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Dispatcher ¶
type Dispatcher struct {
// contains filtered or unexported fields
}
Dispatcher is used to register handlers and dispatch objects.
func (*Dispatcher) AddQueues ¶
func (d *Dispatcher) AddQueues(queues ...chan interface{})
AddQueues adds channels as 'object-queues'. All objects sent to the passed queues will be dispatched to their handlers in a separate go routine per channel.
func (*Dispatcher) Dispatch ¶
func (d *Dispatcher) Dispatch(object interface{})
Dispatch dispatches an object to all it's handlers in the order in which the handlers were registered.
func (*Dispatcher) RegisterHandler ¶
func (d *Dispatcher) RegisterHandler(handler interface{}) HandlerIdentifier
RegisterHandler registers an object handler (func) for the type of objects assignable to it's input parameter type. If the handler registers a new handler in the function body, the new handler will only be active for new Dispatch() calls. Calling this method clears the internal type/handler mapping cache for interface handlers. Returns a unique identifier which can be used to remove the handler via UnregisterHandler().
func (*Dispatcher) RemoveAllQueues ¶
func (d *Dispatcher) RemoveAllQueues()
RemoveAllQueues removes all queues from the Dispatcher without closing them.
func (*Dispatcher) RemoveQueues ¶
func (d *Dispatcher) RemoveQueues(queues ...chan interface{}) error
RemoveQueues removes the given queues from the Dispatcher without closing them.
func (*Dispatcher) SyncAllQueues ¶
func (d *Dispatcher) SyncAllQueues()
SyncAllQueues calls SyncQueues() for all queues in this Dispatcher.
func (*Dispatcher) SyncQueues ¶
func (d *Dispatcher) SyncQueues(queues ...chan interface{}) error
SyncQueues syncs the channels dispatch routines to the current go routine. This ensures all objects received in the passed channels up to this point will be handled before continuing.
func (*Dispatcher) UnregisterHandler ¶ added in v1.1.0
func (d *Dispatcher) UnregisterHandler(identifier HandlerIdentifier)
UnregisterHandler unregisters a handler by it's identifier (as returned by RegisterHandler()). Unregistering is done via identifiers because functions can't be compared in Go.
type HandlerIdentifier ¶ added in v1.1.0
type HandlerIdentifier *int
HandlerIdentifier uniquely identifies a handler