summaryrefslogtreecommitdiff
path: root/include/Action.h
blob: 5fcf660b6f8d1909a9579dbcd0aa661c183d7c6a (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
#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