#ifndef HUB_HH #define HUB_HH /* hub.hh - Classe la plus haute dans la transmission par socket */ /* Simulotron - Programme de simulation de robot {{{ * * Copyright (C) 2006 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 "hub/comh.hh" #include "socket/socket_server.hh" #include "utils/non_copyable.hh" #include class GSMessage; class Hub : public NonCopyable { private: /// Horloge de simulation long long int timeh_; /// Listes des modules conectées au hub std::list modules_; /// Socket serveur pour la connection SocketServer socket_; /// Liste des modules attendu std::list modAwaited_; /// Drapeau pour sortir de la boucle bool isRunning; public: /// Constructeur Hub(const std::string & address, int port); /// Destructeur ~Hub(void); /// Lancement du hub void start(void); private: /// Initialisation void init(void); /// Attend et initialise la communication avec les modules void waitConnection(void); /// Demarre le travail de hub du hub void startLoop(void); /// Traite les messages des modules void processModules(void); /// Traite les message d'un modules void processModule(const std::list::iterator & it); /// Traite les wait des modules et fait avancer l'horloge si besoin void processWaits(void); /// Traite les règles d'arret du Hub void processStoppingRules(void); /// Se charge de faire se qu'il faut avec les messages void laPoste (const GSMessage & gsm, const std::string & source, const std::string & dest, int msgId); }; #endif //HUB_HH