I am having a similar epiphany now that I found the coordinating
assistance tracker (under Axon). This is precisely what I need: a
dynamic way to register and de-register available components that aren't
linked to each other. This can also be used to handle global data.
Nifty! The documentation in the code is superb.
You might also find these interesting: backplanes, and the 'experimental'
RegisterService/ToService/Subscribe components. They also use the
coordinating-assistant-tracker to enable some common types of task.
http://www.kamaelia.org/Components/pydoc/Kamaelia.Util.Backplane.html
As the webpage says: "Backplanes provide a way to 'publish' data under a
name, enabling other parts of the system to 'subscribe' to it on the fly,
without having to know about the actual component(s) the data is coming
from." Examples there are hopefully self explanatory. There's also a
currently-broken 'cookbook' entry on the subject.
http://www.kamaelia.org/Components/pydoc/Kamaelia.Experimental.Services.html
This 'experimental' set of components makes it easier to use the
Coordinating Assistant Tracker. The docs are less clear atm, so here's a
quick explanation. Although they are labelled as experimental, they
haven't in practice changed for quite some time. The docs are slightly out
of date - "SubscribeTo" should be "Subscribe", and "ConnectTo" should be
"ToService"
Take any component and pass it to RegisterService(); then you can connect
to its inbox using the ToService component, eg:
RegisterService("MyService", ComponentWaitingForInput(), "inbox")
Pipeline(
ComponentOutputtingStuff(),
ToService("MyService")
)
In addition, suppose you write a component that is able to dynamically
connect to the inboxes of other components and send them data they need.
If you arrange that it is controlled by sending it messages of the form:
[ "ADD", app_specific_field, (component, inbox_name) ]
[ "REMOVE", app_specific_field, (component, inbox_name) ]
Then if you register this component using RegisterService() then you can
use the "Subscribe" component to easily connect to that service:
RegisterService("MyService", MyServiceProvidingComponent, "inbox")
Pipeline(
Subscribe("MyService", "notifications only please"),
MyComponentThatWantsToReceiveNotifications()
)
The app-specific-field is a means to allow you to pass parameters when
subscribing to the service - eg. a list of the things you are interested
in receiving from the component (for 'add') or a list of things you no
longer wish to receive (for 'remove')
The DVB DemuxerService component is an example that acts like this:
http://www.kamaelia.org/Components/pydoc/Kamaelia.Device.DVB.DemuxerService.html
There's an example of its use here:
http://www.kamaelia.org/Components/pydoc/Kamaelia.Device.DVB.Receiver.html
--
| Matt Hammond
| Research Engineer, BBC R&D, Centre House, London
| http://www.bbc.co.uk/rd/
--
You received this message because you are subscribed to the Google Groups
"kamaelia" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/kamaelia?hl=en.