Java example

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.

 

 


download: (lato_client.zip) (lato_server.zip)