Elvin is a general-purpose event notification routing system. Clients
connect to an Elvin router service and may subscribe to events and/or
generate events. An Elvin event is simply a set of name/value pairs
such as [Name="foobar",
Age=42]
.
Clients use subscription expressions to select events of
interest. An example subscription expression that matches the example
above would be simply Name == "foobar"
. Another would be
Age > 40
. The specification for the Elvin subscription
language can be found here.
The flexibility of Elvin events and the programmability of the router via subscription expressions make it ideal for building bus-style publish-subscribe systems such as the Livespace Bus underlying a Livespace room. The Elvin model allows clients to move one step up from point-to-point network communications and custom protocols, and treat the network as an extensible publish/subscribe space.
DSTO's support agreement with Mantara for their commercial Elvin router and development libraries ended in Nov 2007. As of release 1.2, Livespaces is based on the open source Avis router and client library and has no depedencies on Mantara IP.
For information on federating Avis and/or Livespaces, see the Federation page.
Add the following lines to elvid.conf in the Elvin install area to have the router listen for incoming federation connections.
federation yes federation.protocol ewaf://0.0.0.0:2916 federation.class livespace federation.subscribe livespace \ (string (TICKERTAPE) && string (TICKERTEXT) && string (USER)) \ || (string (NEWSGROUPS) && string (FROM_NAME) && string (SUBJECT)) \ || (string (Group) && string (Message) && string (From)) \ || (int32 (Presence-Protocol) || int64 (Presence-Protocol)) \ || (int32 (Livespace-Protocol) && Entity-Type != "room") federation.provide livespace \ (string (TICKERTAPE) && string (TICKERTEXT) && string (USER)) \ || (string (NEWSGROUPS) && string (FROM_NAME) && string (SUBJECT)) \ || (string (Group) && string (Message) && string (From)) \ || (int32 (Presence-Protocol) || int64 (Presence-Protocol)) \ || (int32 (Livespace-Protocol) && Entity-Type != "room")
The "master" router has the same lines, and initiates the link by adding lines such as:
federation.link livespace ewaf://SLAVE1:2916 federation.link livespace ewaf://SLAVE2:2916