/* * 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 drakkar.oar.Response; import Ice.Current; import drakkar.prow.facade.ListenerManager; import drakkar.oar.slice.action.twoway.AMD_Get_getAMID; import drakkar.oar.slice.client._ClientSideDisp; import drakkar.oar.slice.error.RequestException; import drakkar.oar.util.OutputMonitor; import java.io.IOException; import java.io.Serializable; /** * Esta clase representa el sirviente del Objeto Ice ClientSide. Esta clase es la * encargada de la implementación del método declarado en la interfaz de la * definición slice. Es decir la que determina la operación ha realizar, para * actualizar la aplicación del cliente, cuando se reporta una notificación por * parte de la aplicación servidora */ public abstract class NetworkController extends _ClientSideDisp implements Serializable{ private static final long serialVersionUID = 80000000000020L; protected ListenerManager listenerManager; public NetworkController(ListenerManager listenerManager) { this.listenerManager = listenerManager; } /** * Este método es el encargado de llevar a cabo la deserialización del objeto * Response enviado por la aplicación servidora, para efectuar la notificación * correspondiente en la aplicación cliente * * @param response objeto Response serializado * @param current instancia del objeto Current de Ice, quien proporciona * información sobre la invocación * */ public void _notify(byte[] response, Current current) { try { final Response resp = Response.arrayToResponse(response, current.adapter.getCommunicator()); // se envia el objeto Response recuperado al método dispatchController, // para que este realize el mapeo para la notificación correspondiente. Thread t = new Thread(new Runnable() { public void run() { dispatch(resp); } }); t.start(); } catch (ClassNotFoundException ex) { OutputMonitor.printStream("To load in a class", ex); } catch (IOException ex) { OutputMonitor.printStream("Failed or interrupted I/O operations.", ex); } } public void getAMID_async(AMD_Get_getAMID cb, byte[] request, Current current) throws RequestException { } public byte[] getSAMI(byte[] request, Current current) throws RequestException { return null; } public void disconnect(Current current) { notifyExit(); } /** * Este método realiza el mapeo de la notificación que dio origen al objeto * response, para efectuar la correspondiente notificación a la aplicación * cliente * * @param response este objeto contiene la operación de notificación a efectuar, * así como los parámeros de la misma */ protected abstract void dispatch(Response response) ; protected abstract void notifyExit() ; /** * @return the listenerManager */ public ListenerManager getListenerManager(){ return listenerManager; } /** * @param listenerManager the listenerManager to set */ public void setListenerManager(ListenerManager listenerManager) { this.listenerManager = listenerManager; } }