====== Progetto LCS 2005/06 ====== ===== Informazioni generali ===== Il progetto prevede la realizzazione di una **chat** distribuita. Maggiori informazioni sulle modalita' di consegna, sulla prova orale e sul calcolo del voto dell'esame sono contenute nei lucidi introduttivi della prima lezione del corso. ===== Specifica del progetto ===== Il progetto prevede la realizzazione di un sistema client-server che implementa una chat distribuita. Sono adesso disponibili le {{proglcs0506.pdf|specifiche}} complessive del progetto.\\ Per la realizzazione dei frammenti 2 e 3 **prima** leggere accuratamente le specifiche complessive e **poi** seguire scrupolosamente le indicazioni fornite nei file README di ciascun frammento.\\ ==== Libreria MainWindow ==== Per il terzo frammento (stesura del client e delle librerie di comunicazione) e' necessario utilizzare la libreria MainWindow (MW). La libreria realizza sette funzioni che permettono di interagire con le finestre di ascolto e di comando del client senza dover gestire i dettagli a basso livello del terminale. La libreria e' fornita, gia' compilata, all'interno dei kit dei frammenti 2 e 3, per l'utilizzazione leggere attentamente il {{libmainwindow.pdf|Manuale Utente}}. Per la stesura del progetto **non e' necessario** guardare i sorgenti della libreria o ricompilarli, chi fosse comunque interessato puo' scaricare la {{mainwindow.tar.gz|distribuzione completa}} (licenza BSD). ===== Materiale primo frammento (scadenza 20/03) ===== Primo kit disponibile: {{lcschat_kitf1.tar}} Scaricatelo, salvatelo in un file con lo stesso nome in una directory nuova e s-taratelo con il comando bash:~$ tar xvf lcschat_kitf1.tar questo crea una directory //lcschat//, all'interno della quale si trova il file //README-1// che contiene tutte le informazioni su come procedere per la realizzazione del codice del frammento. Questo primo frammento, realizzabile in C sequenziale, prevede l'implementazione di una tabella hash((per informazioni aggiuntive su una tabella hash puoi vedere i siti di [[http://www.di.unipi.it/~grossi/ALG/|algoritmica]] o [[wp>Hash_table|Wikipedia]])) che verra' utilizzata all'interno del server per memorizzare i "canali di comunicazione" con i diversi client connessi alla chat. In particolare la chiave (strings) rappresentera' il nome dell'utente connesso, e l'intero rappresentera' un identificatore univoco del canale corrispondente. Attenzione: l'utility mpack e' installata solo nelle macchine dei laboratori H, I ed M. Se volete effettuare la consegna del frammento da un'altra macchina o da casa potete: * scaricare il binario((ATTENZIONE! e' un file binario quindi non ha senso visualizzarlo, salvatelo su file con il tasto destro del mouse!)) da [[http://www.di.unipi.it/~susanna/LCS/mpack|mpack]], salvarlo con questo nome ad esempio in //~/bin// e aggiungere la directory al PATH (vedi [[faq|FAQ]]). * piu' semplicemente collegarvi con ssh a trudy o una macchina dei laboratori H, I o M, i cui nomi sono fujihXX, fujiiXX, fujiXX, ad esempio ssh logindelcli@trudy ssh logindelcli@fujim1 ed eseguire lo script di consegna((E' necessario che la macchina sia sotto Linux, per questo conviene connettersi a trudy; eventualmente, se ssh non si collega o restituisce connection refused, provate a connettervi a un'altra macchina.)). ===== Materiale secondo frammento (scadenza 12/05/06) ===== Secondo kit disponibile: {{lcschat_kitf2.tar}} Scaricatelo, salvatelo in un file con lo stesso nome in una directory nuova e s-taratelo con il comando bash:~$ tar xvf lcschat_kitf2.tar questo crea una directory //lcschat//, all'interno della quale si trova il file //README-2// che contiene tutte le informazioni su come procedere per la realizzazione del codice del secondo frammento. Il secondo frammento, realizzabile utilizzando le chiamate di sistema relative ai processi ed ai pthread, prevede l'implementazione del server della chat. Il server e' costituito da un thread //dispatcher// che riceve le richieste di connessione da parte dei client relativi ai vari utenti e da un thread //worker// per ogni utente connesso. I thread worker condividono la tabella hash su cui sono registrati i socket di comunicazione dei client connessi.\\ L'eseguibile del client e la libreria di comunicazione che usa i socket sono forniti nel kit e saranno sviluppati nel terzo frammento. Il kit contiene eseguibili di test per il server ed il client che possono essere utilizzati per test preliminari e per avere un'idea del funzionamento complessivo. NOTA: Insieme al materiale per il secondo frammento, sono state rilasciate anche le {{proglcs0506.pdf|specifiche}} generali dell'intero progetto. Sono disponibili anche i {{amd64.tgz|binari}} compilati per processore AMD64. Vi ricordiamo comunque che il codice del progetto *DEVE* compilare e funzionare correttamente sulle macchine del centro di calcolo. ===== Materiale terzo frammento (scadenza 30/06) ===== Terzo kit disponibile: {{lcschat_kitf3.tar|lcschat_kitf3.tar}} Scaricatelo, salvatelo in un file con lo stesso nome in una directory nuova e s-taratelo con il comando bash:~$ tar xvf lcschat_kitf3.tar questo crea una directory //lcschat//, all'interno della quale si trova il file //README-3// che contiene tutte le informazioni su come procedere. Il terzo frammento, realizzabile utilizzando socket e segnali, prevede l'implementazione completa del server e del client della chat secondo le {{proglcs0506.pdf|specifiche}} generali dell'intero *progetto. **ATTENZIONE**: Per compilare le librerie di MainWindow seguire i seguenti passi: - Scompattare la libreria MainWindow tar xvfz MainWindow.tgz - Entrare nella directory MainWindow/ cd MainWindow - Eseguire make - Copiare la libreria in ../lib/ cp libMainWindow.a ../lib/ - Scompattare la libreria stubMainWindow: tar xvfz stubMainWindow.tgz - Entrare nella directory stubMainWindow/ cd stubMainWindow - Eseguire make - Copiare la libreria in ../lib/ **RINOMINANDOLA** con il nome libtestMainWindow.a: cp libMainWindow.a ../lib/libtestMainWindow.a ===== Altre informazioni ===== Ricordate che tutti gli elaborati consegnati verranno confrontati fra di loro automaticamente. I frammenti simili verranno annullati. Inoltre, leggete bene le [[faq|FAQ]].