Gentile professor Corradi,
come dal lei richiesto, le invio la descrizione del progetto che intendo realizzare nell'ambito del corso di Reti di calcolatori. Il nome del progetto è "Agorà".
Intendo realizzare un'applicazione per permettere a più utenti che accedono alla stessa pagina html, attraverso un browser che supporti java, di comunicare tra loro, avendo in mente di seguire l'esempio dei MOO. Ho intenzione di sviluppare un'interfaccia che segua la metafora di una piazza, nella quale gli utenti siano rappresentati da avatar (alter-ego virtuali di persone) , e possano compiere alcune azioni elementari come muoversi, cambiare espressione per comunicare uno stato d'animo, ed inviare messaggi. I messaggi inviati da un utente arrivano solo agli utenti vicini. 




    



intendo sviluppare l'applicazione seguendo il paradigma client-server, e per meglio affrontare i temi del corso, ho intenzione di progettare il server in maniera distribuita permettendo all'utente U1 collegato al server S1 di "vedere" l'utente U2 collegato al server S2. Al fine di ottenere questo risultato si prevede di dover affrontare due problemi principali:
1) come gestire l'interazione tra client e server
2) come gestire l'interazione tra server e server

Si è scelto di progettare il server seguendo un approccio multiprogrammato (sfruttando la possibilità offerta da java di gestire i processi leggeri), che preveda due tipi di thread, uno per ogni cliente (thread di gestione utenti) e uno per ogni server (thread di coordinamento tra server). In questo contesto si progettrà un protocollo atto a definire le interazioni tra client e server, e uno per quelle tra server e server, al fine di gestire la modifica dello stato del server, la sua trasmissione ai client e agli altri server.
E' evidente che,  affinchè un generico client possa disporre dell'informazione necessaria a disegnare gli utenti e visualizzare i messaggi, è necessario che ad ogni variazione dello stato di un server, questo comunichi al client lo stato aggiornato e, in questo contesto ho intenzione di sfruttare la possibilità offerta da Java di inviare oggetti su stream; avendo definito una classe "stato" sarà sufficiente inviare l'istanza di essa che rappresenta lo stato aggiornato ad ogni client.

p.s.
Ho già sviluppato una versione "beta" pienamente funzionante fatta eccezione per l'interazione tra i vari server.

 Andrea Di Cesare (56559)