// Bamboo sample code
//
// $ export CLASSPATH=$BAMBOO_DIR/src/:`echo $BAMBOO_DIR/lib/*.jar|sed -e 's/ /:/g'`
// $ javac Lookup.java
//
// append the following line to node.cfg:
//
// class my.Lookup
//
//
// $ ${BAMBOO_DIR}/bin/run-java bamboo.lss.DustDevil node.cfg
package my;
import bamboo.util.StandardStage;
import bamboo.lss.ASyncCore;
import bamboo.router.Router;
import seda.sandStorm.api.ConfigDataIF;
import java.util.Random;
import java.math.BigInteger;
import ostore.util.NodeId;
import bamboo.util.GuidTools;
public class Lookup extends StandardStage {
protected Router router;
public void init(ConfigDataIF config) throws Exception {
super.init(config);
acore.register_timer(1000, ready_cb, null);
}
public ASyncCore.TimerCB ready_cb = new ASyncCore.TimerCB() {
public void timer_cb(Object user_data) {
System.out.println("My node-id is " + my_node_id.toString());
router = Router.instance(my_node_id);
// generate a random key to lookup
Random rand = new Random((int)now_ms());
byte[] guid_bytes = new byte[21];
rand.nextBytes(guid_bytes);
guid_bytes[0] = 0;
BigInteger guid = new BigInteger(guid_bytes);
logger.info("looking up 0x" + GuidTools.guid_to_string(guid) + ".");
Long start_time = new Long(timer_ms());
router.lookup(guid, lookup_cb, start_time);
}
};
// callback function when the lookup hits
public Router.LookupCb lookup_cb = new Router.LookupCb() {
public void lookup_cb(BigInteger lookup_id, BigInteger closest_id,
NodeId closest_addr, Object user_data) {
long finish_time = timer_ms();
long start_time = ((Long)user_data).longValue();
long latency_ms = finish_time - start_time;
logger.info ("found 0x" + GuidTools.guid_to_string(lookup_id) +
" on 0x" + GuidTools.guid_to_string(closest_id) +
", " + closest_addr + " in " + latency_ms + " ms.");
}
};
}