#ifndef _BARRIERE_H
#define _BARRIERE_H
#include <Socket.h>
#include <string.h>
enum Position {enHaut, auMilieu, enBas};
enum Situation {enEntree, enDessous, enSortie, aucune};
class Barriere
{
Socket &barriere;
public:
Barriere(Socket &service) : barriere(service) {}
void setCommandeSensMontee();
void setCommandeSensDescente();
bool isInFDCH();
bool isInFDCL();
bool isBoucleAmont();
bool isBoucleAval();
Position getPosition();
Situation getSituation();
};
inline
void Barriere::setCommandeSensMontee()
{
barriere.envoyer("Barriere:setCommandeSensMontee");
barriere.recevoir();
}
inline
void Barriere::setCommandeSensDescente()
{
barriere.envoyer("Barriere:setCommandeSensDescente");
barriere.recevoir();
}
inline
bool Barriere::isInFDCH()
{
barriere.envoyer("Barriere:isInFDCH");
return strcmp(barriere.recevoir(), "haut") == 0;
}
inline
bool Barriere::isInFDCL()
{
barriere.envoyer("Barriere:isInFDCL");
return strcmp(barriere.recevoir(), "bas") == 0;
}
inline
bool Barriere::isBoucleAmont()
{
barriere.envoyer("Barriere:isBoucleAmont");
return strcmp(barriere.recevoir(), "entree") == 0;
}
inline
bool Barriere::isBoucleAval()
{
barriere.envoyer("Barriere:isBoucleAval");
return strcmp(barriere.recevoir(), "sortie") == 0;
}
inline
Position Barriere::getPosition()
{
if (isInFDCH()) return enHaut;
if (isInFDCL()) return enBas;
return auMilieu;
}
inline
Situation Barriere::getSituation()
{
bool entree = isBoucleAmont();
bool sortie = isBoucleAval();
if (entree && sortie) return enDessous;
else if (entree) return enEntree;
else if (sortie) return enSortie;
return aucune;
}
#endif