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.
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.
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.
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.
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
gcc ServerM.c -o ServerM -lpthread
./ServerM
gcc ServerC.c -o ServerC -lpthread
./ServerC 127.0.0.1
gcc ServerN.c -o ServerN -lpthread
./ServerN 127.0.0.1
gcc ClientC.c -o ClientC -lpthread
./ServerC 127.0.0.1
gcc ClientN.c -o ClientN -lpthread
./ServerN 127.0.0.1