lpr-b:lpr-b-09:progetto
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-b:lpr-b-09:progetto [18/12/2009 alle 14:28 (15 anni fa)] – Andrea Corradini | lpr-b:lpr-b-09:progetto [01/02/2010 alle 09:47 (15 anni fa)] (versione attuale) – Andrea Corradini | ||
---|---|---|---|
Linea 1: | Linea 1: | ||
====== Progetto ====== | ====== Progetto ====== | ||
- | + | ||
- | **__Pagina provvisoria__** | + | Questa pagina descrive il **I Progetto di LPR 2009/ |
+ | |||
+ | ===== Descrizione del gioco ===== | ||
+ | |||
+ | ^ Fiorellini & Formichine ^ Alieni & Astronavi ^ | ||
+ | |In un prato virtuale spuntano dei fiorellini a intervalli di tempo casuali e in posizioni casuali. Ogni giocatore ha a disposizione al massimo cinque formichine, | ||
+ | |Il campo di gioco è rappresentato da una matrice quadrata di lato 512 unità (a coordinate intere) che è gestita da un server. Il giocatore deve definire un client, rappresentante una singola unità, che verrà lanciato in cinque istanze al momento del gioco. Il client interagisce con il server tramite TCP e tramite multicast, con il protocollo descritto di seguito. Inoltre le varie istanze del client possono interagire tra di loro, con modalità abitrarie, per realizzare strategie di cooperazione che consentano di ottenere una maggior efficienza.|| | ||
+ | |||
===== File eseguibili ===== | ===== File eseguibili ===== | ||
Linea 38: | Linea 46: | ||
===== Documentazione del protocollo ===== | ===== Documentazione del protocollo ===== | ||
- | TBC | + | Il protocollo di comunicazione è diviso in quattro parti: comunicazioni TCP dal client al server; comunicazioni TCP dal server al client; comunicazioni Multicast UDP dal server ai client; comunicazioni intra-client. Di queste, solo le prime due sono obbligatorie perché il client possa funzionare; le secondo due sono però utili per aumentarne l' |
+ | |||
+ | ==== Convenzioni generali ==== | ||
+ | === Formato === | ||
+ | Tutti i messaggi scambiati fra client e server seguono un formato uniforme, così composto: un byte di comando, seguito da due byte per la lunghezza dei dati, seguiti dai dati (se presenti). Tutti i valori numerici single-byte sono espressi come interi con segno su 8 bit; tutti i valori numerici multi-byte sono espressi come interi con segno su 16 bit in formato big-endian. | ||
+ | Tutti i pacchetti scambiati sono di dimensioni assai minori della MTU tipica su reti TCP/IP (1460 byte); è quindi possibile assumere che non si avrà frammentazione dei pacchetti stessi. | ||
+ | === Temporizzazione === | ||
+ | Ciascun cliente **deve** inviare almeno un messaggio ogni 1000ms (altrimenti viene dichiarato //morto di sonno// e chiuso), e non più di un messaggio ogni 100ms (altrimenti viene dichiarato //spammer// e chiuso). È possibile usare il messaggio PING almeno una volta per secondo per segnalare che il cliente è ancora vivo, se non si ritiene più utile qualche altro messaggio. | ||
+ | === Fairness === | ||
+ | Tentativi di sabotare il server o il protocollo sono lodevoli, ma considerati illegali ai fini dell' | ||
+ | |||
+ | ==== Messaggi TCP dal client al server ==== | ||
+ | |||
+ | | 1 byte || 2 byte | //Len// byte | | | | ||
+ | ^ Comando ^^ Len ^ Dati ^ Descrizione ^ Risposta ^ | ||
+ | ^ Nome ^ Valore ^ ^ ^ ^ ^ | ||
+ | ^ REGISTER | 7 | //n// | //n// byte (secondo l' | ||
+ | ^ PING | 1 | 0 | | Segnala al server la propria presenza. ^ PONG | | ||
+ | ^ MOVE | 2 | 4 | //x//,//y// | Chiede al server si portare il giocatore alle coordinate // | ||
+ | ^ GRAB | 3 | 0 | | Chiede al server di raccogliere gli eventuali target presenti alla posizione corrente del giocatore. ^ GRABRESULT | | ||
+ | ^ GETPOS | 4 | 0 | | Chiede al server di restituire la posizione corrente del giocatore. ^ LOC | | ||
+ | ^ LOOK | 5 | 0 | | Chiede al server l' | ||
+ | ^ LOAD | 6 | 0 | | Chiede al server il carico corrente del giocatore (quanti target ha raccolto finora). ^ YOURLOAD | | ||
+ | |||
+ | ==== Messaggi TCP dal server al client ==== | ||
+ | |||
+ | | 1 byte || 2 byte | //Len// byte | | | ||
+ | ^ Comando ^^ Len ^ Dati ^ Descrizione | | ||
+ | ^ Nome ^ Valore ^ ^ ^ ^ | ||
+ | ^ YOURID | 69 | 2 | //n// | //n// è il numero assegnato al giocatore registrato; valori legali sono 0-4, mentre -1 indica che la registrazione è stata rifiutata. | | ||
+ | ^ PONG | 64 | 0 | | Risposta al messaggio PING; non contiene dati, ma indica che è stato ricevuto il segnale di presenza. | | ||
+ | ^ LOC | 65 | 4 | //x//,//y// | Fornisce la posizione corrente del giocatore (coordinate //x//,//y// sul campo di gioco). | | ||
+ | ^ YOURLOAD | 66 | 2 | //n// | Fornisce il carico corrente del giocatore, ovvero quanti target ha raccolto dal momento della registrazione fino ad ora. | | ||
+ | ^ TARGETS | 67 | 4//n// | // | ||
+ | ^ GRABRESULT | 68 | 2 | //k// | Segnala che sono stati raccolti //k// target con l' | ||
+ | |||
+ | ==== Messaggi Multicast UDP dal server al client ==== | ||
+ | |||
+ | | 1 byte || 2 byte | //Len// byte | | | ||
+ | ^ Comando ^^ Len ^ Dati ^ Descrizione ^ | ||
+ | ^ Nome ^ Valore ^ ^ ^ ^ | ||
+ | ^ TARGETS | 67 | 4 | //x//,//y// | Segnala che è comparso un nuovo target alle coordinate //x//,//y// sul campo di gioco. | | ||
+ | Si noti che non esistono messaggi per avvisare della // | ||
+ | |||
+ | ==== Comunicazioni intra-client ==== | ||
+ | Il protocollo, i formati, e il tipo di comunicazione (tipicamente: | ||
+ | |||
+ | ==== Trattamento degli errori e terminazione ==== | ||
+ | Se il server riconosce un errore nel comportamento del client, la comunicazione viene interrotta (il giocatore rimane registrato ma viene " | ||
+ | Il gioco non prevede la possibilità di de-registrare un giocatore, né un esplicito "fine partita"; | ||
===== Requisiti generali e modalità di consegna ===== | ===== Requisiti generali e modalità di consegna ===== | ||
Linea 55: | Linea 112: | ||
macchine del CLI, dove verrà testato. | macchine del CLI, dove verrà testato. | ||
- | Il codice del progetto deve essere ben commentato e | + | Il codice del progetto deve essere ben commentato e deve essere accompagnato da una relazione |
- | 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 | del singolo client e per la collaborazione tra più client, e le politiche di sincronizzazione tra thread | ||
Linea 62: | Linea 118: | ||
avviare le varie istanze del client, sia su uno stesso host che su host diversi. | 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 elttronica | + | Codice, relazione e manuale d'uso devono essere inviati per posta elettronica |
corso **entro le ore 24 di domenica 31 gennaio 2010**. Progetti inviati dopo tale scadenza non | corso **entro le ore 24 di domenica 31 gennaio 2010**. Progetti inviati dopo tale scadenza non | ||
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. | ||
+ | All' | ||
- | I progetti sottomessi verranno testati durante un evento | + | I progetti sottomessi verranno testati durante un " |
mese di gennaio 2010) durante il quale ogni studente lancerà cinque istanze del proprio client che competeranno | mese di gennaio 2010) durante il quale ogni studente lancerà cinque istanze del proprio client che competeranno | ||
- | con tutti gli altri su di un unico server attivato dai docenti. | + | con tutti gli altri (eventualmente, |
+ | Naturalmente il codice usato per la gara deve essere conforme a quello consegnato, pena la nullità della prova. | ||
+ | |||
+ | |||
+ | ===== 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 " | ||
+ | |||
+ | ===== FAQ ===== | ||
+ | Per una lista aggiornata delle risposte alle domande più frequenti, clicca | ||
+ | [[lpr-a/ |
lpr-b/lpr-b-09/progetto.1261146490.txt.gz · Ultima modifica: 18/12/2009 alle 14:28 (15 anni fa) da Andrea Corradini