summaryrefslogtreecommitdiff
path: root/doc/ivy-perl-1.html
blob: b6b2c92a170832261b2ec910dd9c5bf4edc743bb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
 <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
 <TITLE>The Ivy Perl library guide: General information</TITLE>
 <LINK HREF="ivy-perl-2.html" REL=next>

 <LINK HREF="ivy-perl.html#toc1" REL=contents>
</HEAD>
<BODY>
<A HREF="ivy-perl-2.html">Next</A>
Previous
<A HREF="ivy-perl.html#toc1">Contents</A>
<HR>
<H2><A NAME="s1">1. General information</A></H2>

<H2><A NAME="ss1.1">1.1 What is Ivy?</A>
</H2>

<P>
<P>Ivy is a software bus designed at CENA (France). A software bus is a system 
that allows software applications to exchange information with the illusion of
broadcasting that information, selection being performed by the receiving
applications. Using a software bus is very similar to dealing with events in a
graphical toolkit: on one side, messages are emitted without caring about who
will handle them, and on the other side, one decide to handle the messages that
have a certain type or follow a certain pattern. Software buses are mainly aimed 
at facilitating the rapid development of new agents, and at managing a dynamic
collection of agents on the bus: agents show up, emit messages and receive some, 
then leave the bus without blocking the others.
<P>
<H3>Architecture and principles</H3>

<P>As opposed to other software buses, Ivy does not depend on a centralised
server. Actually, Ivy is mostly a communication convention between processes,
implemented through a collection of libraries in several languages.
<P>
<P>
<P>From the programmer's point of view, Ivy is an information  broadcasting
channel. The main functions are:
<P>
<UL>
<LI> connecting to a bus.<EM> Example: Ivy::start (-loopMode =>
	  'local', -ivyBus => '2011', -appName => "toto" );</EM></LI>
<LI> sending a message.<EM> Example: Ivy::sendMsgs ("HELLO WORLD")</EM></LI>
<LI> bind a message pattern to a callback function.<EM> Example:
	  Ivy::bindRegexp ("^HELLO (.*)", [\&cb])</EM></LI>
<LI> the main loop.<EM> MainLoop</EM></LI>
</UL>
<P>Ivy's
decentralised connection scheme probably incurs limitations in terms of how many
applications can be connected to an Ivy bus, but this simplifies management a
lot. Basically, an Ivy bus is just a set of applications that decide to
communicate together. The only conventions between these applications are:
<OL>
<LI> the use of the Ivy protocol (for obvious reasons)</LI>
<LI> a bus address, made of a broadcast port number (a bit like a citizen band
channel) and a set of networks addresses</LI>
</OL>

When an application wants to connect to a bus, it sends a broadcast message on the
networks specified in the bus address, so that all applications present on those 
networks and listening on the specified port number connect to it. It then
becomes part of the bus, and listens like the other ones.
<P>The messages are exchanged in text format, and bindings are based on regular
expressions with captures. If an application subscribes to 
<CODE>HELLO (.*)</CODE> and if another application emits the message <CODE>HELLO WORLD</CODE>, a
callback will be called in the first application with <CODE>WORLD</CODE> as an argument.
<P>
<P>
<H3>Using Ivy</H3>

<P>You can use Ivy through applications that have been provided to you. This is the 
case for <CODE>ivyprobe</CODE>, an Ivy agent that allows you to examine the messages
exchanged on a given bus and to send messages on that bus. You can refer to the
web site <CODE>http:</CODE> for a list of available agents. However, what you will
usually want to do is to develop your own applications. In order to do that you
can use an Ivy connection kit, that is a library that implements Ivy.
<P>
<P>
<P>Libraries that implement Ivy are available in the following environments:
<UL>
<LI> in C on Unix and Windows platforms, with its own communication library</LI>
<LI> in C++ on Windows platforms</LI>
<LI> in C++ on Unix platforms, integrated with the Uch communication library</LI>
<LI> in C++ on Unix platforms, integrated with  OpenInventor</LI>
<LI> in C++ on Macintosh</LI>
<LI> in Perl and in Perl/Tk</LI>
<LI> integrated with Object Caml on Unix platforms</LI>
<LI> in Scheme on Unix platforms</LI>
<LI> in Java</LI>
</UL>
<P>
<P>Connecting your application to an Ivy bus just consists in choosing the
appropriate library, add the appropriate message emission and reception calls to
your code, use the main loop provided in the library or make the necessary
integrations, and get your code running! 
<P>
<H2><A NAME="ss1.2">1.2 The Ivy Perl library</A>
</H2>

<P>The Ivy Perl library (aka Ivy-Perl or ivy-perl) is a Perl library that allows you to connect 
applications to an Ivy bus. You can use it to write applications in Perl or any
other language that supports Perl extensions (Perl/Tk for instance). This guide documents how you can do
that.
<P>The Ivy Perl library is known to compile and work in WindowsNT and Linux
environments. It should be easy to use on most Posix environments. 
<P>The Ivy Perl library was originally developed by Alexandre Bustico at CENA. It
is maintained by the CENA-Toulouse team.
<P>
<HR>
<A HREF="ivy-perl-2.html">Next</A>
Previous
<A HREF="ivy-perl.html#toc1">Contents</A>
</BODY>
</HTML>