next up previous
Next: Parte VIII: un server Up: Descrizione del laboratorio Previous: Gestione delle risorse condivise


Parte VII: creiamo un client grafico per il chat server

Figure: Un esempio di interfaccia client per il nostro server chat.
Image /~baldoni/didattica/aa0203/ProgInRete/ProgettoLabPiR0203/Immagini/interfaccia_client_small.png
Figure: Interfaccia grafica per client: finestra di dialog per la connessione e la registrazione ad una chat room.
Image /~baldoni/didattica/aa0203/ProgInRete/ProgettoLabPiR0203/Immagini/dylog_connessione_small.png
Si realizzi un'intefaccia grafica del tipo mostrata in Figura 6 La configurazione del client (IP, porta del server, informazioni dell'utente) dovrebbe essere fatta mediante un'opportuna finestra di tipo ``dialog'' del tipo mostrata in Figura 7. Tale connessione si concretizza con una apertura di un socket verso il server.

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.


next up previous
Next: Parte VIII: un server Up: Descrizione del laboratorio Previous: Gestione delle risorse condivise
Baldoni Matteo 2003-05-08