/*
* DrakkarKeel - An Enterprise Collaborative Search Platform
*
* The contents of this file are subject under the terms described in the
* DRAKKARKEEL_LICENSE file included in this distribution; you may not use this
* file except in compliance with the License.
*
* 2013-2014 DrakkarKeel Platform.
*/
package drakkar.prow;
import Ice.ObjectPrx;
import drakkar.prow.communication.NetworkController;
import drakkar.oar.Communication;
import drakkar.oar.slice.client.ClientSidePrx;
import drakkar.oar.slice.client.ClientSidePrxHelper;
import drakkar.oar.util.OutputMonitor;
import java.io.Serializable;
/**
* Esta clase tiene el objetivo de registrar el objeto proxy del usuario en el tiempo
* de ejcución de ice para recibir las respectivas notificaciones de las operaciones
* invocadas,así como otras notificaciones enviadas por la aplicación servidora
*/
public class ApplicationManager implements Serializable{
private static final long serialVersionUID = 80000000000001L;
private ClientSidePrx clientSidePrx;
private Communication communication;
private NetworkController controller;
private int portNumber;
/**
* Constructor de la clase
*
* @param comm instancia de la clase Communication
* @param controller
* @param portNumber número del puerto por el que el cliente recibirá las notificaciones
*/
public ApplicationManager(Communication comm, NetworkController controller, int portNumber) {
this.communication = comm;
this.portNumber = portNumber;
this.controller = controller;
}
/**
* Activa el objeto proxy que representa el usuario en el tiempo de
* ejecución de ice, estando listo para escuchar cualquier notificación de la
* aplicación servidora
*/
public void activate() {
// se crea un ObjectAdapter con endpoint, este quiere decir que los servant registrados para este
// objeto solo escucharan las peticiones entrantes por ese endpoint(Puerto)
Ice.ObjectAdapter adapter = this.communication.getCommunicator().createObjectAdapterWithEndpoints("Client", " tcp -p " + portNumber);
this.communication.setAdapter(adapter);
//se agrega un servant del objeto ClientSide en ASM del adptador
ObjectPrx prx = this.communication.getAdapter().addWithUUID(controller);
//Activa a todos los endpoints que forman parte de este adaptador del objeto.
//Después de la activación,el adaptador del objeto puede despachar peticiones
//recibidas por el endpoint
this.communication.getAdapter().activate();
//convierte el objeto proxy creado al tipo ClientSidePrx
clientSidePrx = ClientSidePrxHelper.uncheckedCast(prx);
}
/**
* Desactiva el objeto proxy que representa al usuario dentro del tiempo de
* ejecución de Ice
*/
public void deactivate() {
try {
this.communication.getAdapter().remove(clientSidePrx.ice_getIdentity());
this.clientSidePrx = null;
} catch (Ice.LocalException err) {
OutputMonitor.printLine("Error mientras se ejecutaba la desactivacion" +
" del objeto proxy del cliente. \n Causa: "+err.getMessage(), OutputMonitor.ERROR_MESSAGE);
}
}
/**
* Este método devuelve el objeto NotificationController
*
* @return instancia de NotificationController
*/
public NetworkController getNetworkController() {
return this.controller;
}
/**
* Este método devuelve el objeto ClientSidePrx
*
* @return instancia de ClientSidePrx
*
*/
public ClientSidePrx getClientSidePrx() {
return this.clientSidePrx;
}
/**
* Este método reemplaza el objeto NotificationController de la clase
*
* @param client nuevo NotificationController
*/
public void setNetworkController(NetworkController client) {
this.controller = client;
}
/**
* Este método reemplaza el objeto proxy ClientSidePrx de la clase
*
* @param prx objeto ClientSidePrx
*/
public void setClientSidePrx(ClientSidePrx prx) {
this.clientSidePrx = prx;
}
}