summaryrefslogtreecommitdiff
path: root/i/simulotron/src/aiguillage
diff options
context:
space:
mode:
authorhaller2005-12-19 23:21:42 +0000
committerhaller2005-12-19 23:21:42 +0000
commit08665d1190b5512046797e34041575aeaccc1ec7 (patch)
tree2f388ad8bee1119fd113ce3c0041628066eeeee3 /i/simulotron/src/aiguillage
parent001f91e6ddce33aec769348adc55f0c0b0c09534 (diff)
* Creation du fichier comc.c
* Codage de Aiguillage en progression... * Creation d'un test_aiguillage pipo (pour l'instant) * Ajout de fonctionnalité à GSMessage * Ajout de Aiguillage pour la compilation dans le Makefile.am
Diffstat (limited to 'i/simulotron/src/aiguillage')
-rw-r--r--i/simulotron/src/aiguillage/aiguillage.cc74
-rw-r--r--i/simulotron/src/aiguillage/aiguillage.hh14
-rw-r--r--i/simulotron/src/aiguillage/test_aiguillage.cc4
3 files changed, 86 insertions, 6 deletions
diff --git a/i/simulotron/src/aiguillage/aiguillage.cc b/i/simulotron/src/aiguillage/aiguillage.cc
new file mode 100644
index 0000000..95bbad1
--- /dev/null
+++ b/i/simulotron/src/aiguillage/aiguillage.cc
@@ -0,0 +1,74 @@
+/* aiguillage.cc - Classe rajoutant les info de la source et de la dest d'un packet */
+/* Simulotron - Programme de simulation de robot {{{
+ *
+ * Copyright (C) 2005 Nicolas Haller
+ *
+ * Robot APB Team/Efrei 2006.
+ * Web: http://assos.efrei.fr/robot/
+ * Email: robot AT efrei DOT fr
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * }}} */
+
+#include "aiguillage/aiguillage.hh"
+#include "gs/gs_message.hh"
+
+#include <stdexcept>
+
+/// Constructeur
+Aiguillage::Aiguillage(const std::string & address, int port, const std::string & name)
+ :gst_(address, port)
+{
+ setName(name);
+}
+
+/// Envoie un paquet en rajoutant les infos de sources et de provenance
+void
+Aiguillage::send(const GSMessage & gsm, const std::string & source,
+ const std::string & dest)
+{
+ ///\todo Voir pour optimiser ca
+ GSMessage g = gsm;
+ g.insertFrontGS(dest.data(), MAX_SIZE_NAME);
+ // Si source est vide, mettre name_
+ if(source.empty())
+ g.insertFrontGS(name_.data(), MAX_SIZE_NAME);
+ else
+ g.insertFrontGS(source.data(), MAX_SIZE_NAME);
+ gst_.putGS(g);
+}
+
+/// 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)
+{
+ if(gst_.getGS(gsm) != 0)
+ return -1;
+ gsm.getString(source, 8);
+ gsm.getString(dest, 8);
+ gsm.delBeforeIt();
+ return 0;
+}
+
+void
+Aiguillage::setName(const std::string & name)
+{
+ if(name.size() > MAX_SIZE_NAME)
+ throw std::runtime_error("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 a549eae..3ec2bae 100644
--- a/i/simulotron/src/aiguillage/aiguillage.hh
+++ b/i/simulotron/src/aiguillage/aiguillage.hh
@@ -25,22 +25,24 @@
*
* }}} */
+#include "gs/gs_transmitter.hh"
+
class Aiguillage
{
private:
- static const int MAX_SIZE_NAME = 8;
+ static const unsigned int MAX_SIZE_NAME = 8;
private:
- GSTransmitter gqt_;
+ GSTransmitter gst_;
std::string name_;
public:
/// Constructeur
- Aiguillage(void);
+ Aiguillage(const std::string & address, int port, const std::string & name);
/// Envoie un paquet en rajoutant les infos de sources et de provenance
- void send(GSMessage & gsm, const std::string & source, const std::string & dest);
+ 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, const std::string & dest);
+ int receive(GSMessage & gsm, std::string & source, std::string & dest);
private:
/// Set le nom de transmition
- void setName(std::string & name);
+ void setName(const std::string & name);
};
#endif //AIGUILLAGE_HH
diff --git a/i/simulotron/src/aiguillage/test_aiguillage.cc b/i/simulotron/src/aiguillage/test_aiguillage.cc
new file mode 100644
index 0000000..82be6e4
--- /dev/null
+++ b/i/simulotron/src/aiguillage/test_aiguillage.cc
@@ -0,0 +1,4 @@
+int main (void)
+{
+ return 0;
+}