next up previous
Next: La classe ChatRoomServer Up: Parte VI: creiamo un Previous: Parte VI: creiamo un

Panoramica

Si realizzi un server per la gestione di un oggetto di tipo ChatRoom che metta in ascolto un socket server su una porta specificata. Tale server deve essere in grado di gestire più client contemporaneamente. I client inviano al server oggetti di tipo ChatRoomCommand (mediante stream di oggetti), su tali oggetti il server invoca il medoto execCRC, passandogli l'oggetto di tipo ChatRoom memorizzato presso di esso ed eventuali altri parametri necessari. L'esecuzione del comando determina l'invio al client di un oggetto di tipo Message. Questo può essere il risultato della corretta esecuzione del metodo execCRC oppure il messaggio restituito da una possibile eccezione (vedi Figura 2).

Figure: Schema dell'esecuzione di un comando CRC.
Image /~baldoni/didattica/aa0203/ProgInRete/ProgettoLabPiR0203/Immagini/overview_CRC_small.png
Si noti che è importante gestire le eccezioni in modo da non bloccare il server in caso di errore e nello stesso tempo informare il client del malfunzionamento. Chiameremo l'attività appena descritta il ciclo ``ricevi-esegui-invia-ricevi'' dei comandi, ciclo REIR, in breve. Tale ciclo è discusso in dettaglio nella Sezione 2.6.3.

Per ogni client, contemporaneamente all'attività di gestire i comandi ricevuti dal client, il server deve prontamente inviare al client ogni messaggio consegnato nella sua casella (MessageBox) per la visualizzazione (vedi Figura 3).

Figure: Schema dell'invio dei messaggi letti in un MessageBox.
Image /~baldoni/didattica/aa0203/ProgInRete/ProgettoLabPiR0203/Immagini/overview_read_message_small.png
Chiameremo l'attività appena descritta il ciclo ``leggi-invia-leggi'' dei messaggi, ciclo LIL, in breve. Tale ciclo è discusso in dettaglio nella Sezione 2.6.4.

Per ogni client sono quindi necessari due thread, uno per gestire l'attività del ciclo REIR ed uno per gestire l'attività del ciclo LIL, si veda la Figura 4.

Figure: Gestione dei cicli ``ricevi-esegui-invia-ricevi'' e ``leggi-invia-leggi'' di ogni client.
Image /~baldoni/didattica/aa0203/ProgInRete/ProgettoLabPiR0203/Immagini/thread_server_small.png

In [1], nelle sezioni ``Esempi sui Thread'' e ``Socket'', possono essere scaricati gli esempi che hanno fatto da test al codice descritto nelle sezioni successive.


next up previous
Next: La classe ChatRoomServer Up: Parte VI: creiamo un Previous: Parte VI: creiamo un
Baldoni Matteo 2003-05-08