Overlay Weaverを使ったテストプログラムを書いてみた。
こうか?
import java.util.Set; import ow.dht.DHT; import ow.dht.DHTConfiguration; import ow.dht.DHTFactory; import ow.dht.ValueInfo; import ow.id.ID; import ow.messaging.util.MessagingUtility; import ow.stat.StatConfiguration; import ow.stat.StatFactory; public class Test { private final static short APPLICATION_ID = 0xaa; private final static short APPLICATION_VERSION = 3; /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { DHTConfiguration config = DHTFactory.getDefaultConfiguration(); config.setMessagingTransport("UDP"); config.setRoutingAlgorithm("Kademlia"); config.setRoutingStyle("Iterative"); config.setWorkingDirectory("./hash"); config.setDoUPnPNATTraversal(false); MessagingUtility.HostAndPort hostAndPort = MessagingUtility.parseHostnameAndPort(args[0]); config.setSelfAddress(hostAndPort.getHostName()); config.setSelfPort(hostAndPort.getPort()); DHT<String> dht = DHTFactory.getDHT(APPLICATION_ID, APPLICATION_VERSION, config, null); StatConfiguration statConfig = StatFactory.getDefaultConfiguration(); MessagingUtility.HostAndPort statHostAndPort = MessagingUtility.parseHostnameAndPort(args[1]); dht.setStatCollectorAddress(statHostAndPort.getHostName(), statHostAndPort.getPort()); if (args.length >= 3) { dht.joinOverlay(args[2]); String val1 = "abc"; String val2 = "cde"; dht.put(ID.getSHA1BasedID(val1.getBytes()), val1); dht.put(ID.getSHA1BasedID(val2.getBytes()), val2); Set<ValueInfo<String>> values1 = dht.get(ID.getSHA1BasedID(val1.getBytes())); for(ValueInfo<String> v : values1) { System.out.println(v.getValue()); } Set<ValueInfo<String>> values2 = dht.get(ID.getSHA1BasedID(val2.getBytes())); for(ValueInfo<String> v : values2) { System.out.println(v.getValue()); } } while(true) ; } }
引数0がDHTのホスト&ポート、1がStatCollectorのホスト&ポート、2が(必要なら)Join先のホスト&ポート。
Joinした時は、そのままputとgetを試す。
このDHTクラスの上で動いてるはずなサーバは、普通にmainが終わると問答無用でぶっ殺されてるけど、そういうもん?
OpenChord+NicoCacheの時は、死んでくれないスレッドがあってプロセスが終わらなかったりしたんだけれど・・・。
うーん。正直Javaってよく分かってないんだよな。
あと、StatCollectorでStatをCollectするにはどうしたら良いのだろうね。
もう少し色々みていく必要ありだなぁ。
UPnPは最低限必要な機能を備えているっぽいので、わざわざ別ライブラリを使う必要はなさそう。