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:56 (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__** | ||
- | ===== Il gioco: fiorellini e formichine ===== | + | Questa pagina descrive il **I Progetto di LPR 2009/10 **. |
- | In un prato virtuale spuntano dei fiorellini a | + | ===== Descrizione del gioco ===== |
- | intervalli di tempo casuali e in posizioni casuali. | + | |
- | Ogni giocatore ha a disposizione al massimo cinque formichine, | + | |
- | che può far muovere sul prato per raggiungere i fiorellini e | + | |
- | raccoglierli. I giocatori operano simultaneamente e in concorrenza. | + | |
- | Vince chi raccoglie più fiorellini in un tempo predeterminato. | + | |
- | Il prato virtuale è rappresentato da una matrice quadrata di lato | + | ^ Fiorellini & Formichine ^ Alieni & Astronavi ^ |
- | 512 che è gestita da un server. Il giocatore deve definire un | + | |In un prato virtuale |
- | client, rappresentante una singola | + | |Il campo di gioco è rappresentato da una matrice quadrata di lato 512 unità (a coordinate intere) |
- | in cinque istanze al momento del gioco. | + | |
- | Il client interagisce con il server tramite TCP e tramite multicast, | ||
- | con il [[protocollo|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. | ||
Linea 58: | 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 75: | 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 82: | 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.1261148197.txt.gz · Ultima modifica: 18/12/2009 alle 14:56 (15 anni fa) da Andrea Corradini