POO Lab Lucrarea 4

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

  1. Realizați o clasă numită seriaf.poo.client.ClientPeer cu următoarele restricții:
    • Constructorul clasei trebuie să ia ca argumente un String reprezentând un nume de utilizator (expeditorul mesajelor) și o referință la un obiect de tip Socket, deja conectat.
    • Clasa trebuie să aibă două metode:
      • void sendMessage(String message) - creează un obiect de tip Message și il serializează folosind socket-ul disponibil.
      • void sendMessage(String message, String recipient) - creează un obiect de tip PrivateMessage și il serializează folosind socket-ul disponibil.
  2. Realizați o clasă numită seriaf.poo.client.TextClient, executabilă, care să realizeze următoarele funcții:
    • Metoda main din clasă trebuie să citească de la tastatură un String reprezentând un nume de utilizator
    • Metoda main din clasă trebuie să deschidă apoi un Socket la adresa localhost (127.0.0.1) pe portul 9000
    • Metoda main din clasă trebuie să instanțieze un obiect de tip ClientPeer
    • Apoi, în metoda main, până la oprirea procesului, să citească de la tastatură (folosind BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); și metoda readLine()) șiruri de caractere cu care apoi să apeleze metodele sendMessage de mai sus (Notă: Pentru a trimite mesaje private, utilizatorul trebuie să introducă un text de forma /w John Hello! care specifică un mesaj privat către user-ul John, cu conținutul "Hello!").
    • Procesul se poate încheia dacă mesajul introdus de la tastatură este /q
  3. Realizați o clasă numită seriaf.poo.server.ServerPeer cu următoarele restricții:
    • Constructorul clasei trebuie să ia ca argument o referință la un obiect de tip Socket, deja conectat.
    • Clasa trebuie să aibă o metodă void run(), care, cât timp conexiunea nu este întreruptă (nu se aruncă java.io.EOFException), să deserializeze obiecte de tip Message și să le afișeze, formatate, pe ecran.
  4. Realizați o clasă numită seriaf.poo.server.Server, executabilă, cu următoarele restricții:
    • Metoda main din această clasă trebuie să folosească un obiect de tip ServerConfig pentru a citi un număr de port din fișierul de configurație implicit (server.conf); pentru testare, fișierul server.conf trebuie să definească cheia TCP_PORT ca fiind 9000.
    • Folosind numărul de port de la punctul anterior, să deschidă un ServerSocket.
    • Odată conectat un client, se creează un obiect de tip ServerPeer, folosind Socket-ul obținut de la metoda accept(), și se va apela metoda void run() a acestuia.
  5. Adaptați clasele Message și PrivateMessage astfel încât să poată fi serializate.
  6. Toate metodele apelate din alte clase decât cele în care sunt definite, trebuie să fie publice.

Predare:

  • Codul se va preda și corecta automat pe platforma WebCat.
  • Atenție: Orice nerespectare ale indicațiilor de predare poate duce la pierderea în totalitate a punctajului.
Atenție: Temele vor fi verificate anti-plagiat cu soft-uri specializate. Orice temă copiată va fi penalizată (atât sursa cât și copia) cu 100% din punctaj, fără posibilitate de refacere.