Negozio

Descrizione del progetto

Si vuole realizzare un sistema per la gestione di negozi virtuali costituito dalle seguenti entità:

  • ServerM: mantiene la lista dei negozi virtuali e dei prodotti di ogni ne- gozio virtuale. Interagisce con ServerN e ServerC.
  • ServerN: consente ai ClientN di operare sul ServerM. In particolare con- sente di creare un nuovo negozio virtuale, eliminare un negozio virtuale ed aggiungere ed eliminare prodotti da un negozio virtuale.
  • ServerC: consente ai Client di operare sul ServerM. In particolare con- sente di ricevere l’elenco dei negozi virtuali, ricevere l’elenco dei prodotti di un negozio virtuale e ricercare un prodotto in un negozio virtuale.
  • ClientN: consente al negoziante di gestire i propri negozi virtuali (ed i relativi prodotti) memorizzati sul ServerM, usando il ServerN come tramite. Ogni negoziante pu‘o gestire piu‘ negozi virtuali.
  • Client: consente all’utente di interagire con i negozi virtuali memoriz- zati sul ServerM usando il ServerC come tramite. In particolare, consente all’utente di inserire i prodotti contenuti in diversi negozi virtuali in una lista di acquisti e di visualizzare la lista di acquisti.

Diagramma

Protocollo Applicazione

Il client e il server si scambiano il pacchetto formato dai seguenti campi:

  • flag: variabile utilizzata per fare controlli e gestire le varie operazioni in base a ciò che vuole fare il client;
  • id-client: identifica l’id del cliente che si vuole connettere ed è unico;
  • id-neg: chiave che identifica il negozio;
  • nome-neg: stringa in cui si memorizza il nome del negozio;
  • nome-prod: stringa che memorizza il nome del prodotto.

ProtocolloApplicazione

Dettagli Implementativi

Lato Server

Il ServerM è il server principale che mantiene la lista dei negozi e dei prodotti e comunica solo tramite i due server sottostanti, ovvero il ServerN e il ServerC. Il ServerN si occupa di comunicare con i negozianti che vogliono apportare modifiche ai loro negozi e prodotti. Il ServerC si occupa di interagire con gli utenti che visualizzano la lista dei prodotti e dei negozi. Il server principale è quello che aggiorna le due liste mentre i due server fanno da tramite tra gli utenti e il ServerM. Tra i server si è deciso di utilizzare il protocollo UDP in quanto si vuole che le informazioni arrivino in modo rapido. Poiché i server devono gestire più client si è deciso di utilizzare dei thread, ovvero dei processi che avvengono in parallelo in modo tale da poter comunicare con più utenti contemporaneamente e I/O Multiplexing per gestire al meglio i vari utenti.

Lato Client

Il ClientN, ovvero il nostro negoziante, gestisce i propri negozi e prodotti mentre il ClientC sarebbe l’utente che decide di acquistare prodotti e aggiungerli in un carrello. Si utilizza una comunicazione TCP tra client e server in quanto non è importante la velocità ma più la sicurezza delle informazioni.

Manuale Utente

Come primo comando inizializzare la lista di negozi (d'esempio) create dal file InizializzaFile.

gcc InizializzaFile.c -o Inizializza
./Inizializza

Aprire 5 terminali. !!! ESEGUIRE PRIMA I LA COMPILAZIONE E POI L'ESECUZIONE

Fase di Inizializzazione

Terminale 1
gcc ServerM.c -o ServerM -lpthread
./ServerM
Terminale 2
gcc ServerC.c -o ServerC -lpthread
./ServerC 127.0.0.1
Terminale 3
gcc ServerN.c -o ServerN -lpthread
./ServerN 127.0.0.1
Terminale 4
gcc ClientC.c -o ClientC -lpthread
./ServerC 127.0.0.1
Terminale 5
gcc ClientN.c -o ClientN -lpthread
./ServerN 127.0.0.1