Indice - Progetto di Reti di Calcolatori - Fabio Adani e Marco Chiesi
Implementazione

ServerAgent

La classe ServerAgent fa da tramite nelle comunicazioni tra un MainServer e l'altro. In realtà tale comunicazione è unidirezionale nel senso che ogni ServerAgent non comunica con un ServerAgent remoto, ma comunica direttamente con il MainServer remoto.

Un oggetto di classe ServerAgent viene creato ogni volta che un server si connette ad un altro, cioè al completamento del 2PC per l'ingresso di un server, quando una chiamata addServer è andata a buon fine. In realtà, come risulta chiaro dalla figura, quando un server si connette vengono creati due ServerAgent, rispettivamente l'agente del primo server presso il secondo nodo, e l'agente del secondo server presso il primo nodo. Il costruttore di questa classe è il seguente:

public ServerAgent(MainServer localServer, String remoteAddress, IServerAccess remoteServer);

da cui si può notare che ogni ServerAgent mantiene un riferimento al MainServer locale (quello del nodo in cui si trova) ed il nome ed il riferimento al server remoto a cui si riferisce.

Il ServerAgent deve essere in grado di ricevere eventi dal MainServer locale e gestirli effettuando le opportune chiamate sul MainServer remoto. Per fare ciò è necessario che esso implementi l'interfaccia IEventHandler. Inoltre al suo interno avrà una classe apposita per la gestione di tali eventi:

class ServerAgentEventHandler extends EventHandler

Per maggiori dettagli implementativi riguardanti la gestione degli eventi si veda la classe ClientAgent.

Nel caso si verifichino delle eccezioni durante una chiamata remota, il ServerAgent provvederà ad avvertire il suo MainServer chiamando il metodo:

localServer.serverDisconnected(remoteAddress);

e sarà poi esso ad occuparsi della disconnessione.

Indietro Inizio pagina Avanti
Indice   Fabio Adani e Marco Chiesi