Fichier texte: [server-int-int.cc]
// -*- coding: latin-1 -*- #include "libsocket.hh" #include "proto-int-int.hh" #include <cstddef> #include <iostream> #include <cstdlib> using namespace std; //============================================================================== // class ServerIntInt // // Cette classe hérite de la class Server et s'en sert pour réaliser un serveur // clé/valeur où les clé et les valeurs sont des entiers. // // Attributs: // _table: la table dans laquelle on stocke les valeurs // _valid: un tableau de même taille que _table indiquant pour chaque case // de _table si elle contient véritable une valeur (une valeur lui // a été affectée) // _size : la taille des tableaux ci-dessus //============================================================================== class ServerIntInt : public Server { private: int * _table; bool * _valid; size_t _size; public: ServerIntInt(int size); virtual void interaction(Socket& client); protected: int recv_QUIT(Socket& client); int recv_DEL (Socket& client); int recv_PUT (Socket& client); int recv_GET (Socket& client); int recv_PUTN(Socket& client); int recv_GETN(Socket& client); }; //------------------------------------------------------------------------------ // ServerIntInt(int size) // // le constructeur auquel on donne en argument (size) la taille des tableaux //------------------------------------------------------------------------------ ServerIntInt::ServerIntInt(int size) ??? //------------------------------------------------------------------------------ // interaction(Socket& client) // // La boucle d'interaction avec le client. Si une erreur se produit lors de la // réception d'une requête, il faut afficher un message d'erreur approprié et // terminer l'interaction. Dans tous les cas, avant de sortir d'interaction, il // faut fermer la socket //------------------------------------------------------------------------------ void ServerIntInt::interaction(Socket& client) { while (true) { // lire le code de requête int code; // suivant le code, on dispatch vers le traitement approprié // qui invoque la méthode recv_XXX correspondante (voir ci-dessous) switch (code) { case QUIT: case DEL : case PUT : case GET : case PUTN: case GETN: default: } } return; err: // afficher un message d'erreur approprié close: // fermer la socket } //------------------------------------------------------------------------------ // traitement de la requête QUIT() //------------------------------------------------------------------------------ int ServerIntInt::recv_QUIT(Socket& client) { ??? } //------------------------------------------------------------------------------ // traitement de la requête DEL(i) //------------------------------------------------------------------------------ int ServerIntInt::recv_DEL(Socket& client) { ??? } //------------------------------------------------------------------------------ // traitement de la requête PUT(i,k) //------------------------------------------------------------------------------ int ServerIntInt::recv_PUT(Socket& client) { ??? } //------------------------------------------------------------------------------ // traitement de la requête GET(i) //------------------------------------------------------------------------------ int ServerIntInt::recv_GET(Socket& client) { ??? } //------------------------------------------------------------------------------ // traitement de la requête PUTN(n,i1,k1,...,in,kn) //------------------------------------------------------------------------------ int ServerIntInt::recv_PUTN(Socket& client) { ??? } //------------------------------------------------------------------------------ // traitement de la requête GETN(n,i1,...,in) //------------------------------------------------------------------------------ int ServerIntInt::recv_GETN(Socket& client) { ??? } //============================================================================== // server-int-int PORT CAPACITY //============================================================================== int main(int argc, char** argv) { ??? }