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
|
#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
|