testo
Transcript
testo
$SSHOORGHO /HJJHWH FRQ DWWHQ]LRQH OH VSHFLILFKH GHO SUREOHPD SULPD GL LPSHJQDUYL ³D WHVWD EDVVD´ QHOOR VYLOXSSR GHOOH VLQJROH SDUWL 1DWXUDOPHQWH L FRPSRQHQWL GD FRQVHJQDUHGHYRQRHVVHUHVWDWLSURYDWL /D SURYD LQWHQGH YDOXWDUH OH FDSDFLWj SURJHWWXDOL H GL SURJUDPPD]LRQH VLD LQ DPELHQWH & FKH LQ DPELHQWH -DYD SHUWDQWR q FRQVLJOLDELOH VYLOXSSDUH DOPHQR LQ SDUWHHQWUDPEHOHVROX]LRQLULFKLHVWH Si progetti un’applicazione Client/Server per la JHVWLRQHGHOOHSUHQRWD]LRQLGHLSRVWLLQ XQDPXOWLVDODper la giornata corrente. La multisala fornisce ai clienti un’interfaccia tramite la quale richiedere il programma delle varie sale nella giornata corrente, oppure prenotare un posto. Il 6HUYHU mantiene sul suo nodo di residenza i programmi delle 10 sale, ciascuno dei quali è memorizzato in una struttura dati in cui ad ogni riga corrisponde un turno di proiezione (mattina, pomeriggio, sera) e ad ogni colonna uno spettacolo dello stesso turno (primo, secondo, terzo). Nel turno della mattina è previsto un solo spettacolo, nel pomeriggio due, nella sera tre. Per ogni spettacolo è disponibile ovviamente un numero di posti pari alla capienza della sala. Primo Spettacolo titolo posti film liberi pomeriggio titolo posti film liberi sera titolo posti film liberi mattina Secondo Spettacolo nessuno Terzo Spettacolo nessuno titolo film titolo film nessuno posti liberi posti liberi titolo film posti liberi I &OLHQW possono richiedere operazioni per: - RWWHQHUHLOSURJUDPPDgiornaliero delle varie sale; - SUHQRWDUHun posto ad uno spettacolo; I Client inoltrano le richieste al Server in modo appropriato, e per ogni possibile operazione prevedono anche una gestione di eventuali condizioni anomale (come per esempio la richiesta di prenotazione ad uno spettacolo inesistente, per esempio il terzo del pomeriggio, oppure per il quale non ci sono più posti disponibili). I Client sono implementati come SURFHVVLFLFOLFL che continuano a fare richieste sincrone fino ad esaurire tutte le esigenze utente, (cioè fino alla fine del file di input dell'utente). N.B.: gestire con attenzione la condizione di fine del file. Alcuni esempi di interazione per la richiesta del programma: ½ Sala? 2 ½ Turno? pomeriggio ½ Programma della sala 2 per il pomeriggio: primo spettacolo: Titolo secondo spettacolo: Titolo ½ Sala? 12 ½ Sala inesistente 1 ecc. Alcuni esempi di interazione per la prenotazione di un posto: ½ Sala? 1 ½ Turno? Sera ½ Spettacolo? Secondo ½ Prenotazione effettuata correttamente ½ Sala? 7 ½ Turno? Sera ½ Spettacolo? Primo ½ Posti esauriti ecc. Si richiede lo sviluppo di due soluzioni: 1. una progettata in C, che utilizzi la primitiva VHOHFW; 2. una progettata in Java, utilizzando RMI. Si decida anche la corretta struttura dati dalla parte del server che controlla tutte le sale, e per ciascuna sala, gestisce i titoli dei vari spettacoli e il numero di posti disponibili per ogni spettacolo, codificando nel modo più semplice gli attributi significativi. 6SHFLILFKHSHUO¶LPSOHPHQWD]LRQHLQ& /¶DSSOLFD]LRQHSUHYHGHO¶LPSOHPHQWD]LRQHGLXQ6HUYHUHGLGXH&OLHQW Il Server C (6HUYHU0XOWLVDODF) deve accettare le richieste di servizio discriminando tra i due tipi di operazione, che vengono ricevute attraverso socket diverse. Obbligatoriamente si usi la primitiva VHOHFW per distinguere le richieste di prenotazione, da gestire usando una socket di tipo datagram, e quelle di visione del programma, da gestire usando una socket di tipo stream. Le richieste di registrazione implicano l’aggiornamento della struttura dati corrispondente alla giornata voluta; le richieste di visione del programma invece richiedono il salvataggio di tale VWUXWWXUDGDWLVXILOH e l’invio dello stesso al client che lo VWDPSDD YLGHR. Il Server C viene invocato con: 6HUYHU0XOWLVDOD Il primo Client C (SURJUDPPDF) effettua richieste di visione del programma e ha l’interfaccia di invocazione: SURJUDPPD1RPH+RVW Il secondo Client C (SUHQRWD]LRQHF) effettua richieste di prenotazione e viene invocato con: SUHQRWD]LRQH1RPH+RVW NomeHost è il nome dell’host su cui è in esecuzione il Server. Entrambi i client chiedono all'utente ciclicamente la sala di cui si desidera visionare il programma oppure la sala, il turno e lo spettacolo a cui si desidera prenotare un posto, e stampano l'esito dell’operazione richiesta, verificando che la richiesta sia lecita (si 2 stabilisca dove è opportuno effettuare tale verifica), e trattando le opportune condizioni anomale. 6SHFLILFKHSHUO¶LPSOHPHQWD]LRQHLQ-DYD /¶DSSOLFD]LRQHSUHYHGHO¶LPSOHPHQWD]LRQHGLXQ6HUYHUHGLXQ&OLHQWFKHSURSRQH FLFOLFDPHQWHDOO¶XWHQWHLGXHVHUYL]LFKHLQ&YHQLYDQRIRUQLWLGDGXH&OLHQWGLVWLQWL 6L QRWL FKH OD UHVWLWX]LRQH GHO SURJUDPPD DYYLHQH UHVWLWXHQGR XQ RJJHWWR RSSRUWXQR $QFKH QHOO¶LPSOHPHQWD]LRQH LQ -DYD YDQQR JHVWLWL L FDVL GL HUURUH GHVFULWWL LQ SUHFHGHQ]D Il progetto RMI si compone di: • una classe (3URJUDPPD contenuta nel file 3URJUDPPDMDYD), che implementa la struttura dati contenente gli spettacoli delle varie sale; si noti che i programmi delle varie sale andranno poi gestiti con una opportuna struttura dati che li raccolga tutti; • un’interfaccia (6HUYHU0XOWLVDODcontenuta nel file 6HUYHU0XOWLVDODMDYD) in cui vengono definiti i metodi invocabili in remoto dal client (prenotazione, programma), il cui codice viene fornito: import java.rmi.Remote; import java.rmi.RemoteException; public interface ServerMultisala extends Remote { int prenotazione(int sala, int turno, int spettacolo) throws RemoteException; Programma programma(int sala) throws RemoteException; } • una classe (6HUYHU0XOWLVDOD,PSO contenuta nel file 6HUYHU0XOWLVDOD,PSOMDYD), che implementa i metodi del server invocabili in remoto; • una classe (&OLHQW0XOWLVDOD contenuta nel file &OLHQW0XOWLVDODMDYD), che realizza l’interazione con l’utente mettendo a disposizione le funzionalità descritte, fornite effettuando le opportune chiamate remote. Il Server presenta l’interfaccia di invocazione: 6HUYHU0XOWLVDOD,PSO mentre il Client viene attivato con: &OLHQW0XOWLVDOD1RPH+RVW Il Client (istanza della classe relativa) deve recuperare dal registry, in esecuzione sull’host specificato, il riferimento all’oggetto remoto, ServerMultisala, di cui deve invocare i metodi. 3