}
}
public static void startClientNAT(String ip) throws Exception {
Random r = new Random(43L);
PeerDHT peer = new PeerBuilderDHT(new PeerBuilder(new Number160(r)).ports(clientPort).behindFirewall().start()).start();
PeerAddress bootStrapServer = new PeerAddress(Number160.ZERO, InetAddress.getByName(ip), serverPort, serverPort);
FutureDiscover fd = peer.peer().discover().peerAddress(bootStrapServer).start();
System.out.println("About to wait...");
fd.awaitUninterruptibly();
if (fd.isSuccess()) {
System.out.println("*** FOUND THAT MY OUTSIDE ADDRESS IS " + fd.peerAddress());
} else {
System.out.println("*** FAILED " + fd.failedReason());
}
bootStrapServer = fd.reporter();
FutureBootstrap bootstrap = peer.peer().bootstrap().peerAddress(bootStrapServer).start();
bootstrap.awaitUninterruptibly();
if (!bootstrap.isSuccess()) {
System.out.println("*** COULD NOT BOOTSTRAP!");
} else {
System.out.println("*** SUCCESSFUL BOOTSTRAP");
}
String inLine = null;
while ((inLine = getLine()) != null) {
if (inLine.equals("show")) {
FutureGet fget = peer.get(new Number160(keyStore)).all().start();
fget.awaitUninterruptibly();
Iterator<Data> iterator = fget.dataMap().values().iterator();
StringBuffer allString = new StringBuffer();
FutureGet fg;
while (iterator.hasNext()) {
Data d = iterator.next();
fg = peer.get(new Number160(((Integer) d.object()).intValue())).start();
fg.awaitUninterruptibly();
if (fg.data() != null) {
allString.append(fg.data().object().toString()).append("\n");
} else {
System.err.println("Could not find key for val: " + d.object());
}
}
System.out.println("got: " + allString.toString());
} else {
int r2 = new Random().nextInt();
System.out.println("Storing DHT address (" + r2 + ") in DHT");
peer.add(new Number160(keyStore)).data(new Data(r2)).start().awaitUninterruptibly();
System.out.println("Adding (" + inLine + ") to DHT");
peer.put(new Number160(r2)).data(new Data(inLine)).start().awaitUninterruptibly();
}
}
System.out.println("Shutting down...");
// peer.halt();
}