Realizzazione
del lato_client
PREMESSA:
Il meccanismo principale alla base dell'intera applicazione ,sia lato_client
che lato_server, risiede nell'interazione delle due classi Ascolta_Chat
e Che_Hai_Detto. La differenziazione tra i due lati della chat non è
altro che una diversa implementazione delle classi che circondano queste
due. A seconda delle necessità ho sviluppato delle interfacce grafiche,
per permettere una maggiore facilità d'utilizzo, oppure una classe
contenente un vettore, che memorizzi e smisti le richieste degli utenti
presenti. Per praticità non riporterò la descrizione delle
due classi sopra citate, ne troverete una sulla pagina dedicata al lato_server.
Scaricando l' applicazione troverete anche il codice sorgente abbondantemente
commentato.
Di seguito riporto una descrizione, ad alto livello, delle classi che
contraddistinguono questo lato. |
Inserisci_Nick:
Il primo dei suoi compiti è di determinare l'entry point e di
conseguenza sarà l'unica classe ad invocare il metodo .main().
Questa classe, inoltre, estende JFrame per poter disegnare sullo schermo
un' interfaccia e implementa ActionListener in maniera tale da poter
intercettare la pressione sui tasti della stessa, che vedete riportata
in figura qui a fianco.
Un'altra importante responsabilità di questa classe consiste
nell'ottenere la registrazione nel vettore del server. Per poterci riuscire,
oltre al nick-name digitato dall'utente, dovrà essere a conoscenza
del proprio IP, della propria porta d'ascolto, dell' IP e della porta
del server. Per risalire al proprio indirizzo IP, che potrebbe risultare
dinamico, sfrutta un oggetto di tipo InetAddress; per ottenere le altre
informazioni legge un file di puro testo di nome Jonz.Jonz. (altre informazioni
su come installare e configurare l'applicazione le troverete nel file
"leggimi" all'interno della cartella lato_client). Inserisci_Nick
possiede anche un inner-class di nome MyKeyListener, che ha lo scopo
di controllare i caratteri digitati dall'utente nella casella di testo;
in questo modo può abilitare la pressione del tasto "Invio"
come se l'utente premesse il bottone "OK" dell'interfaccia
e disabilitare una serie di caratteri che utilizzerà per comunicare
con il server.
Interfaccia_Chat:
Se la registrazione nel vettore del server avviene senza problemi Inserisci_Nick
creerà un istanza "IC" di Interfaccia_Chat. A sua volta
"IC", sfruttando le informazioni su IP e porta, istanzierà
Ascolta_Chat, passandogli anche un puntatore alle proprie aree di testo.
In modo simile a Inserisci_Nick anche questa classe estende JFrame e
implementa ActionListener così da poter disegnare sullo schermo
l'interfaccia principale che l'utente utilizzerà; inoltre, per
poter comunicare con il server, Interfaccia_Chat crea e utilizza un
istanza della classe Invia_Messaggio.
Per poter controllare l'interazione con l'utente, Interfaccia_Chat,
ha al suo interno diverse inner-class. La prima è MyKeyListener
che svolge le stesse funzioni che ha in Inserisci_Nick. Poi c'è
WindowAdapter che ascolta gli eventi generati sull'intera interfaccia
(riduzione a icona, ridimensionamento, chisura) e all'evento di chiusura
della finestra, richiamerà il metodo abbinato al tasto "ESCI"
che notifica al server l'uscita dalla chat del client che l'ha generato.
Infine c'è MouseSelector che controlla su quale dei nick presenti
è avvenuto un doppio-click e richiede, con questi, una comunicazione
privata.
Invia_Messaggio,
Ascolta_Chat, Che_Hai_Detto:
Queste tre classi presentano il medesimo funzionamento che hanno nel
lato server, tranne che per alcune precisazioni:
Invia_Messaggio viene istanziata, a seconda delle necessità,
da Inserisci_Nick e Interfaccia_Chat.
Ascolta_Chat passa a Che_Hai_Detto, invece del puntatore a Registro,
il puntatore alle caselle di testo di Intrafaccia_Chat in maniere tale
che Che_Hai_Detto possa scriverci dentro.
Nel caso che il server autorizzi una comunicazione privata, invierà
a Che_Hai_Detto i dati necessari a creare un istanza di Interfaccia_Chat_Privata
e di tutto ciò che ne segue. Interfaccia_Chat_Privata non fà
altro che creare una versione simile ma semplificata dell'intero lato_client.
Leggi:
Questa classe rappresenta l'unica differenza tra il lato_client appena
descritto e le classi che compongono la comunicazione privata, è
soltanto un modo diverso per ottenere il medesimo risultato. In pratica
è questa classe che riceve il puntatore agli elementi grafici
di Interfaccia_Chat_Privata e possiede un metodo per scriverci sopra.
Che_Hai_Detto_Privata punta a questa classe è sfrutta il suo
metodo per scrivere i messaggi ricevuti.
|