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 61 62 63 64 65 66 67 68 69 70 71
| class PoolClient
{
/* la classe Client est imbriquée dans l'accessibilité privée de PoolClient
* elle n'est donc pas accessible en dehors ;)
*/
struct Client
{
Client(IP const & ip, Port const & port, SessionId const & session,
Date const & expire):
ip(ip),port(port),id(session), expire(expire){}
IP ip;
Port port;
SessionId id;
Date expire;
};
public:
/* on doit pouvoir rajouter un client */
void add(Ip const & ip, Port const & port)
{
allClients.push_back(Client(ip,port,createSession(),calculateExpiration());
}
/* on doit pouvoir supprimer un client au départ de son identifiant de session */
void remove(SessionId const & id)
{
/* recherche du client correspondant et suppression de l'élément */
}
/* on doit pouvoir récupérer un identifiant au départ d'une ip */
SessionId const & idByIp(Ip const & ip) const
{
/* recherche de du client dont l'ip est ip et renvoit de son identifiant
* de session
*
* renvoi d'un identifiant "invalide" si le client n'est pas enregistré
*/
}
/* on doit pouvoir obtenir la date d'expiration au départ de l'identifiant de session */
Date const & expiration(SessionId const & id) const
{
/* recherche du client correspondant renvoi de sa date d'expiration
* renvoi d'une date identifiée comme invalide si le client n'existe pas */
}
/* on a besoin de pouvoir remplir une collection d'identifiants avec
* tous les identifiants des clients enregistrés
*/
void fillIdList(std::list<SessionId> & list) const
{
list.clear();
/* pour chaque client, ajouter l'identifiant à la liste */
}
private:
/* en interne uniquement, on doit pouvoir retrouver un client
* sur base de son identifiant
*/
Client const & find(SessionId const & id ) const
{
/*...*/
}
/* en interne seulement, on doit pouvoir générer un identifian de session
* qui sera unique
*/
SessionId createSession() const
{
/* ... */
}
/* en interne seulement, on doit pouvoir générer une date d'expiration */
Date calculateExpiration() const
{
/* ... */
}
std::vector<Client> allClients;
} |
Partager