Questo progetto nasce con lo scopo di fornire una struttra base di comunicazione astratta (basata su socket) che permette il rider-delivery di servizi ed elementi (in questo caso, di alimenti).
Il progetto consiste nello sviluppo ed implementazione di un servizio di food delivery. Il client si collega al server per ricevere la lista dei ristoranti disponibili. L'utente sceglie un ristorante tramite l'interfaccia del client, effettua un ordine e il server gestisce la comunicazione tra il ristorante e i rider per la consegna.
Questo sistema nasce come progetto per il corso universitario "reti di calcolatori".
- Linguaggio: C
- Comunicazione: Socket per la comunicazione tra processi
- Gestione I/O: IO/Multiplexing implementato tramite
select
L'architettura del sistema è composta da quattro entità principali:
- Server: Gestisce le comunicazioni tra le altre entità.
- Cliente: Si connette al server per visualizzare i ristoranti e fare ordini.
- Ristorante: Gestisce gli ordini e le connessioni con i rider.
- Rider: Si connette al ristorante per ricevere e consegnare gli ordini.
Il protocollo di comunicazione prevede diverse fasi, tra cui:
- Connessione del client al server e ricezione della lista dei ristoranti.
- Scelta del ristorante e ricezione del menu.
- Invio dell'ordine dal client al server e poi al ristorante.
- Gestione della disponibilità dei rider e assegnazione dell'ordine.
- Notifica di consegna completata dal rider al ristorante e poi al server.
Sono state utilizzate diverse strutture dati, tra cui:
- Lista doppiamente linkata: Per memorizzare e organizzare i dati.
- Prodotto: Contiene il nome e il prezzo degli articoli nel menu.
- Ordine: Memorizza gli ordini dei clienti.
- Ristorante: Memorizza i ristoranti attivi.
- Rider: Memorizza i rider attivi.
- Operazione: Gestisce le operazioni tra client e ristorante.
- Info_ordine: Gestisce gli ordini e le consegne.
Le entità utilizzano socket per le operazioni di lettura e scrittura. Il server utilizza l'IO/Multiplexing per la gestione sincrona dell'I/O. Sono state implementate funzioni wrapper per garantire la lettura e scrittura completa delle informazioni.
Ogni cartella contiene un Makefile. Per compilare i programmi, eseguire il comando make
nella cartella dell'entità.
Per eseguire il codice, avviare prima il Server, poi il Ristorante, il Rider e infine il Cliente. La sequenza consigliata è:
make
./server
./ristorante
./rider
./cliente