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