summaryrefslogtreecommitdiff
path: root/include/Action.h
blob: fd8b2046e0ebed0765673754c25e39207920cbe1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#ifndef __ACTION_H__
#define __ACTION_H__
#ifdef __cplusplus

#include <Task.h>
#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 Task * 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