![]() |
Il client grafico deve ocuparsi contemporaneamente di due attività, gestite da due diversi thread:
La prima attività descritta può essere gestita direttamente dal thread principale del client grafico. La pressione del bottone ``Send'' (quindi nel corrispondente metodo actionPerformed della classe che implementa l'ActionListener di tale bottone) deternima la creazione di un messaggio di tipo Message4All o Message4U a seconda del valore inizializzato nel campo ``To'' con testo il messaggio inserito in ``Message to send''. Quindi un comando di tipo Send2AllCRC o Send2UCRC viene creato e inviato al server.
Il thread per la gestione del ciclo RVR è attivato contestualmente alla richiesta connessione (pressione del bottone ``Connect'') e termina con la chiusione della connessione (pressione del bottone ``Close''). Si scelga la soluzione preferita per la realizzazione del thread per la gestione del ciclo RVR: una classe separata (esempio ThreadLVL) o implementazione dell'interfaccia Runnable da parte dell'interfacia grafica (probabilmente questa è la soluzione più semplice). In ogni caso il seguente è lo schema del metodo run del thread:
public void run() { boolean stopRequested = false; Message message; while (!stopRequested) { // leggi un messaggio da `in' // se il messaggio arriva dalla chat room // visualizza il messaggio su `Connection console' // altrimenti visualizza il messaggio su `Message Display' } }
Il thread si mette in attesa di messaggi sullo stream di input (sream di oggetti), ricevuto un messaggio, se chi invia il messaggio è la chat room stessa allora si visualizza il testo contenuto in esso sulla ``Connection console'' altrimenti lo si visualizza sul ``Message Display''. Si veda anche la Figura 5.