server-int-int.cc


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)
{
  ???
}