POO Lab Lucrarea 5

De la WikiLabs
Jump to navigationJump to search
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

Noțiuni și cunoștințe necesare

Cerințe

  • Modificați clasa ClientPeer scrisă la tema anterioară, transformând-o într-un fir de execuție care în paralel cu firul principal de execuție, să citească obiecte de tip Message dinspre server și să le afișeze pe ecran.
  • Modificați clasa ServerPeer scrisă la tema anterioară, transformând-o într-un fir de execuție. Acest fir nou de execuție trebuie să citească obiectele de tip Message și PrivateMessage de la clientul asociat și să le distribuie corect la ceilalți clienți.
  • Modificați clasa Server scrisă la tema anterioară, astfel încât la conectarea unui client, aceasta să creeze un nou ServerPeer pe care să-l pornească ca Thread, apoi să revină în metoda ServerSocket.accept(), așteptând o nouă conexiune.
  • Server-ul nu trebuie să accepte o conexiune dacă numărul de clienți conectați este deja egal cu proprietatea MAX_CLIENTS citită din fișierul server.conf de către ServerConfig.

Note:

  • Clasa Server ar trebui să păstreze o listă cu toți clienții conectați (cu obiectele de tip ServerPeer). Pentru acest lucru vă puteți folosi de clasa java.util.ArrayList.
  • Această listă trebuie să fie menținută în sensul că noii clienți trebuie adăugați, iar clienții deconectați trebuie eliminați.
  • Această listă ar trebui să fie accesibilă firelor de execuție de tip ServerPeer prin metode sincronizate.
  • Pentru a verifica dacă un obiect e instanță a unei clase anume, puteți folosi operatorul instanceof:
Object o = ois.readOject();
if(o instanceof String){
    String s = (String)o;
    System.out.print(s);
}else{
    System.out.print("The object is not a String!");
}