Compare commits
No commits in common. "0d982d3be000f638e4a0e15aca3f0627fca9ffaf" and "93ef30f24d7521d59fe36a6c528e5c881c9c65f8" have entirely different histories.
0d982d3be0
...
93ef30f24d
9 changed files with 15 additions and 1663 deletions
|
@ -1,5 +1,5 @@
|
||||||
SUBDIRS = src
|
SUBDIRS = src
|
||||||
|
|
||||||
EXTRA_DIST = doc INSTALL README Doxyfile autogen.sh
|
EXTRA_DIST = doc INSTALL README Doxyfile autogen.sh rapport
|
||||||
|
|
||||||
|
|
||||||
|
|
187
README
187
README
|
@ -1,187 +0,0 @@
|
||||||
|
|
||||||
Programmation répartie - TP2
|
|
||||||
|
|
||||||
1. Description
|
|
||||||
|
|
||||||
Le but de ce TP est de concevoir une implémentation des protocoles
|
|
||||||
ABCAST et CBCAST.
|
|
||||||
|
|
||||||
Il possède les caractéristiques suivantes :
|
|
||||||
* Il est distribué sous la licence [1]GNU General Public License
|
|
||||||
* Il est écrit en C++,
|
|
||||||
* Il implémente ABCAST,
|
|
||||||
* Il implémente CBCAST.
|
|
||||||
|
|
||||||
Cette implémentation utilise trois threads, un "envoyeur de bas
|
|
||||||
niveau" (LowSender), un "recepteur de bas niveau" (LowReceiver) et un
|
|
||||||
"recepteur de haut niveau" (HighReceiver).
|
|
||||||
|
|
||||||
1.1. Auteurs
|
|
||||||
|
|
||||||
Cet exercice a été entièrement réalisé par Glenn ROLLAND
|
|
||||||
<[2]glenux@fr.st> à l'occasion de travaux pratiques du cours de
|
|
||||||
Programmation Répartie du Master 2 Ingénierie Informatique - Systèmes,
|
|
||||||
Réseaux et Internet.
|
|
||||||
|
|
||||||
1.2. Implémentation des protocoles
|
|
||||||
|
|
||||||
J'ai choisi d'écrire un protocole unique Multi-BroadCast Protocol
|
|
||||||
(MBCP) utilisable aussi bien pour envoyer les datagrammes d'ABCAST que
|
|
||||||
de CBCAST.
|
|
||||||
|
|
||||||
1.2.1. Structures des datagrammes
|
|
||||||
|
|
||||||
Le datagramme MBCP se décompose de la façon suivante:
|
|
||||||
+------+-----------+---------+
|
|
||||||
| Type | Timestamp | Message |
|
|
||||||
+------+-----------+---------+
|
|
||||||
|
|
||||||
Dans ce datagrame:
|
|
||||||
|
|
||||||
Type est de type unsigned char et peu prendre les valeurs suivantes:
|
|
||||||
|
|
||||||
'A'
|
|
||||||
Indique l'utilisation du protocole ABCAST
|
|
||||||
|
|
||||||
'C'
|
|
||||||
indique l'utilisation du protocole CBCAST
|
|
||||||
|
|
||||||
une autre valeur
|
|
||||||
indique un protocole inconnu
|
|
||||||
|
|
||||||
Timestamp peut varier en fonction de Type.
|
|
||||||
* Si Type == 'A', alors la structure de Timestamp est la suivante:
|
|
||||||
+------------+-------------+
|
|
||||||
| Site index | Clock value |
|
|
||||||
+------------+-------------+
|
|
||||||
* Si Type == 'C', alors la structure de Timestamp est la suivante:
|
|
||||||
+------------+------------+-------------+
|
|
||||||
| Site_index | Clock_size | Clock_value |
|
|
||||||
+------------+------------+-------------+
|
|
||||||
* Si Type est différent, alors on considère le paquet illisible.
|
|
||||||
|
|
||||||
Site_index est de type unsigned short (16 bits).
|
|
||||||
Il indique l'index du site emetteur. La numérotation des index débute
|
|
||||||
à zéro.
|
|
||||||
|
|
||||||
Clock_size est de type unsigned short (16 bits).
|
|
||||||
Ce champ indique la taille de l'horloge (si celle-ci est vectorielle).
|
|
||||||
|
|
||||||
Clock_value peut varier en fonction de Type.
|
|
||||||
* Si Type == 'A', alors Clock_value est de type unsigned short (16
|
|
||||||
bits)
|
|
||||||
* Si Type == 'C', alors Clock_value est un tableau de valeurs
|
|
||||||
unsigned short (16 bits * Clock_size)
|
|
||||||
|
|
||||||
Message possède la structure suivante:
|
|
||||||
+--------------+--------------+
|
|
||||||
| Message_size | Message_data |
|
|
||||||
+--------------+--------------+
|
|
||||||
|
|
||||||
Message_size est de type unsigned short (16 bits). Cette valeur
|
|
||||||
indique la taille du message.
|
|
||||||
|
|
||||||
Message_data est un tableau de valeurs char (8 bits * Message_size).
|
|
||||||
Ce champ contient le message (qui peut être une estampille).
|
|
||||||
|
|
||||||
2. Pré-requis
|
|
||||||
|
|
||||||
Cet exercice nécessite:
|
|
||||||
* un système compatible unix,
|
|
||||||
* le compilateur GNU GCC (version >= 2.95)
|
|
||||||
* une version récente des GNU Autotools.
|
|
||||||
|
|
||||||
3. Se procurer le sources
|
|
||||||
|
|
||||||
Vous pouvez télécharger la dernière archive des sources, ou bien
|
|
||||||
directement leur version la plus récente sur le dépôt Subversion du
|
|
||||||
projet.
|
|
||||||
|
|
||||||
3.1. L'archive compressée
|
|
||||||
|
|
||||||
Elle est disponible à l'adresse :
|
|
||||||
[3]http://glenux2.free.fr/pub/projets/Programmation_Repartie/TP2/archi
|
|
||||||
ves/
|
|
||||||
|
|
||||||
3.2. Le dépôt Subversion
|
|
||||||
|
|
||||||
Afin d'obtenir les sources les plus à jour, vous pouvez utiliser le
|
|
||||||
logiciel de contrôle de sources Subversion
|
|
||||||
|
|
||||||
$ svn checkout \
|
|
||||||
http://repository.glenux.ath.cx/svn/Cours/M2/Programmation_Repartie/
|
|
||||||
TP2/ \
|
|
||||||
prog-repartie-tp2
|
|
||||||
|
|
||||||
Il n'y a pas de mot de passe, il suffit donc de presser la touche
|
|
||||||
"Entrée" pour l'utilisateur "anonymous", si ce dernier vous est
|
|
||||||
demandé.
|
|
||||||
|
|
||||||
4. Utiliser le logiciel
|
|
||||||
|
|
||||||
4.1. Compilation
|
|
||||||
|
|
||||||
Si vous avez choisi l'archive, commencez par la décompressez.
|
|
||||||
|
|
||||||
$ tar -xzvf prog-repartie-tp2.tar.gz
|
|
||||||
|
|
||||||
Rendez vous ensuite dans le dossier qui vient d'être créé lors de la
|
|
||||||
décompression.
|
|
||||||
|
|
||||||
$ cd prog-repartie-tp2
|
|
||||||
|
|
||||||
Puis lancez la compilation du logiciel:
|
|
||||||
|
|
||||||
$ ./autogen.sh
|
|
||||||
$ ./configure
|
|
||||||
$ make
|
|
||||||
|
|
||||||
4.3. Utilisation
|
|
||||||
|
|
||||||
On supposera que les machines weber, beethoven et mozart font partie
|
|
||||||
du même groupe, que leur ports respectifs pour la reception sont 2300,
|
|
||||||
2330, et 2360.
|
|
||||||
|
|
||||||
4.3.1. ABCAST
|
|
||||||
|
|
||||||
Pour la machine weber, on lancera:
|
|
||||||
|
|
||||||
$ ./dabcast -A -p 2300 -g weber:2300 -g beethoven:2330 -g mozart:2360
|
|
||||||
-i 1
|
|
||||||
|
|
||||||
Pour la machine beethoven:
|
|
||||||
|
|
||||||
$ ./dabcast -A -p 2330 -g weber:2300 -g beethoven:2330 -g mozart:2360
|
|
||||||
-i 2
|
|
||||||
|
|
||||||
Pour la machine mozart:
|
|
||||||
|
|
||||||
$ ./dabcast -A -p 2360 -g weber:2300 -g beethoven:2330 -g mozart:2360
|
|
||||||
-i 3
|
|
||||||
|
|
||||||
4.3.2. CBCAST
|
|
||||||
|
|
||||||
On supposera que les machines weber, beethoven et mozart font partie
|
|
||||||
du même groupe, que leur ports respectifs pour la reception sont 2300,
|
|
||||||
2330, et 2360.
|
|
||||||
|
|
||||||
Pour la machine weber, on lancera:
|
|
||||||
|
|
||||||
$ ./dabcast -C -p 2300 -g weber:2300 -g beethoven:2330 -g mozart:2360
|
|
||||||
-i 1
|
|
||||||
|
|
||||||
Pour la machine beethoven:
|
|
||||||
|
|
||||||
$ ./dabcast -C -p 2330 -g weber:2300 -g beethoven:2330 -g mozart:2360
|
|
||||||
-i 2
|
|
||||||
|
|
||||||
Pour la machine mozart:
|
|
||||||
|
|
||||||
$ ./dabcast -C -p 2360 -g weber:2300 -g beethoven:2330 -g mozart:2360
|
|
||||||
-i 3
|
|
||||||
|
|
||||||
Références
|
|
||||||
|
|
||||||
1. http://www.gnu.org/copyleft/gpl.html
|
|
||||||
2. mailto:glenux@fr.st
|
|
||||||
3. http://glenux2.free.fr/pub/projets/Programmation_Repartie/TP2/archives/
|
|
|
@ -1,36 +0,0 @@
|
||||||
p.code { border: 2px dashed rgb(153, 153, 153);
|
|
||||||
padding: 5px;
|
|
||||||
background: rgb(204, 204, 204) none repeat scroll 0% 50%;
|
|
||||||
-moz-background-clip: initial;
|
|
||||||
-moz-background-origin: initial;
|
|
||||||
-moz-background-inline-policy: initial;
|
|
||||||
font-family: monospace;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.page { border: 2px dashed rgb(153, 153, 153);
|
|
||||||
padding: 10px;
|
|
||||||
top: 10px;
|
|
||||||
left: 10px;
|
|
||||||
right: 10px;
|
|
||||||
bottom: 10px;
|
|
||||||
margin-right: auto;
|
|
||||||
margin-left: auto;
|
|
||||||
background-color: rgb(255, 255, 255);
|
|
||||||
opacity: 1;
|
|
||||||
width: 60%;
|
|
||||||
font-family: Arial,Helvetica,sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
body { background-color: rgb(51, 51, 51);
|
|
||||||
}
|
|
||||||
|
|
||||||
span.code { border: 1px dashed rgb(153, 153, 153);
|
|
||||||
background-color: rgb(204, 204, 204);
|
|
||||||
font-family: monospace;
|
|
||||||
}
|
|
||||||
|
|
||||||
dt { font-weight: bold; }
|
|
||||||
|
|
||||||
.code_var { font-weight: bold; font-family: monospace; }
|
|
||||||
|
|
||||||
.code_type { font-family: monospace; font-style: italic; }
|
|
302
doc/readme.html
302
doc/readme.html
|
@ -1,302 +0,0 @@
|
||||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
||||||
<html style="direction: ltr;" lang="fr-fr">
|
|
||||||
<head>
|
|
||||||
|
|
||||||
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
|
|
||||||
|
|
||||||
<link rel="stylesheet" type="text/css" href="readme.css">
|
|
||||||
<title>Programmation Répartie - TP2</title>
|
|
||||||
|
|
||||||
|
|
||||||
<meta content="Glenn ROLLAND" name="author">
|
|
||||||
|
|
||||||
</head>
|
|
||||||
|
|
||||||
|
|
||||||
<body style="direction: ltr;">
|
|
||||||
|
|
||||||
<div style="text-align: justify;" class="page code code">
|
|
||||||
<h1>Programmation répartie - TP2</h1>
|
|
||||||
|
|
||||||
<h2><a name="1._Description"></a>1.
|
|
||||||
Description</h2>
|
|
||||||
|
|
||||||
<p>Le but de ce TP est de concevoir une implémentation
|
|
||||||
des protocoles ABCAST et CBCAST. </p>
|
|
||||||
|
|
||||||
<p> Il possède les
|
|
||||||
caractéristiques
|
|
||||||
suivantes :</p>
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
|
|
||||||
<li>Il est distribué
|
|
||||||
sous la licence <a href="http://www.gnu.org/copyleft/gpl.html">GNU
|
|
||||||
General Public License</a></li>
|
|
||||||
|
|
||||||
<li>Il est
|
|
||||||
écrit en C++, </li>
|
|
||||||
|
|
||||||
<li>Il implémente ABCAST,</li>
|
|
||||||
|
|
||||||
<li>Il implémente CBCAST.</li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<p>Cette implémentation utilise trois <span style="font-style: italic;">threads</span>, un
|
|
||||||
"envoyeur de bas
|
|
||||||
niveau" (<span style="font-weight: bold;">LowSender</span>),
|
|
||||||
un "recepteur de bas niveau" (<span style="font-weight: bold;">LowReceiver</span>)
|
|
||||||
et un
|
|
||||||
"recepteur de haut niveau" (<span style="font-weight: bold;">HighReceiver</span>).</p>
|
|
||||||
|
|
||||||
<h3>1.1.
|
|
||||||
Auteurs</h3>
|
|
||||||
|
|
||||||
<p>Cet exercice a
|
|
||||||
été entièrement
|
|
||||||
réalisé par Glenn ROLLAND <<a href="mailto:glenux@fr.st">glenux@fr.st</a>>
|
|
||||||
à l'occasion de travaux pratiques du cours de <span style="font-style: italic;">Programmation Répartie</span>
|
|
||||||
du Master 2 Ingénierie Informatique
|
|
||||||
-
|
|
||||||
Systèmes, Réseaux et Internet.</p>
|
|
||||||
|
|
||||||
<h3>1.2. Implémentation des protocoles</h3>
|
|
||||||
|
|
||||||
<p>J'ai choisi d'écrire un protocole unique <span style="font-weight: bold;">Multi-BroadCast Protocol</span>
|
|
||||||
(MBCP) utilisable aussi bien pour envoyer les datagrammes d'ABCAST que
|
|
||||||
de CBCAST.</p>
|
|
||||||
|
|
||||||
<h4>1.2.1. Structures des datagrammes</h4>
|
|
||||||
|
|
||||||
<span class="code_var">Le datagramme MBCP</span> se
|
|
||||||
décompose de la façon
|
|
||||||
suivante:
|
|
||||||
<pre>+------+-----------+---------+<br>| Type | Timestamp | Message |<br>+------+-----------+---------+<br></pre>
|
|
||||||
|
|
||||||
<p>Dans ce datagrame:</p>
|
|
||||||
|
|
||||||
<p><span class="code_var" style="font-weight: bold;">Type</span>
|
|
||||||
est de type <span class="code_type">unsigned char</span>
|
|
||||||
et peu prendre les valeurs suivantes:
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<dl>
|
|
||||||
|
|
||||||
<dt style="font-weight: bold;">'A'</dt>
|
|
||||||
|
|
||||||
<dd>Indique l'utilisation du protocole ABCAST</dd>
|
|
||||||
|
|
||||||
<dt style="font-weight: bold;">'C'</dt>
|
|
||||||
|
|
||||||
<dd>indique l'utilisation du protocole CBCAST</dd>
|
|
||||||
|
|
||||||
<dt style="font-weight: bold;">une autre valeur</dt>
|
|
||||||
|
|
||||||
<dd>indique un protocole inconnu</dd>
|
|
||||||
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
<p><span class="code_var" style="font-weight: bold;">Timestamp</span>
|
|
||||||
peut varier en fonction de <span class="code_var">Type</span>. </p>
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
|
|
||||||
<li>Si <span class="code_var" style="font-weight: bold;">Type</span> == 'A', alors
|
|
||||||
la structure de <span class="code_var">Timestamp</span>
|
|
||||||
est la suivante:<br>
|
|
||||||
|
|
||||||
<pre>+------------+-------------+<br>| Site index | Clock value |<br>+------------+-------------+</pre>
|
|
||||||
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li>Si <span class="code_var">Type</span>
|
|
||||||
== 'C', alors la structure de <span class="code_var">Timestamp</span>
|
|
||||||
est la suivante:<br>
|
|
||||||
|
|
||||||
<pre>+------------+------------+-------------+<br>| Site_index | Clock_size | Clock_value |<br>+------------+------------+-------------+</pre>
|
|
||||||
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li>Si <span class="code_var">Type</span>
|
|
||||||
est différent, alors on considère le paquet
|
|
||||||
illisible.</li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<p><span class="code_var">Site_index</span>
|
|
||||||
est de type <span class="code_type">unsigned short</span>
|
|
||||||
(16 bits).<br>
|
|
||||||
|
|
||||||
Il indique l'index du site emetteur. La numérotation des
|
|
||||||
index débute à zéro.</p>
|
|
||||||
|
|
||||||
<p><span class="code_var">Clock_size</span>
|
|
||||||
est de type <span class="code_type">unsigned short</span>
|
|
||||||
(16 bits).<br>
|
|
||||||
|
|
||||||
Ce champ indique la taille de l'horloge (si celle-ci est vectorielle).</p>
|
|
||||||
|
|
||||||
<p><span class="code_var">Clock_value</span>
|
|
||||||
peut varier en fonction de Type.</p>
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
|
|
||||||
<li>Si <span class="code_var">Type</span>
|
|
||||||
== 'A', alors <span class="code_var">Clock_value</span>
|
|
||||||
est de type <span class="code_type">unsigned short</span>
|
|
||||||
(16 bits)</li>
|
|
||||||
|
|
||||||
<li>Si <span class="code_var">Type</span>
|
|
||||||
== 'C', alors <span class="code_var">Clock_value</span>
|
|
||||||
est un tableau de valeurs <span class="code_type">unsigned
|
|
||||||
short</span> (16 bits * <span class="code_var">Clock_size</span>)</li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<p><span class="code_var">Message</span>
|
|
||||||
possède la structure suivante:</p>
|
|
||||||
|
|
||||||
<pre>+--------------+--------------+<br>| Message_size | Message_data |<br>+--------------+--------------+<br></pre>
|
|
||||||
|
|
||||||
<p><span class="code_var">Message_size</span>
|
|
||||||
est de type <span class="code_type">unsigned short</span>
|
|
||||||
(16 bits). Cette valeur indique la taille du message.</p>
|
|
||||||
|
|
||||||
<p><span class="code_var">Message_data</span>
|
|
||||||
est un tableau de valeurs <span class="code_type">char</span>
|
|
||||||
(8 bits * <span class="code_var">Message_size</span>).
|
|
||||||
Ce champ contient le message (qui peut être une estampille).</p>
|
|
||||||
|
|
||||||
<dl>
|
|
||||||
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
<h2><a99 name="2._Pré-requis">2.
|
|
||||||
Pré-requis</a99></h2>
|
|
||||||
|
|
||||||
<p>Cet exercice nécessite:</p>
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
|
|
||||||
<li>un système compatible unix, </li>
|
|
||||||
|
|
||||||
<li>le compilateur GNU GCC
|
|
||||||
(version ≥
|
|
||||||
2.95)</li>
|
|
||||||
|
|
||||||
<li>une version récente des GNU Autotools.</li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h2>3.
|
|
||||||
Se procurer le sources</h2>
|
|
||||||
|
|
||||||
<p>Vous
|
|
||||||
pouvez télécharger la dernière archive
|
|
||||||
des
|
|
||||||
sources, ou bien directement leur version la plus récente
|
|
||||||
sur le dépôt Subversion du projet.</p>
|
|
||||||
|
|
||||||
<h3>3.1. L'archive compressée</h3>
|
|
||||||
|
|
||||||
<p>Elle est disponible à l'adresse :<br>
|
|
||||||
|
|
||||||
<a href="http://glenux2.free.fr/pub/projets/ProgRepartie/TP2/Archives/">http://glenux2.free.fr/pub/projets/ProgRepartie/TP2/Archives/</a><br>
|
|
||||||
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h3>3.2. Le
|
|
||||||
dépôt Subversion</h3>
|
|
||||||
|
|
||||||
<p>Afin d'obtenir les sources les
|
|
||||||
plus à jour, vous pouvez utiliser le logiciel de
|
|
||||||
contrôle de sources Subversion </p>
|
|
||||||
|
|
||||||
<p class="code">$ svn
|
|
||||||
checkout \<br>
|
|
||||||
|
|
||||||
https://websvn.glenux.ath.cx/svn/Cours/M2/Programmation_Repartie/TP2/
|
|
||||||
\<br>
|
|
||||||
|
|
||||||
prog-repartie-tp2</p>
|
|
||||||
|
|
||||||
<p>Il n'y a pas de mot de passe,
|
|
||||||
il suffit donc de presser la touche
|
|
||||||
"Entrée" pour l'utilisateur "anonymous", si ce dernier vous
|
|
||||||
est
|
|
||||||
demandé.</p>
|
|
||||||
|
|
||||||
<h2>4. Utiliser le logiciel</h2>
|
|
||||||
|
|
||||||
<h3>4.1. Compilation</h3>
|
|
||||||
|
|
||||||
<p>Si vous avez choisi l'archive, commencez par la
|
|
||||||
décompressez.</p>
|
|
||||||
|
|
||||||
<p class="code">$ tar -xzvf prog-repartie-tp2.tar.gz</p>
|
|
||||||
|
|
||||||
<p>Rendez vous ensuite dans le
|
|
||||||
dossier qui vient d'être créé lors de
|
|
||||||
la décompression.</p>
|
|
||||||
|
|
||||||
<p class="code">$ cd prog-repartie-tp2</p>
|
|
||||||
|
|
||||||
<p>Puis lancez la compilation du logiciel:</p>
|
|
||||||
|
|
||||||
<p class="code">$ ./autogen.sh<br>
|
|
||||||
|
|
||||||
$ ./configure<br>
|
|
||||||
|
|
||||||
$ make</p>
|
|
||||||
|
|
||||||
<h3>4.3. Utilisation</h3>
|
|
||||||
|
|
||||||
<p>On supposera que les machines <span style="font-style: italic;">weber</span>, <span style="font-style: italic;">beethoven</span> et <span style="font-style: italic;">mozart </span>font partie
|
|
||||||
du même groupe, que leur ports respectifs pour la
|
|
||||||
reception sont <span style="font-style: italic;">2300</span>,
|
|
||||||
<span style="font-style: italic;">2330</span>, et <span style="font-style: italic;">2360</span>.</p>
|
|
||||||
|
|
||||||
<h4>4.3.1. ABCAST</h4>
|
|
||||||
|
|
||||||
<p>Pour la machine <span style="font-style: italic;">weber</span>, on lancera:</p>
|
|
||||||
|
|
||||||
<p class="code">$ ./dabcast -A -p 2300 -g weber:2300 -g
|
|
||||||
beethoven:2330 -g mozart:2360 -i 1</p>
|
|
||||||
|
|
||||||
<p>Pour la machine <span style="font-style: italic;">beethoven</span>:</p>
|
|
||||||
|
|
||||||
<p class="code">$ ./dabcast -A -p 2330 -g weber:2300 -g
|
|
||||||
beethoven:2330 -g mozart:2360 -i 2</p>
|
|
||||||
|
|
||||||
<p>Pour la machine <span style="font-style: italic;">mozart</span>: </p>
|
|
||||||
|
|
||||||
<p class="code">$ ./dabcast -A -p 2360 -g weber:2300 -g
|
|
||||||
beethoven:2330 -g mozart:2360 -i 3</p>
|
|
||||||
|
|
||||||
<h4>4.3.2. CBCAST</h4>
|
|
||||||
|
|
||||||
<p>On supposera que les machines <span style="font-weight: bold;">weber</span>, <span style="font-weight: bold;">beethoven</span> et <span style="font-weight: bold;">mozart</span> font partie
|
|
||||||
du même groupe, que leur ports respectifs pour la
|
|
||||||
reception sont <span style="font-weight: bold;">2300</span>,
|
|
||||||
<span style="font-weight: bold;">2330</span>, et <span style="font-weight: bold;">2360</span>.</p>
|
|
||||||
|
|
||||||
<p>Pour la machine <span style="font-style: italic;">weber</span>, on lancera:</p>
|
|
||||||
|
|
||||||
<p class="code">$ ./dabcast -C -p 2300 -g weber:2300 -g
|
|
||||||
beethoven:2330 -g mozart:2360 -i 1</p>
|
|
||||||
|
|
||||||
<p>Pour la machine <span style="font-style: italic;">beethoven</span>:</p>
|
|
||||||
|
|
||||||
<p class="code">$ ./dabcast -C -p 2330 -g weber:2300 -g
|
|
||||||
beethoven:2330 -g mozart:2360 -i 2</p>
|
|
||||||
|
|
||||||
<p>Pour la machine <span style="font-style: italic;">mozart</span>: </p>
|
|
||||||
|
|
||||||
<p class="code">$ ./dabcast -C -p 2360 -g weber:2300 -g
|
|
||||||
beethoven:2330 -g mozart:2360 -i 3</p>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
./dabcast -A -p 2400 -g localhost:2400 -g localhost:2450 -i 1
|
||||||
|
./dabcast -A -p 2450 -g localhost:2400 -g localhost:2450 -i 2
|
3
src/TODO
3
src/TODO
|
@ -0,0 +1,3 @@
|
||||||
|
dans la RFC, indiquer si le temps commence à 0 ou à 1
|
||||||
|
indiquer si l'index de la machine commence à 0 ou à 1
|
||||||
|
envoyer les messages au highreceiver
|
|
@ -152,7 +152,7 @@ int Config::getPort(){
|
||||||
}
|
}
|
||||||
|
|
||||||
void Config::usage() {
|
void Config::usage() {
|
||||||
printf("Usage: dabcast <mode> [options]\n");
|
printf("Usage: webreducer <mode> [options]\n");
|
||||||
printf("\n");
|
printf("\n");
|
||||||
printf("Modes (mutualy exclusive):\n");
|
printf("Modes (mutualy exclusive):\n");
|
||||||
printf("-T, -test Test mode (simple broadcast)\n");
|
printf("-T, -test Test mode (simple broadcast)\n");
|
||||||
|
@ -161,5 +161,4 @@ void Config::usage() {
|
||||||
printf("Mandatory options:\n");
|
printf("Mandatory options:\n");
|
||||||
printf("-g, -group <host:port> Add an host to the group\n");
|
printf("-g, -group <host:port> Add an host to the group\n");
|
||||||
printf("-p, -port <port> Use this port on localhost\n");
|
printf("-p, -port <port> Use this port on localhost\n");
|
||||||
printf("-i, -index <int> The index of current host in the group\n");
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,6 @@ void LowReceiver::manage_abcast(Message * mesg) {
|
||||||
static short minimum_deliverable_stamp = -1;
|
static short minimum_deliverable_stamp = -1;
|
||||||
|
|
||||||
std::list<MessageCellAb *>::iterator iter;
|
std::list<MessageCellAb *>::iterator iter;
|
||||||
std::list<MessageCellAb *>::iterator iter2;
|
|
||||||
printf("LowReceiver::manage_abcast -- init\n");
|
printf("LowReceiver::manage_abcast -- init\n");
|
||||||
|
|
||||||
// identifiant = horloge + id_site_emeteur
|
// identifiant = horloge + id_site_emeteur
|
||||||
|
@ -112,35 +111,26 @@ void LowReceiver::manage_abcast(Message * mesg) {
|
||||||
// l'estampille...
|
// l'estampille...
|
||||||
Message * nMsg = new Message(Protocol::TYPE_ABCAST,
|
Message * nMsg = new Message(Protocol::TYPE_ABCAST,
|
||||||
st,
|
st,
|
||||||
nSt.getRaw(),
|
nSt->getRaw(),
|
||||||
nSt.getRawSize());
|
nSt->getRawSize());
|
||||||
|
|
||||||
_group.sendto(*(cell->message), cell->message->getStamp().getIndex());
|
_group.sendto(*(cell->message), cell->message->getStamp().getIndex());
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// sinon
|
// sinon
|
||||||
// - l'estampille du message est mise à jour
|
// - l'estampille du message est mise a jour
|
||||||
TimeStamp st = mesg->getStamp();
|
TimeStamp st = mesg->getStamp();
|
||||||
TimeStamp nSt = _clock.inc();
|
TimeStamp nSt = _clock.inc();
|
||||||
|
|
||||||
Message * nMsg = new Message(Protocol::TYPE_ABCAST,
|
Message * nMsg = new Message(Protocol::TYPE_ABCAST,
|
||||||
st,
|
st,
|
||||||
cell->message->getData(),
|
nSt->getRaw(),
|
||||||
cell->message->getDataSize());
|
nSt->getRawSize());
|
||||||
|
|
||||||
// - le message est ajouté dans deliverable
|
// - le message est marqué comme final
|
||||||
fifo_deliverable.push_back(nMsg);
|
cell->type = MessageCellAb::TYPE_DEFINITIVE;
|
||||||
|
|
||||||
// Trouver l'iterator
|
|
||||||
for (iter = fifo_get.begin(); iter != fifo_get.end(); iter++){
|
|
||||||
MessageCellAb * itCell = *iter;
|
|
||||||
if (cell == itCell){
|
|
||||||
iter2 = iter;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// normalement on a trouvé l'iterateur...
|
|
||||||
fifo_get.erase(iter2);
|
|
||||||
|
|
||||||
|
// - FIXME: on défile les estampille finale la
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue