Update of /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/api In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv902/src/edu/harvard/syrah/pyxida/api Modified Files: APIManager.java XMLRPC_API.java Added Files: APIInstanceIF.java ExternalAPI.java ExternalAPIIF.java Removed Files: APIIF.java Log Message: Made the external API handling more generic --- APIIF.java DELETED --- Index: XMLRPC_API.java =================================================================== RCS file: /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/api/XMLRPC_API.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** XMLRPC_API.java 30 Nov 2006 17:28:17 -0000 1.2 --- XMLRPC_API.java 30 Nov 2006 18:47:17 -0000 1.3 *************** *** 1,8 **** package edu.harvard.syrah.pyxida.api; - import edu.harvard.syrah.pyxida.nc.lib.Coordinate; import edu.harvard.syrah.sbon.async.Config; import edu.harvard.syrah.sbon.async.CallbacksIF.CB0; - import edu.harvard.syrah.sbon.async.CallbacksIF.CB1; import edu.harvard.syrah.sbon.comm.AddressFactory; import edu.harvard.syrah.sbon.comm.AddressIF; --- 1,6 ---- *************** *** 10,14 **** import edu.harvard.syrah.sbon.comm.xmlrpc.XMLRPCCommIF; ! public class XMLRPC_API implements APIIF { private static final String XMLRPC_OBJECT_NAME = "pyxida"; --- 8,12 ---- import edu.harvard.syrah.sbon.comm.xmlrpc.XMLRPCCommIF; ! public class XMLRPC_API implements APIInstanceIF { private static final String XMLRPC_OBJECT_NAME = "pyxida"; *************** *** 17,56 **** private XMLRPCCommIF apiComm; public void init(CB0 cbDone) { apiComm = new XMLRPCComm(); int port = Integer.parseInt(Config.getProperty("pyxida.api.port", "55501")); AddressIF apiAddress = AddressFactory.createServer(port); ! apiComm.registerHandler(XMLRPC_OBJECT_NAME, this); apiComm.initServer(apiAddress, cbDone); } - public void createProxyCoord(String remoteNode, long lease, CB1<Object> cbResult) { - // TODO Auto-generated method stub - - } - - public void destroyProxyCoord(String remoteNode, CB1<Object> cbResult) { - // TODO Auto-generated method stub - - } - - public void estimateRTT(AddressIF nodeA, AddressIF nodeB, CB1<Double> cbDistance) { - ncManager.estimateRTT(nodeA, nodeB, cbDistance); - } - - public Coordinate getLocalCoord() { - return ncManager.getLocalCoord(); - } - - public Coordinate getLocalError() { - return ncManager.getLocalError(); - } - - public void renewProxyCoord(String remoteNode, long lease, CB1<Object> cbResult) { - // TODO Auto-generated method stub - - } - - } --- 15,32 ---- private XMLRPCCommIF apiComm; + private ExternalAPIIF api; + + XMLRPC_API(ExternalAPIIF api) { + this.api = api; + } + public void init(CB0 cbDone) { apiComm = new XMLRPCComm(); int port = Integer.parseInt(Config.getProperty("pyxida.api.port", "55501")); AddressIF apiAddress = AddressFactory.createServer(port); ! apiComm.registerHandler(XMLRPC_OBJECT_NAME, api); apiComm.initServer(apiAddress, cbDone); } } Index: APIManager.java =================================================================== RCS file: /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/api/APIManager.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** APIManager.java 28 Nov 2006 18:49:34 -0000 1.3 --- APIManager.java 30 Nov 2006 18:47:17 -0000 1.4 *************** *** 14,34 **** private static final Log log = new Log(APIManager.class); private NCManager ncManager; ! private List<APIIF> externalAPIs = new LinkedList<APIIF>(); public APIManager(NCManager ncManager) { this.ncManager = ncManager; ! /* * Initialise the different APIs * One day this could be done dynamically */ ! externalAPIs.add(new XMLRPC_API()); } public void init(CB0 cbDone) { ! new LoopIt<APIIF>(externalAPIs, new CB2<APIIF, CB0>() { ! protected void cb(CBResult result, APIIF externalAPI, CB0 cbNextIter) { log.debug("Initialising externalAPI=" + externalAPI.getClass()); externalAPI.init(cbNextIter); --- 14,37 ---- private static final Log log = new Log(APIManager.class); + private ExternalAPIIF api; + private NCManager ncManager; ! private List<APIInstanceIF> externalAPIs = new LinkedList<APIInstanceIF>(); public APIManager(NCManager ncManager) { this.ncManager = ncManager; ! this.api = new ExternalAPI(ncManager); ! /* * Initialise the different APIs * One day this could be done dynamically */ ! externalAPIs.add(new XMLRPC_API(api)); } public void init(CB0 cbDone) { ! new LoopIt<APIInstanceIF>(externalAPIs, new CB2<APIInstanceIF, CB0>() { ! protected void cb(CBResult result, APIInstanceIF externalAPI, CB0 cbNextIter) { log.debug("Initialising externalAPI=" + externalAPI.getClass()); externalAPI.init(cbNextIter); --- NEW FILE: ExternalAPI.java --- package edu.harvard.syrah.pyxida.api; import java.util.List; import java.util.Map; import edu.harvard.syrah.prp.Log; import edu.harvard.syrah.pyxida.nc.NCManager; import edu.harvard.syrah.pyxida.nc.lib.Coordinate; import edu.harvard.syrah.sbon.async.CBResult; import edu.harvard.syrah.sbon.async.CallbacksIF.CB1; import edu.harvard.syrah.sbon.comm.AddressFactory; import edu.harvard.syrah.sbon.comm.AddressIF; public class ExternalAPI implements ExternalAPIIF { private static final Log log = new Log(ExternalAPI.class); private NCManager ncManager; public ExternalAPI(NCManager ncManager) { this.ncManager = ncManager; } public void createProxyCoord(String remoteNode, long lease, CB1<Object> cbResult) { // TODO Auto-generated method stub } public void destroyProxyCoord(String remoteNode, CB1<Object> cbResult) { // TODO Auto-generated method stub } public void estimateRTT(final String nodeA, final String nodeB, final CB1<Double> cbDistance) { AddressFactory.createResolved(new String[] {nodeA, nodeB}, new CB1<Map<String, AddressIF>>() { protected void cb(CBResult result, Map<String, AddressIF> addrMap) { switch (result.state) { case OK: { ncManager.estimateRTT(addrMap.get(nodeA), addrMap.get(nodeB), cbDistance); break; } case TIMEOUT: case ERROR: { log.error(result.toString()); break; } } } }); } public List<Double> getLocalCoord() { Coordinate coord = ncManager.getLocalCoord(); List<Double> listCoord = null; //TODO convert coord to double list return listCoord; } public List<Double> getRemoteCoord(String remoteNode) { throw new UnsupportedOperationException(); } public double getLocalError() { return ncManager.getLocalError(); } public void renewProxyCoord(String remoteNode, long lease, CB1<Object> cbResult) { // TODO Auto-generated method stub } } --- NEW FILE: ExternalAPIIF.java --- package edu.harvard.syrah.pyxida.api; import java.util.List; import edu.harvard.syrah.sbon.async.CallbacksIF.CB1; public interface ExternalAPIIF { /** * Returns a coordinate * of either a substrate node or a local proxy node */ public List<Double> getLocalCoord(); public List<Double> getRemoteCoord(String remoteNode); public double getLocalError(); // Estimate the RTT public void estimateRTT(String nodeA, String nodeB, CB1<Double> cbLatency); // Create a new proxy coord with a lease // lease is given in ms // lease of 0 will expire in one hour public void createProxyCoord(String remoteNode, long lease, CB1<Object> cbResult); // Renew proxy coord lease public void renewProxyCoord(String remoteNode, long lease, CB1<Object> cbResult); public void destroyProxyCoord(String remoteNode, CB1<Object> cbResult); // TODO Add routing methods // TODO add startup and shutdown either here or to pyxida main } --- NEW FILE: APIInstanceIF.java --- package edu.harvard.syrah.pyxida.api; import edu.harvard.syrah.sbon.async.CallbacksIF.CB0; public interface APIInstanceIF { public void init(CB0 cbDone); } |