|
From: Peter P. <pr...@us...> - 2006-11-28 18:49:39
|
Update of /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/api In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26619/src/edu/harvard/syrah/pyxida/api Modified Files: APIManager.java Added Files: APIIF.java XMLRPC_API.java Removed Files: ExternalAPIIF.java Log Message: Implemented APIManager with XMLRPC API Implemented measurement call in PingManager (I didn't test either, so sent me bug reports.) --- ExternalAPIIF.java DELETED --- --- NEW FILE: APIIF.java --- package edu.harvard.syrah.pyxida.api; import edu.harvard.syrah.pyxida.nc.lib.Coordinate; import edu.harvard.syrah.sbon.async.CallbacksIF.CB0; import edu.harvard.syrah.sbon.async.CallbacksIF.CB1; import edu.harvard.syrah.sbon.comm.AddressIF; public interface APIIF { /** * Initialise this external api * @param cbDone */ public void init(CB0 cbDone); /** * Returns a coordinate * of either a substrate node or a local proxy node */ public Coordinate getCoord(String node); // Estimate the RTT public void estimateRTT(String nodeA, AddressIF 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 } Index: APIManager.java =================================================================== RCS file: /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/api/APIManager.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** APIManager.java 21 Nov 2006 21:14:59 -0000 1.2 --- APIManager.java 28 Nov 2006 18:49:34 -0000 1.3 *************** *** 1,17 **** package edu.harvard.syrah.pyxida.api; import edu.harvard.syrah.prp.Log; import edu.harvard.syrah.pyxida.nc.NCManager; public class APIManager { private static final Log log = new Log(APIManager.class); ! private NCManager ncManager; public APIManager(NCManager ncManager) { this.ncManager = ncManager; } ! public void init() { /* empty */ } } --- 1,39 ---- package edu.harvard.syrah.pyxida.api; + import java.util.LinkedList; + import java.util.List; + import edu.harvard.syrah.prp.Log; import edu.harvard.syrah.pyxida.nc.NCManager; + import edu.harvard.syrah.sbon.async.CBResult; + import edu.harvard.syrah.sbon.async.LoopIt; + import edu.harvard.syrah.sbon.async.CallbacksIF.CB0; + import edu.harvard.syrah.sbon.async.CallbacksIF.CB2; public class APIManager { 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); ! } ! }).execute(cbDone); ! } } --- NEW FILE: XMLRPC_API.java --- 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; import edu.harvard.syrah.sbon.comm.xmlrpc.XMLRPCComm; import edu.harvard.syrah.sbon.comm.xmlrpc.XMLRPCCommIF; public class XMLRPC_API implements APIIF { private static final String XMLRPC_OBJECT_NAME = "pyxida"; // App comm interface 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(String nodeA, AddressIF nodeB, CB1<Double> cbLatency) { // TODO Auto-generated method stub } public Coordinate getCoord(String node) { // TODO Auto-generated method stub return null; } public void renewProxyCoord(String remoteNode, long lease, CB1<Object> cbResult) { // TODO Auto-generated method stub } } |