POO Lab Lucrarea 5: Diferență între versiuni

De la WikiLabs
Jump to navigationJump to search
Linia 24: Linia 24:
** să conțină referințe la obiecte de tip '''ServerPeer''', câte un obiect pentru fiecare client conectat;
** să conțină referințe la obiecte de tip '''ServerPeer''', câte un obiect pentru fiecare client conectat;
** să creeze câte un obiect nou de tip '''ServerPeer''' pentru fiecare client nou conectat și să le pornească pe fiecare ca fir execuție;
** să creeze câte un obiect nou de tip '''ServerPeer''' pentru fiecare client nou conectat și să le pornească pe fiecare ca fir execuție;
** să centralizeze toate obiectele de tip '''Message''' de la toți '''ClientPeer''', și să le paseze mai departe la aceștia;
** să centralizeze toate obiectele de tip '''Message''' de la toți '''ServerPeer''', și să le paseze mai departe la aceștia;
** să elimine automat din lista de clienți pe cei care s-au deconectat;
** să elimine automat din lista de clienți pe cei care s-au deconectat;
Hint: Folosiți-vă de clasa [http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html java.util.ArrayList].
Hint: Folosiți-vă de clasa [http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html java.util.ArrayList].
* Modificați clasa '''Client''' astfel încât, pe lângă funcționalitatea anterioară, să deserializeze în continuu obiecte de tip '''Message''' de pe stream și să le afișeze în consolă. În plus, la fiecare conectare, se trimite server-ului un obiect de tip '''SystemMessage''' unde câmpul '''sender''' trebuie să conțină numele clientului. Dacă răspunsul este '''TYPE_ERROR''', programul se încheie.
* Modificați clasa '''Client''' astfel încât, pe lângă funcționalitatea anterioară, să deserializeze în continuu obiecte de tip '''Message''' de pe stream și să le afișeze în consolă. În plus, la fiecare conectare, se trimite server-ului un obiect de tip '''SystemMessage''' unde câmpul '''sender''' trebuie să conțină numele clientului. Dacă răspunsul este '''TYPE_ERROR''', programul se încheie.

Versiunea de la data 15 ianuarie 2013 10:27

Noțiuni și cunoștințe necesare

Cerințe

  • Scrieţi o clasă ServerPeer, de tip fir de execuţie, care să administreze o conexiune cu un client. Aceast thread trebuie:
    • să poată deserializa obiectele de tip Message trimise de către clientul asociat și să le trimită către Server;
    • să conțină o metodă care să poată trimite obiecte de tip Message către client (dacă numele clientului este identic cu câmpul receiver din mesaj, sau acesta este null);
    • să stocheze numele clientului.
  • Numele clientului se modifică doar când se primește de la client un obiect de tip SystemMessage unde câmpul type are valoarea TYPE_CHANGE_NAME. Dacă numele nu este deja utilizat de alt client, se face modificarea și se răspunde clientului cu un obiect de de tip SystemMessage unde câmpul type are valoarea TYPE_OK, altfel, se răspunde cu un obiect de tip SystemMessage unde câmpul type are valoarea TYPE_ERROR.
  • Modificați clasa Server astfel încât:
    • să conțină referințe la obiecte de tip ServerPeer, câte un obiect pentru fiecare client conectat;
    • să creeze câte un obiect nou de tip ServerPeer pentru fiecare client nou conectat și să le pornească pe fiecare ca fir execuție;
    • să centralizeze toate obiectele de tip Message de la toți ServerPeer, și să le paseze mai departe la aceștia;
    • să elimine automat din lista de clienți pe cei care s-au deconectat;

Hint: Folosiți-vă de clasa java.util.ArrayList.

  • Modificați clasa Client astfel încât, pe lângă funcționalitatea anterioară, să deserializeze în continuu obiecte de tip Message de pe stream și să le afișeze în consolă. În plus, la fiecare conectare, se trimite server-ului un obiect de tip SystemMessage unde câmpul sender trebuie să conțină numele clientului. Dacă răspunsul este TYPE_ERROR, programul se încheie.