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:59 (16 anni fa)] – Andrea Corradini | lpr-b:lpr-b-09:progetto [01/02/2010 alle 09:47 (16 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 [[./ | ||
| - | 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.1261148397.txt.gz · Ultima modifica: 18/12/2009 alle 14:59 (16 anni fa) da Andrea Corradini
