Date post: | 01-May-2015 |
Category: |
Documents |
Upload: | simona-morini |
View: | 212 times |
Download: | 1 times |
Corso di Laurea in Ingegneria Informaticaanno accademico 2004-05
Gestione di un Sistema di Talk multiutente
CandidatoBruno Aleandri798026
Facoltà di Ingegneria
Università degli Studi di Roma
“La Sapienza”
Registrazione dei client presso il server in fase di connessione
Creazione di stanze pubbliche con moderatore
Possibilità di richiedere una chat privata ad un utente
Chat private possono essere accettate, rifiutate o messe in coda
Lavagna grafica presente in chat pubbliche e private, con possibilità di caricare immagini di sfondo
Applicazione di chat client-server in tecnologia multithread, che prevede:
MainThread del server accetta le connessioni dei client che arrivano sul suo ServerSocket
Un nuovo thread denominato ClientHandler viene istanziato per ciascun client che si connette
Ogni client viene gestito dal proprio ClientHandler fino alla sua disconnessione dal server
Server tiene memoria degli utenti connessi e dei talk attivi tramite le proprie strutture dati ConnectionVector e TalkVector
Oggetti Connection e Talk rappresentano rispettivamente utenti connessi e talk attivi
SERVER
SERVER
Connection Vector Talk Vector
Bruno
Bruno ClientHandler di Bruno
CLIENT
username:
Bruno
Talk Vector
formula1
formula1
Connection Vector
identificativo:
formula1
moderatore:
Bruno
Bruno
CLIENT
Le classi dell’interfaccia grafica utilizzano i metodi della classe ChatClient per inviare comandi al server a seguito di azioni dell’utente (disaccoppiamento)
Classe ChatClient implementa anche un listening thread, che riceve i messaggi dal server
ChatClient istanzia un ServiceThread per ogni messaggio ricevuto dal server
Un’istanza di ServiceThread processa uno e un solo messaggio
ServiceThread aggiorna l’interfaccia grafica tramite i metodi pubblici delle classi di quest’ultima
SERVER
CLIENT
ChatClient
ServiceThread
GUI del client
PROTOCOLLO DI COMUNICAZIONE
Ogni messaggio è costituito da:
un codice identificativo con cui distinguere i comandi inviati dal client e le risposte del server
un elenco di parametri eventualmente necessari per il processamento della richiesta/risposta
Client e Server seguono le regole di un protocollo di comunicazione per lo scambio di messaggi.
Esempio: messaggio di chat inviato nel talk “formula1”:
200 formula1 <testo del messaggio>
STREAM DI OGGETTI
I comandi relativi al disegno devono quindi incapsulare tali oggetti:la classe Message rappresenta il generico comando inviato.Essa è provvista di:
un campo stringa, contente il codice identificativo e i parametri di tipo testoun campo LittlePoint, contente l’eventuale pixel
Un pixel disegnato sulla lavagna grafica è rappresentato tramite un oggetto della classe LittlePoint.
ObjectInputStream ed ObjectOutputStream utilizzati per veicolare oggetti Message.
LAVAGNA GRAFICA (1/2)
Consente agli utenti partecipanti a talk pubblici e privati di tracciare disegni, anche contemporaneamente.
Oltre al tracciamento di punti e linee, è possibile:
utilizzare una gomma per cancellare i disegni
selezionare colore e spessore del tratto, e la dimensione della gomma
caricare un’immagine (JPEG o GIF) come sfondo condiviso della lavagna
salvare su file, in formato JPEG, il contenuto della lavagna
L’utente può aprire o chiudere la lavagna nell’ambito di ciascun talk.
LAVAGNA GRAFICA (2/2)
I pixel disegnati sulla lavagna sono rappresentati dagli oggetti della classe LittlePoint.Oltre alla posizione, alla dimensione e al colore del punto, tali oggetti memorizzano anche l’eventuale immagine che si vuole condividere come sfondo della lavagna.
Un campo status è utilizzato per distinguere tra oggetti rappresentanti pixel e quelli contenenti immagini, e per specificare particolari operazioni da effettuare sulla lavagna.
Per permettere il refresh della lavagna, ogni utente che disegna è associato ad un vettore di LittlePoint rappresentante la sequenza di punti da lui tracciata.
Un ulteriore vettore denominato timeIndex tiene memoria della sequenza con cui gli utenti hanno disegnato.