summaryrefslogtreecommitdiff
path: root/i/simulotron/src/aiguillage
diff options
context:
space:
mode:
authorhaller2006-01-21 21:10:23 +0000
committerhaller2006-01-21 21:10:23 +0000
commita8cd31b9681938b1cea0d02e884962fd8f114208 (patch)
treeeeccb77227e02d919f75d9a97ea3c7557d2be2fc /i/simulotron/src/aiguillage
parent270ede560382bbce481b18895276d9802ae931ee (diff)
- ajout de quelques structures de données
- importation de la class nonCopyable et utilisation dans quelques classes - création d'une class exception simulotron_exception - ajout d'un paramètre "bloquant" pour recevoir une GS - modification de la valeur de retour des fonction servant à récupérer une GS - Mise en place de la poignée de main lors de la connection d'un module au hub - Ajout d'un message template pour les message vide - suppression des fonction (get|put)Char et getFD de la classe socket - modification de la fonction GSMessage::getString à deux arguments - ajout d'un test_hub - ajout de la class ComH (un peu comme ComC mais coté hub)
Diffstat (limited to 'i/simulotron/src/aiguillage')
-rw-r--r--i/simulotron/src/aiguillage/Makefile.incl.am8
-rw-r--r--i/simulotron/src/aiguillage/aiguillage.cc13
-rw-r--r--i/simulotron/src/aiguillage/aiguillage.hh5
-rw-r--r--i/simulotron/src/aiguillage/test_aiguillage.cc6
4 files changed, 21 insertions, 11 deletions
diff --git a/i/simulotron/src/aiguillage/Makefile.incl.am b/i/simulotron/src/aiguillage/Makefile.incl.am
new file mode 100644
index 0000000..0b589d6
--- /dev/null
+++ b/i/simulotron/src/aiguillage/Makefile.incl.am
@@ -0,0 +1,8 @@
+aiguillage_S = aiguillage/aiguillage.cc aiguillage/aiguillage.hh
+
+check_PROGRAMS += test_aiguillage
+test_aiguillage_SOURCES = aiguillage/test_aiguillage.cc \
+ $(aiguillage_S) \
+ $(gs_message_S) \
+ $(gs_transmitter_S) \
+ $(socket_S)
diff --git a/i/simulotron/src/aiguillage/aiguillage.cc b/i/simulotron/src/aiguillage/aiguillage.cc
index 6292ce7..3abd5ab 100644
--- a/i/simulotron/src/aiguillage/aiguillage.cc
+++ b/i/simulotron/src/aiguillage/aiguillage.cc
@@ -25,6 +25,7 @@
#include "aiguillage/aiguillage.hh"
#include "gs/gs_message.hh"
+#include "utils/simulotron_exception.hh"
#include <stdexcept>
@@ -59,25 +60,25 @@ Aiguillage::send(const GSMessage & gsm, const std::string & source,
}
/// Reçoie un paquet du réseau et supprime les infos src et dest du GSM
-int
-Aiguillage::receive(GSMessage & gsm, std::string & source, std::string & dest)
+bool
+Aiguillage::receive(GSMessage & gsm, std::string & source, std::string & dest, bool bloquant)
{
std::string tmp;
- if(gst_.getGS(gsm) != 0)
- return -1;
+ if(!gst_.getGS(gsm, bloquant))
+ return false;
gsm.getString(tmp, 8);
source = tmp.c_str();
gsm.getString(tmp, 8);
dest = tmp.c_str();
gsm.delBeforeIt();
- return 0;
+ return true;
}
void
Aiguillage::setName(const std::string & name)
{
if(name.size() > MAX_SIZE_NAME)
- throw std::runtime_error("Le nom est trop long!!");
+ throw simulotron_exception("Aiguillage", "Le nom est trop long!!");
name_ = name;
name_.append(MAX_SIZE_NAME - name.size(), '\0');
}
diff --git a/i/simulotron/src/aiguillage/aiguillage.hh b/i/simulotron/src/aiguillage/aiguillage.hh
index bdfc8a0..8f7eaf1 100644
--- a/i/simulotron/src/aiguillage/aiguillage.hh
+++ b/i/simulotron/src/aiguillage/aiguillage.hh
@@ -26,8 +26,9 @@
* }}} */
#include "gs/gs_transmitter.hh"
+#include "utils/non_copyable.hh"
-class Aiguillage
+class Aiguillage : public NonCopyable
{
private:
static const unsigned int MAX_SIZE_NAME = 8;
@@ -42,7 +43,7 @@ class Aiguillage
/// Envoie un paquet en rajoutant les infos de sources et de provenance
void send(const GSMessage & gsm, const std::string & source, const std::string & dest);
/// Reçoie un paquet du réseau et supprime les infos src et dest du GSM
- int receive(GSMessage & gsm, std::string & source, std::string & dest);
+ bool receive(GSMessage & gsm, std::string & source, std::string & dest, bool bloquant);
private:
/// Set le nom de transmition
void setName(const std::string & name);
diff --git a/i/simulotron/src/aiguillage/test_aiguillage.cc b/i/simulotron/src/aiguillage/test_aiguillage.cc
index 36285f8..bb65af0 100644
--- a/i/simulotron/src/aiguillage/test_aiguillage.cc
+++ b/i/simulotron/src/aiguillage/test_aiguillage.cc
@@ -82,7 +82,7 @@ int testGSServer(SocketServer & sockServ)
// Reception des messages
GSMessage gsm;
// Message 1
- while (aiSNCF.receive(gsm, source, dest) != 0);
+ while (!aiSNCF.receive(gsm, source, dest, true));
gsm.readGS(&i2, sizeof(int));
if (i1 != i2)
{
@@ -110,7 +110,7 @@ int testGSServer(SocketServer & sockServ)
}
gsm.clear();
// Message 2
- while (aiSNCF.receive(gsm, source, dest) != 0);
+ while (!aiSNCF.receive(gsm, source, dest, true));
gsm.readGS(&i2, sizeof(int));
if (i1 != i2)
{
@@ -138,7 +138,7 @@ int testGSServer(SocketServer & sockServ)
}
gsm.clear();
// Message 3
- while (aiSNCF.receive(gsm, source, dest) != 0);
+ while (!aiSNCF.receive(gsm, source, dest, true));
gsm.readGS(&i2, sizeof(int));
if (i1 != i2)
{