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