Sa se proiecteze si implementeze in limbajul de programare Java un sistem de comunicatie distribuit, suport pentru conversatie textuala.
Proiectul va fi realizat
de grupuri de 2-3 studenti.
Minimal, sistemul software pentru conversatie textuala (chat) va avea urmatoarele caracteristici:
- implementarea in limbajul de programare Java,
- interfata cu utilizatorii grafica (Swing).
Sistemul va putea fi:
- fie o imbunatatire functionala (adaugarea unui mod de autentificare, adaugarea de canale
private, adaugarea unei interfete la server, etc.) a sistemului dat ca exemplu (care are o structura
de tip client-server, este bazat pe socket-uri TCP si are o interfata grafica minimala) sau
- fie o alternativa a sistemului dat ca exemplu (de exemplu, avand o structura descentralizata,
sau bazat pe socket-uri UDP).
Sunt admise si alte alternative (de exemplu, sistem de management al fisierelor la distanta), la propunerea studentilor, daca sistemul utilizeaza socket-uri. Propunerea. discutarea si aprobarea alternativelor vor trebui finalizate pana in saptamana a 12 a semestrului.
Proiectul va contine
(pentru fiecare student sau grup de studenti care are o tema distincta):
- dosarul cu documentatia proiectului (minimum 12 pagini), incluzand:
- titlul proiectului si autorii – cu indicarea rolului fiecaruia (prima pagina)
- principalele caracteristici ale sistemului (client-server sau descentralizat,
bazat pe TCP sau UDP, etc.) (pagina a doua)
- documentarea solutiilor tehnice care nu apar in sistemul dat ca exemplu
(mod de autentificare, canale private, interfata la
server, etc.) incluzand
diagrame UML (cateva pagini)
- descrierea modului de utilizare al sistemului (cateva pagini)
- listingurile codurilor sursa
atasate ca anexa la dosar
- o discheta sau un CD continand proiectul in forma electronica (intr-un plic atasat de dosar), adica:
- documentatia si
- codurile sursa.
Sustinerea proiectului presupune:
- prezentarea principalelor caracteristici ale sistemului
- prezentarea rolului fiecarui autor la realizarea sistemului si a documentarii lui
- prezentarea executiei sistemului
- prezentarea solutiilor tehnice specifice
- raspunsuri la intrebari privind detalii ale proiectului (din documentatie si listinguri)
- predarea dosarului cu documentatia proiectului (avand atasata forma electronica)
Sustinerea va avea loc in ultimele 2 saptamani ale semestrului, sau in pre-ziua examenului (nu in ziua examenului!).
Sistemul software pentru conversatie textuala (chat) dat ca exemplu are urmatoarele caracteristici:
- implementarea in limbajul de programare Java,
- interfata cu utilizatorii grafica (Swing).
- structura de tip client-server,
- bazat pe socketuri flux (orientate spre conexiune, folosind protocolul TCP),
Modul de lucru este urmatorul:
1. Utilizatorul lanseaza componenta client a sistemului.
2. Clientul se conecteaza la server, ofera o interfata grafica utilizatorului, apoi trimite mesaje catre server, preluate de la utilizator prin interfata grafica.
3. Serverul accepta conexiunile si creaza fire de executie pentru tratarea clientilor.
4. Fiecare fir de tratare a unui client va primi mesaje de la clientul tratat si va difuza aceste mesaje catre toti clientii.
5. Fiecare client preia mesajele de la server si le prezinta utilizatorului in interfata grafica.
Diagrama de secventa a mesajelor schimbate, realizata in faza de analiza OO.
Diagrama de secventa a mesajelor schimbate, realizata in faza de proiectare OO.
Diagrama de secventa a mesajelor schimbate la client, care detaliaza comportamentul subsistemului la nivel de apeluri de metode Java:
Diagrama de secventa a mesajelor schimbate la server, care detaliaza comportamentul subsistemului la nivel de apeluri de metode Java:
Sistemul utilizeaza urmatoarele biblioteci Java:
– biblioteca standard Java
pentru comunicatii la nivel de socket-uri
(java.net)
– biblioteca extensie
standard Java pentru interfete grafice avansate (javax.swing) si
bibliotecile grafice
asociate (java.awt si java.awt.event)
– biblioteca standard Java
pentru fluxuri de intrare-iesire (java.io)
– biblioteca standard Java
pentru clase utilitare (java.util)
Diagrama de clase a subsistemului client este urmatoarea:
Diagrama de clase a subsistemului server este urmatoarea:
Interfata grafica, minimala, este formata dintr-o intrare de text (sub forma unei linii) pentru editarea mesajelor de trimis, si o zona grafica de text (multilinie si cu posibilitati de defilare) pentru prezentarea mesajelor receptionate de la server.
Aici gasiti mai multe detalii cu privire la modul in care s-a ajuns de la specificarea cerintelor initiale la aceasta forma a proiectarii si implementarii (2006_SwRTc_Proiect_Faza1_v01.htm).
Presupunem ca s-a decis ca
in iteratia urmatoare sa fie realizate urmatoarele imbunatatiri:
- posibilitatea oferita utilizatorilor de a-si alege un nume de utilizator (nickname)
- actualizarea automata a barei de defilare a zonei de text pentru ca ultimele mesaje primite sa fie vizibile
- difuzarea de catre server a numelor de utilizator catre toti utilizatorii si informarea de catre client a utilizatorilor despre modificarile in componenta grupului de utilizatori
Raman nerezolvate anumite posibile cerinte ale utilizatorilor, cum ar fi
- posibilitatea crearii mai multor “camere” sau grupuri pe un server
- posibilitatea crearii unor canale de comunicatie private
- etc (lista va fi largita prin discutii la laborator/proiect).
Modul de lucru este urmatorul:
1. Utilizatorul lanseaza componenta client a sistemului.
2. Clientul se conecteaza la server. Serverul accepta conexiunea si creaza un nou fir de executie pentru tratarea clientului.
3. Clientul obtine un nume de la utilizator (nickname) si il trimite la server.
4. In cazul in
care numele de utilizator nu este deja alocat, serverul confirma clientului acceptarea acestui
nume. Altfel, serverul cere un nou nume
clientului, iar clientul cere un nou nume
utilizatorului (si se revine la pasul
3).
5. Serverul trimite noului utilizator lista utilizatorilor deja existenti, iar utilizatorilor deja existenti numele noului utilizator.
6. Noul client ofera o interfata grafica utilizatorului, apoi trimite mesaje catre server, preluate de la utilizator prin interfata grafica.
7. Fiecare fir de tratare a unui client primeste mesaje de la clientul tratat si difuzeaza aceste mesaje catre toti clientii.
8. Fiecare client preia mesajele de la server si le prezinta utilizatorului in interfata grafica.
9. In cazul
parasirii comunicatiei de catre un utilizator, serverul trimite celorlalti utilizatori numele
utilizatorului respectiv.
Varianta de nivel inalt a
diagramei de secventa pentru scenariul conectarii unui nou client.
Varianta de nivel inalt a
diagramei de secventa pentru scenariul deconectarii unui client.
Varianta de nivel inalt a
diagramei de secventa pentru scenariul conversatiei intre clienti.
Diagrama de clase actualizata a clientului este urmatoarea:
Diagrama de clase actualizata a serverului este urmatoarea:
Interfata grafica prezentata initial unui nou utilizator, pentru alegerea numelui in vederea conectarii, este o fereastra de dialog:
In cazul in care utilizatorul propune un nume care exista deja in lista serverului, acesta respinge inregistrarea iar clientul prezinta urmatoarea fereastra de dialog:
Presupunem urmatorul
scenariu:
- primul utilizator isi alege numele isw2004,
- al doilea utilizator isi alege numele swrtc2004 (moment in care ambii utilizatori sunt informati, unul de existenta celuilalt),
- cei doi utilizatori schimba cateva mesaje,
- se conecteaza al treilea utilizator, care isi alege numele rtc2004 (moment in care primii doi utilizatori sunt informati de existenta celui de-al treilea, iar acesta de existenta celorlalti doi),
- cei trei utilizatori schimba cateva mesaje,
- utilizatorul cu numele swrtc2004 paraseste conversatia (moment
in care ceilalti doi utilizatori sunt informati).
Continutul interfetelor grafice ale celor trei utilizatori pentru acest scenario va fi urmatorul:
- pentru utilizatorul cu numele swrtc2004:
- pentru utilizatorul cu numele isw2004:
- pentru utilizatorul cu numele rtc2004:
Aici gasiti mai multe detalii cu privire la modul in care s-a ajuns de la forma initiala la forma imbunatatita a proiectarii si implementarii (2006_SwRTc_Proiect_Faza2_v01.htm).
In cazul in care in cadrul proiectului s-a decis sa se realizeze inca o iteratie de imbunatatire functionala a sistemului dat ca exemplu (care sa porneasca de la varianta imbunatatita de mai sus), exemplele anterioare vor fi folosite ca model pentru evolutia proiectarii si implementarii unui sistem de-a lungul unei iteratii.
In cazul in care in cadrul proiectului s-a decis sa se realizeze o alternativa a sistemului dat ca exemplu, varianta imbunatatita de mai sus va fi folosita ca punct de start.