#ifndef __ACTION_H__ #define __ACTION_H__ #ifdef __cplusplus #include "Handle.h" #include "Variables.h" #include "Exceptions.h" /* * La classe Action defini les actions HTTP possibles. * Le constructeur indique l'URL de l'action. Si aucune URL n'est specifiee, * alors une URL aléatoire sera générée. * * Lors de la construction d'une Action, elle sera rajoutée dans une liste chaînée * interne à la classe. De ce fait, la fonction Look4URL recherchera une Action * associée a une URL donnée en paramètre dans la liste chaînée. Le destructeur * va remettre en place la liste chaînée. * * Les dérivés doivent surcharger la méthode Do, qui recevra les variables transportées * par l'action (si nous avions une méthode POST juste avant) et le handle d'écriture * vers le socket HTTP. Ils devront aussi surcharger GetTitle, qui sert à écrire le * titre de la page HTML dans les méthodes SendHead et SendFoot. Ces deux méthodes sont * d'ailleurs surchargeables, pour créer de nouvelles skins HTML dans des classes dérivées. * * La méthode ShowButton sert à afficher un bouton sur la page. Par défaut, ce bouton reviendra * vers la page principale. * * Une action peut être "temporaire", c'est à dire accessible uniquement une seule fois. * Dans ce cas, après création, il faut faire appel à la méthode CleanUp, et la méthode * Do devra terminer par un appel a Accessed, afin de supprimer cette Action. */ class Action : public Base { public: Action(const String & = ""); virtual ~Action(); Action * Look4URL(const String &); virtual void Do(Variables *, Handle *) = 0; virtual void SendHead(Handle *); virtual void SendFoot(Handle *); virtual void ShowButton(Handle *, const String & = " Ok ", const String & = "start"); virtual String GetTitle(void) = 0; String GetURL(void); void CleanUp(void); protected: void Accessed(void); private: static Action * start; Action * next, * prev; String URL; bool hastoclean, accessed; }; #else #error This only works with a C++ compiler #endif #endif