prorub Progetto LPS-C 2004-2005 Una rubrica interattiva 1 Struttura complessiva client1 server clientN • Processo server – gestisce una rubrica centralizzata – ogni voce ha (cognome, nome, città, tel, commento) es: De Rossi Mario Pisa +39-050789 Casa Bei Sandra Bari 34778988 Cellulare 2 Come funziona file_voci rubserver • Attivazione server: – $$ rubserver file_voci attiva un processo server (demone, in background) che • legge da file_voci la rubrica corrente, controlla il formato e la memorizza in una SD interna • si mette in attesa di richieste dai client 3 Formato del database Un record per riga • Ogni campo di lunghezza fissa – – – – – Cognome (40 char) Nome (40 char) Citta (20 char) Telefono (20 char) Commento (20 char) • Se l’informazione è più corta si completa con blank (padding) • Sono seq di caratteri senza terminatori di stringa (‘\O`) 4 Formato del database De Rossi Mario Pisa +39-050789 Casa Bei Sandra Bari 34778988 Cellulare Sono rappresentati come De Rossi 32b Mario 35b Pisa 16b +39-050789 10b Casa 16b Bei 37b Sandra 34 Bari 16b 34778988 12b Cellulare 11b 140 char 5 Come funziona (2) client rubclient rubclient -i rubclient -q rubclient -d $$ rubclient stampa un messaggio di uso (formato a piacere) 6 Come funziona (3) $$ rubclient -i inserisce un record in modo interattivo (formato fisso nelle specifiche) 7 Come funziona (3.1) $$ rubclient -i Cognome ? 8 Come funziona (3.2) $$ rubclient -i Cognome ? Rossi Nome ? Gino Citta ? Pisa Telefono ? 050698787 Commenti ? Ufficio Vuoi inserire il record: ‘Rossi Gino Pisa 050698787 Ufficio ?’ (OK per confermare) OK $$ 9 Come funziona (4) $$ rubclient -d chiave cancella tutti i record del DB che contengono chiave in uno dei campi (es. ossi in Rossi) 10 Come funziona (4.1) $$ rubclient -d chiave Vuoi cancellare tutti i record che contengono ‘chiave’? OK Cancellazione avvenuta $$ 11 Come funziona (5) $$ rubclient -q chiave mostra tutti i record del DB che contengono chiave in uno dei campi (es. ossi in Rossi) 12 Come funziona (5.1) $$ rubclient -q ossi Rossi Gino Pisa 050698787 Ufficio Grossi Mario Napoli 98909 Casa $$ 13 Come funziona (5.2) $$ rubclient -q hossi Nessun record contiene ‘hossi’ . $$ 14 Struttura da realizzare rubclient1 rubserver rubclientN • Programma rubserver • Programma rubclient 15 Struttura da realizzare: interazioni client server /tmp/clientserver rubserver rubclient • I client comunicano con il server con una pipe dal nome fissato – richieste di operazioni, formato di lunghezza fissa (161, vediamo poi perché) 16 Struttura da realizzare: interazioni client server (2) rubserver rubclient /tmp/pipe_ascolto • I client creano una pipe dedicata per ricevere i messaggi di risposta del server in /tmp ne comunicano il nome al server assieme alle richieste 17 Struttura da realizzare: interazioni client server (3) /tmp/clientserver rubclient -i rubserver pid 1234 /tmp/pipeas1234 • Esempio di richiesta di aggiunta:1+20+140 A pipeas1234 10b De Rossi 32b Mario 35b Pisa 16b +39-050789 10b Casa 16b 18 Struttura da realizzare: interazioni client server (4) /tmp/clientserver rubclient -i rubserver pid 1234 /tmp/pipeas1234 • Esempio di risposta del server:1+140 OK 139b • inserzione OK 19 Struttura da realizzare: interazioni client server (5) /tmp/clientserver rubclient -q rubserver pid 1237 /tmp/pipeas1237 • Esempio di query:1+20+140 Q pipeas1237 10b ossi 136b 20 Struttura da realizzare: interazioni client server (6) /tmp/clientserver rubserver rubclient -q pid 1237 /tmp/pipeas1237 • Esempio di risposta : due msg 1+140 A De Rossi 32b Mario 35b Pisa 16b +39-050789 10b Casa 16b STOP 137b 21 Protocollo complessivo client server • Specificato nel testo del progetto 22 Organizzazione complessiva • Scadenze consegne intermedie – (+2 ogni consegna corretta in tempo) Frammento 1: 13/04/2005 Frammento 2: 2/05/2005 Frammento 3 (progetto completo): 4/07/2005 • Almeno 15gg prima – specifiche, software di test, makefile e script per la consegna • Due esercitazioni dedicate a ogni frammento 23 Come e cosa si deve consegnare • Esclusivamente usando gli script forniti nel materiale del frammento corrispondente • il README di ogni frammento spiega cosa occorre consegnare • Relazione (solo con il progetto finale) – strutture dati e principali algoritmi (descrizioni e motivazioni) – struttura complessiva server e client – istruzioni per l’utente 24 Data ultima • Entro il 10 Febbraio 2006 25