Diferență între revizuiri ale paginii „POO Tema 3”
De la WikiLabs
Jump to navigationJump to search(Nu s-a afișat o versiune intermediară efectuată de același utilizator) | |||
Linia 6: | Linia 6: | ||
* Clasa <code style="color: green">SessionImpl</code> trebuie să aibă doi constructori: | * Clasa <code style="color: green">SessionImpl</code> trebuie să aibă doi constructori: | ||
** <code style="color: green">SessionImpl(int)</code> care va deschide un socket de server și va aștepta o conexiune pe portul respectiv; acest constructor este blocant până la conectarea unui client. | ** <code style="color: green">SessionImpl(int)</code> care va deschide un socket de server și va aștepta o conexiune pe portul respectiv; acest constructor este blocant până la conectarea unui client. | ||
− | ** <code style="color: green">SessionImpl(String,int)</code> care va deschide un socket de client către host-ul specificat, pe portul specificat; acest constructor va încerca să se conecteze timp de zece secunde (o data la 100 de milisecunde) la host-ul & portul specificat; dacă după zece secunde conectarea nu se poate realiza, atunci constructorul va arunca o excepție de tip <code style="color: green">IOException</code> | + | ** <code style="color: green">SessionImpl(String,int)</code> care va deschide un socket de client către host-ul specificat, pe portul specificat; acest constructor va încerca să se conecteze timp de zece secunde (o data la 100 de milisecunde) la host-ul & portul specificat; dacă după zece secunde conectarea nu se poate realiza, atunci constructorul va arunca o excepție de tip <code style="color: green">IOException</code> (vezi metoda [http://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html#sleep-long- Thread.sleep]). |
− | + | * Implementați toate metodele definite în interfața <code style="color: green">Session</code>. | |
* Comunicația se poate realiza în orice mod doriți. Clasa <code style="color: green">Point</code> este serializabilă, dar enum-ul <code style="color: green">CellState</code> NU este serializabil. | * Comunicația se poate realiza în orice mod doriți. Clasa <code style="color: green">Point</code> este serializabilă, dar enum-ul <code style="color: green">CellState</code> NU este serializabil. | ||
Linia 21: | Linia 21: | ||
*## Clientul apelează <code style="color: green">makeMove</code> în timp ce serverul apelează <code style="color: green">getOposingPlayerMove</code> și după ce primește informația legată de punct, apelează <code style="color: green">writeState</code>. | *## Clientul apelează <code style="color: green">makeMove</code> în timp ce serverul apelează <code style="color: green">getOposingPlayerMove</code> și după ce primește informația legată de punct, apelează <code style="color: green">writeState</code>. | ||
* Citiți cu atenție comentariile din interfața <code style="color: green">Session</code> pentru a implementa corect metodele cerute. | * Citiți cu atenție comentariile din interfața <code style="color: green">Session</code> pentru a implementa corect metodele cerute. | ||
− | + | * Valorile pe care le poate lua o referință de tip <code style="color: green">CellState</code> sunt <code style="color: green">CellState.HIT</code> sau <code style="color: green">CellState.MISS</code>. Egalitatea se poate testa cu operatorul <code>==</code>: | |
+ | <syntaxhighlight lang="java"> | ||
+ | CellState state = ; | ||
+ | if(state == CellState.HIT) //... | ||
+ | </syntaxhighlight> | ||
Versiunea curentă din 17 decembrie 2015 16:32
Realizați a clasă care să permită funcționarea unui joc "Avioanele" în rețea, între doi jucători umani.
Cerințe
Implementați o clasă, numită seriaf.poo.tema3.communication.SessionImpl
(atenție la numele pachetului), ce trebuie să implementeze interfața Session
, pentru a completa funcționalitatea jocului, astfel:
- Clasa
SessionImpl
trebuie să aibă doi constructori:SessionImpl(int)
care va deschide un socket de server și va aștepta o conexiune pe portul respectiv; acest constructor este blocant până la conectarea unui client.SessionImpl(String,int)
care va deschide un socket de client către host-ul specificat, pe portul specificat; acest constructor va încerca să se conecteze timp de zece secunde (o data la 100 de milisecunde) la host-ul & portul specificat; dacă după zece secunde conectarea nu se poate realiza, atunci constructorul va arunca o excepție de tipIOException
(vezi metoda Thread.sleep).
- Implementați toate metodele definite în interfața
Session
. - Comunicația se poate realiza în orice mod doriți. Clasa
Point
este serializabilă, dar enum-ulCellState
NU este serializabil.
Observații
- Jocul este gândit să fie jucat în doi, un jucător care va fi Host pentru un joc (server) și un jucător care se va conecta la un Host.
- Arhitectura programului se bazează pe faptul că fiecare jucător instanțiază un
SessionImpl
care vor comunica între ele. - Ordinea în care se vor apela metodele din
SessionImpl
este următoarea (codul care face apelurile de metode este deja scris):- Server-ul apeleaza
waitForReady
care e blocant si asteaptă un ready. - Client-ul apelează
sendReady
care semnalează că e gata de joc. - Pana la finalul jocului, pe rând se execută următoarele:
- Serverul apelează
makeMove
în timp ce clientul apeleazăgetOposingPlayerMove
și după ce primește informația legată de punct, apeleazăwriteState
. - Clientul apelează
makeMove
în timp ce serverul apeleazăgetOposingPlayerMove
și după ce primește informația legată de punct, apeleazăwriteState
.
- Serverul apelează
- Server-ul apeleaza
- Citiți cu atenție comentariile din interfața
Session
pentru a implementa corect metodele cerute. - Valorile pe care le poate lua o referință de tip
CellState
suntCellState.HIT
sauCellState.MISS
. Egalitatea se poate testa cu operatorul==
:
CellState state = ;
if(state == CellState.HIT) //...
Se dă următorul proiect Netbeans pentru dezvoltare. Acesta conține clase care pot fi utilizate pentru testarea voastră, inclusiv conține toate testele care se rulează și pe Web-CAT. Pentru a le rula, selectați Run->Test Project.
Puteți implementa oricâte alte clase, dar obligatoriu trebuie să aveți clasa SessionImpl
și nu aveți voie să modificați nici una din clasele deja existente în proiect.
Link pentru upload Web-Cat, aici.