# Class e.c.b.Bus(log.Loggable):

Part of elisa.core.bus View In Hierarchy

Python objects can register callbacks with the bus and be called when `elisa.core.components.massage.Message`s are sent by other objects.

Here is a simple example:

       bus = Bus()

       def my_cb(message, sender):
           print 'Got message %r from %r' % (message, sender)

       bus.register(my_cb)

       bus.send_message(Message())

Messages dispatching empties the message queue and call the registered callbacks. Messages filtering is also supported, just pass a Message type class to bus.register(), like this:

       bus.register(my_cb, Message)

You can filter on multiple Message types by supplying a list to bus.register():

       bus.register(my_cb, (FooMessage, DataMessage))

Instance Variables | callbacks | registered callbacks (type: dict, keys are callable objects and values are Message types lists )

Line # | Kind | Name | Docs
--- | --- | --- | ---
60 | Method | __init__ | Initialize the Message queue and the callbacks dictionary.
82 | Method | start | Start message dispatching: once started, messages sent over the bus
93 | Method | stop | Stop message dispatching: messages sent over the bus will not be
101 | Method | send_message | Send a message over the bus. The message is automatically
123 | Method | register | Register a new callback with the bus. The given callback will be
148 | Method | unregister | Unregister a callback from the bus.

def __init__(self):
overrides elisa.core.log.Loggable.__init__
Initialize the Message queue and the callbacks dictionary.

def start(self):

Start message dispatching: once started, messages sent over the bus are guaranteed to be dispatched.

Queued messages are dispatched inside a separate thread.

def stop(self):
Stop message dispatching: messages sent over the bus will not be dispatched automatically anymore, they will be locally queued.

def send_message(self, message, sender=None):

Send a message over the bus. The message is automatically dispatched (inside a thread) if the `Bus` is running. Otherwise the message is locally queued until the `Bus` starts.

MT safe.

Parameters | message | the message to send (type: `elisa.core.components.message.Message` )
| sender | the sender object. None by default. Will be passed to receiver callbacks. (type: object )

def register(self, callback, *message_types):

Register a new callback with the bus. The given callback will be called when a message of one of the given types is dispatched on the bus.

MT safe.

Parameters | callback | the callback to register (type: callable )
| message_types | Message types to filter on (type: type or list of types )

def unregister(self, callback):

Unregister a callback from the bus.

MT safe.

Parameters | callback | the callback to register (type: callable )