From a8cd31b9681938b1cea0d02e884962fd8f114208 Mon Sep 17 00:00:00 2001 From: haller Date: Sat, 21 Jan 2006 21:10:23 +0000 Subject: - 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) --- i/simulotron/src/aiguillage/Makefile.incl.am | 8 ++++++++ i/simulotron/src/aiguillage/aiguillage.cc | 13 +++++++------ i/simulotron/src/aiguillage/aiguillage.hh | 5 +++-- i/simulotron/src/aiguillage/test_aiguillage.cc | 6 +++--- 4 files changed, 21 insertions(+), 11 deletions(-) create mode 100644 i/simulotron/src/aiguillage/Makefile.incl.am (limited to 'i/simulotron/src/aiguillage') 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 @@ -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) { -- cgit v1.2.3