lpr-a:progetto4
Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
Entrambe le parti precedenti la revisioneRevisione precedenteProssima revisione | Revisione precedente | ||
lpr-a:progetto4 [14/12/2010 alle 07:27 (15 anni fa)] – Vincenzo Gervasi | lpr-a:progetto4 [14/12/2010 alle 13:38 (15 anni fa)] (versione attuale) – Vincenzo Gervasi | ||
---|---|---|---|
Linea 11: | Linea 11: | ||
===== Ciclo di funzionamento ===== | ===== Ciclo di funzionamento ===== | ||
- | Ogni utente del juke-bok è dotato di un programma, che normalmente funge da client, ma occasionalmente può fungere anche da server. Al programma viene fornito, come parametro di riga di comando, l' | + | Ogni utente del juke-bok è dotato di un programma, che normalmente funge da client, ma occasionalmente può fungere anche da server. Al programma viene fornito, come parametro di riga di comando, l' |
All' | All' | ||
- | Una volta stabilito il contatto con il server, il client invia la lista della musica che ha a disposizione, | + | Una volta stabilito il contatto con il server, il client invia la lista della musica che ha a disposizione, letta dalla directory indicata, attraverso una serie di messaggi **disponibile**. |
Dopo aver trasmesso la lista al server, il client si pone in attesa di ricevere dal server un comando **play**, che contiene l' | Dopo aver trasmesso la lista al server, il client si pone in attesa di ricevere dal server un comando **play**, che contiene l' | ||
Linea 89: | Linea 89: | ||
==== Audio in streaming ==== | ==== Audio in streaming ==== | ||
- | L' | + | L' |
- | ------------------------------------------------------------------------------- | + | I pacchetti per l' |
- | ISSUE: AudioFormat non è serializzabile, | + | |
- | ------------------------------------------------------------------------------- | + | |
+ | ^ 0 ^ 1 ^ 2 ^ 3 ^ 4-5 ^ 6- ^ n ^ | ||
+ | | B | E | G | I | id | title | \0 | | ||
+ | All' | ||
- | VECCHIO PROGETTO: | + | ^ 0 ^ 1 ^ 2 ^ 3 ^ 4-5 ^ 6-7 ^ 8-(8+len) ^ |
+ | | D | A | T | A | id | len | dati | | ||
+ | I pacchetti DATA contengono, oltre all'id dello stream, l' | ||
+ | ^ 0 ^ 1 ^ 2 ^ 3 ^ 4-5 ^ | ||
+ | | E | N | D | F | id | | ||
+ | Al termine della trasmissione dei dati audio, il client originatore invia un pacchetto ENDF, che indica il completamento dello stream. | ||
- | Client e server comunicano tramite un unico canale tramite TCP. Tutte le comunicazioni sono iniziate dal client. | + | ===== Accesso all' |
- | ==== Convenzioni generali ==== | + | La classe principale per l' |
- | === Formato === | + | |
- | Il protocollo di comunicazione | + | |
- | === Temporizzazione === | + | <code java> |
- | Ciascun cliente **deve** inviare almeno un messaggio ogni 5 secondi (altrimenti viene dichiarato | + | // Crea: |
+ | // un AudioInputStream (in questo caso da un file, ma esiste una variante overloaded | ||
+ | // un AudioFormat che rappresenta | ||
+ | // una SourceDataLine che rappresenta un canale di output audio pronto a riprodurre dati nell' | ||
- | === Fairness === | + | File f = new File("/ |
- | Tentativi di sabotare il server o il protocollo sono lodevoli, ma considerati illegali ai fini dell' | + | AudioInputStream ais=AudioSystem.getAudioInputStream(f); |
- | ==== Messaggi TCP ==== | + | AudioFormat af=ais.getFormat(); |
- | I comandi hanno la seguente struttura: | + | SourceDataLine sdl=AudioSystem.getSourceDataLine(af); |
- | * bit 7-6: riservati per future espansioni | + | |
- | * bit 5-2: opcode di comando | + | |
- | * bit 1-0: codice di direzione | + | |
- | === Comandi === | + | // Inizializza |
- | ^ Comando ^^ Descrizione ^ Risposta ^ Consumo energia ^ | + | |
- | ^ Nome ^ Valore ^ ^ ^ ^ | + | |
- | | Comandi con codice di direzione ||||| | + | |
- | ^ STEP ^ 1 | Si sposta di un passo verso la //direzione//, | + | |
- | ^ LOOK ^ 2 | Guarda verso la // | + | |
- | ^ FIRE ^ 3 | Emette un raggio laser lungo la // | + | |
- | | Comandi senza codice di direzione ||||| | + | |
- | ^ GPS ^ 5 | Restituisce la propria posizione corrente. | Un byte contenente la posizione //x//, un byte contenente la posizione //y//. | - | | + | |
- | ^ BATTERY ^ 6 | Restituisce la carica corrente della batteria. | Un byte contenente la carica corrente; 255=massima, | + | |
- | ^ SCORE ^ 7 | Restituisce il punteggio corrente. | Un byte contenente il punteggio corrente. | - | | + | |
- | ^ TELEPORT ^ 8 | Teletrasporta il robot in un punto casuale della mappa. | - | 10 unità | | + | |
- | ^ REGISTER ^ 9 | Registra il client sul server; questo comando deve essere inviato prima di ogni altro comando, e il byte di comando deve essere seguito da una stringa ASCII NUL-terminated contenente il nome del robot, che deve essere unico. Il comando è illegale se inviato successivamente alla prima registrazione. | Un byte ACK se la registrazione è stata accettata, o NAK se è stata rifiutata. | - | | + | |
- | Per il comando GPS, il sistema di coordinate utilizzato è quello consueto | + | int bufsize=(int) (af.getSampleRate()*af.getFrameSize()); |
+ | byte[] buffer = new byte[bufsize]; | ||
- | === Altre costanti === | + | // Apre il canale audio e imposta il volume master al massimo |
- | ^ Costante ^ Valore numerico ^ Descrizione ^ | + | |
- | |Direzioni||| | + | |
- | ^ N ^ 0 | nord (verso l' | + | |
- | ^ E ^ 1 | est (verso destra) | | + | |
- | ^ S ^ 2 | sud (verso | + | |
- | ^ W ^ 3 | ovest (verso sinistra) | | + | |
- | |Codici di conferma||| | + | |
- | ^ ACK ^ 1 | conferma; vero; esito positivo | | + | |
- | ^ NAK ^ 0 | diniego; falso; esito negativo | | + | |
- | |Oggetti di mappa||| | + | |
- | ^ ROBOT ^ 82 | un robot | | + | |
- | ^ WALL ^ 88 | un muro interno | | + | |
- | ^ OUTSIDE ^ 0 | fuori mappa (un muro esterno) | | + | |
- | ==== Gestione della batteria ==== | + | sdl.open(af); |
- | Se il robot non dispone di energia sufficiente a eseguire un comando, l' | + | if( sdl.isControlSupported( FloatControl.Type.MASTER_GAIN |
+ | | ||
+ | | ||
+ | } | ||
- | ==== Comunicazioni intra-client ==== | + | // Avvia la riproduzione dell' |
- | Il protocollo, i formati, e il tipo di comunicazione | + | |
+ | sdl.start(); | ||
- | ==== Trattamento degli errori | + | // Legge, a blocchi, i dati dall' |
- | Se il server riconosce un errore nel comportamento del client, la comunicazione viene interrotta | + | |
- | Il timeout | + | int l=1; |
- | Il gioco non prevede la possibilità | + | while (l>=0) { |
+ | l=ais.read(buffer); | ||
+ | if (l>=0) sdl.write(buffer, 0,l); | ||
+ | } | ||
+ | |||
+ | // Aspetta | ||
+ | |||
+ | sdl.drain(); | ||
+ | sdl.stop(); | ||
+ | sdl.close(); | ||
+ | </ | ||
+ | |||
+ | Il sottosistema audio di Java è estendibile tramite plug-in per supportare la riproduzione | ||
+ | |||
+ | |||
+ | estra). | ||
===== Requisiti generali e modalità di consegna ===== | ===== Requisiti generali e modalità di consegna ===== | ||
Ogni studente che vuole sostenere l' | Ogni studente che vuole sostenere l' | ||
- | progetto svolto al docente | + | progetto svolto al docente |
Il progetto deve essere sottomesso individualmente, | Il progetto deve essere sottomesso individualmente, | ||
svolto da un gruppo di due studenti al massimo: in questo caso nel | svolto da un gruppo di due studenti al massimo: in questo caso nel | ||
Linea 173: | Linea 172: | ||
Per poter essere valutato, il codice del client sviluppato nel progetto deve essere in grado di | Per poter essere valutato, il codice del client sviluppato nel progetto deve essere in grado di | ||
- | interagire senza errori con il server | + | interagire senza errori con altri client e server (che rispettino il protocollo indicato sopra). |
- | macchine del CLI, dove verrà testato. | + | |
Il codice del progetto deve essere ben commentato e deve essere accompagnato da una relazione | Il codice del progetto deve essere ben commentato e deve essere accompagnato da una relazione | ||
- | di 3-5 pagine che descrive l' | + | di 3-5 pagine che descrive l' |
- | del singolo client e per la collaborazione tra più client, e le politiche di sincronizzazione tra thread | + | |
- | utilizzate. Inoltre occorre produrre un breve manuale d'uso che descrive i comandi necessari per | + | |
- | avviare le varie istanze del client, sia su uno stesso host che su host diversi. | + | |
Codice, relazione e manuale d'uso devono essere inviati per posta elettronica al docente del | Codice, relazione e manuale d'uso devono essere inviati per posta elettronica al docente del | ||
- | corso **entro | + | corso **entro |
verranno ammessi, e lo studente dovrà svolgere un nuovo progetto che verrà pubblicato successivamente. | verranno ammessi, e lo studente dovrà svolgere un nuovo progetto che verrà pubblicato successivamente. | ||
I progetti sottomessi verranno testati durante un evento pubblico; i dettagli verranno forniti in seguito. | I progetti sottomessi verranno testati durante un evento pubblico; i dettagli verranno forniti in seguito. | ||
- | ===== Suggerimenti finali ===== | ||
- | |||
- | L' | ||
- | * la correttezza dell' | ||
- | * il design e l' | ||
- | * l' | ||
- | * la qualità complessiva di scrittura del codice e della relazione. | ||
- | Nella parte orale verranno invece verificate le conoscenze teoriche su tutti gli argomenti trattati nel corso. | ||
- | |||
- | Si raccomanda di verificare in anticipo il funzionamento dei client sulle macchine del Centro di Calcolo (Laboratori H-Lab e M-Lab), su cui verrà svolto il " | ||
- | |||
- | Per lanciare più istanze del client in maniera rapida, si può usare un comando di shell di questo tipo: | ||
- | |||
- | '' | ||
- | o un suo equivalente su altri sistemi operativi. | ||
===== FAQ ===== | ===== FAQ ===== | ||
- | **Come è definita una " | ||
- | \\ | ||
- | Non esiste sul server il concetto di squadra; dal punto di vista del server, si tratta di robot singoli. Ai fini dell' | ||
- | **Il server mi restituisce a volte -1 in risposta al comando BATTERY, è un errore del server?** | ||
- | \\ | ||
- | No, il valore restituito è del tutto corretto. Si raccomanda di verificare la propria interpretazione del valore, perché... | ||
- | //En este mundo traidor, nada es verdad, ni mentira: todo es según el color del cristal con que se mira//. |
lpr-a/progetto4.1292311627.txt.gz · Ultima modifica: 14/12/2010 alle 07:27 (15 anni fa) da Vincenzo Gervasi