/*
* 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.communication;
import Ice.ObjectPrx;
import drakkar.oar.Communication;
import drakkar.oar.Delegate;
import drakkar.oar.exception.ProxyNotExistException;
import drakkar.oar.slice.container.SessionContainerPrx;
import drakkar.oar.slice.container.SessionContainerPrxHelper;
import drakkar.oar.slice.management.ServerManagerPrx;
import drakkar.oar.slice.management.ServerManagerPrxHelper;
import java.io.Serializable;
/**
* Esta clase tiene el objetivo de crear objetos proxy(ServerManagerPrx,SessionContainerPrx)
* para que actuen como embajadores de los respectivos objetos registrados en el tiempo
* de ejecución de ICE, pudiendose así ejecutar las operaciones soportadas por estos.
*/
public class DelegateServerManager extends Delegate implements Serializable{
private static final long serialVersionUID = 80000000000016L;
private ServerManagerPrx serverManagerPrx;
/**
* Constructor de la Clase.
*
* @param comm instancia de Communication.
* @param name nombre del servidor
* @param ip dirección host
* @param porNumber puerto por el cual el servidor recibe las peticiones.
*/
public DelegateServerManager(Communication comm, String name, String ip, int porNumber) {
super(comm, name, ip, porNumber);
}
/**
* Este método obtiene un proxy del objeto remoto(ServerSidePrx) para que
* actué este actué como embajador del correspondiente objeto registrado en
* el tiempo de ejecución de Ice.
* @throws ProxyNotExistException
*/
public void create() throws ProxyNotExistException {
// stringToProxy: obtiene un proxy del objeto remoto
this.proxy = this.communication.getCommunicator().stringToProxy(this.name + ":tcp -h " + this.ip + " -p " + this.portNumber);
// convierte el ObjectPrx en un ServerSidePrx, la cual envía un mensaje
// al servidor para comprobar que realmente está asociado a la interfaz
// ServerSidePrx
if (this.proxy == null) {
throw new ProxyNotExistException("Invalid Proxy. Object Proxy " + name + " not found.");
}
try {
this.serverManagerPrx = ServerManagerPrxHelper.checkedCast(this.proxy);
} catch (Exception e) {
throw new ProxyNotExistException("Invalid Proxy. Proxy miss type.");
}
}
/**
*
* @throws ProxyNotExistException
*/
public void createMultiListener() throws ProxyNotExistException {
// stringToProxy: obtiene un proxy del objeto remoto
this.proxy = this.communication.getCommunicator().stringToProxy(this.name + ":tcp -p " + this.portNumber);
// convierte el ObjectPrx en un ServerSidePrx, la cual envía un mensaje
// al servidor para comprobar que realmente está asociado a la interfaz
// ServerSidePrx
try {
this.serverManagerPrx = ServerManagerPrxHelper.checkedCast(this.proxy);
} catch (Exception e) {
throw new ProxyNotExistException("Invalid Proxy");
}
}
/**
* Este método devuelve la instancia el objeto DelegateSessionContainer, apartir del
* nombre pasado por parámetro.
*
* @param name nombre del contenedor de la sessión.
*
* @return instancia de DelegateSessionContainer
* @throws ProxyNotExistException
*/
public DelegateSessionContainer getDlgSessionContainer(String name) throws ProxyNotExistException {
ObjectPrx objectPrx = this.communication.getCommunicator().stringToProxy(name + ":tcp -h " + this.ip + " -p " + this.portNumber);
SessionContainerPrx containerPrx = SessionContainerPrxHelper.checkedCast(objectPrx);
if (containerPrx == null) {
throw new ProxyNotExistException("Invalid Proxy");
} else {
DelegateSessionContainer container = new DelegateSessionContainer(this.communication, name, this.ip, this.portNumber, containerPrx);
return container;
}
}
/**
*
* @param name
* @return
* @throws ProxyNotExistException
*/
public DelegateSessionContainer getDlgSessionContainerMultiListener(String name) throws ProxyNotExistException {
ObjectPrx objectPrx = this.communication.getCommunicator().stringToProxy(name + ":default -p " + this.portNumber);
SessionContainerPrx containerPrx = SessionContainerPrxHelper.checkedCast(objectPrx);
if (containerPrx == null) {
throw new ProxyNotExistException("Invalid Proxy");
} else {
DelegateSessionContainer container = new DelegateSessionContainer(this.communication, name, this.ip, this.portNumber, containerPrx);
return container;
}
}
/**
* Este método devuelve el objeto ServerSidePrx de la clase.
*
* @return instancia de ServerSidePrx.
*/
public ServerManagerPrx getServerManagerPrx() {
return serverManagerPrx;
}
/**
* Este método reemplaza el objeto ServerSidePrx de la clase.
*
* @param serverSidePrx nuevo ServerSidePrx.
*/
public void setServerManagerPrx(ServerManagerPrx serverSidePrx) {
this.serverManagerPrx = serverSidePrx;
}
}