From 5d5fd49a45b4053ccf34b48d109cc12d58792047 Mon Sep 17 00:00:00 2001 From: Manfred Karrer Date: Sun, 9 Nov 2014 13:48:24 +0100 Subject: [PATCH] Update to latest TomP2P master --- build.gradle | 2 +- .../java/io/bitsquare/app/cli/SeedNode.java | 82 +++++++++++++++++-- .../msg/tomp2p/BootstrappedPeerFactory.java | 8 +- src/main/resources/logback.xml | 2 +- 4 files changed, 85 insertions(+), 9 deletions(-) diff --git a/build.gradle b/build.gradle index 57c048e7d7..5a6a244c66 100644 --- a/build.gradle +++ b/build.gradle @@ -32,7 +32,7 @@ repositories { dependencies { compile 'org.bitcoinj:bitcoinj-core:0.12' - compile 'net.tomp2p:tomp2p-all:5.0-Alpha.542a1a8-SNAPSHOT' + compile 'net.tomp2p:tomp2p-all:5.0-Alpha.32cd9f9-SNAPSHOT' compile 'com.typesafe.akka:akka-actor_2.10:2.3.4' compile 'org.slf4j:slf4j-api:1.7.7' compile 'ch.qos.logback:logback-core:1.1.2' diff --git a/src/main/java/io/bitsquare/app/cli/SeedNode.java b/src/main/java/io/bitsquare/app/cli/SeedNode.java index 63c099ffb7..38a5d4ac09 100644 --- a/src/main/java/io/bitsquare/app/cli/SeedNode.java +++ b/src/main/java/io/bitsquare/app/cli/SeedNode.java @@ -21,14 +21,15 @@ import io.bitsquare.app.ArgumentParser; import io.bitsquare.network.BootstrapNodes; import io.bitsquare.network.Node; -import net.tomp2p.connection.Bindings; -import net.tomp2p.connection.StandardProtocolFamily; import net.tomp2p.dht.PeerBuilderDHT; import net.tomp2p.nat.PeerBuilderNAT; import net.tomp2p.p2p.Peer; import net.tomp2p.p2p.PeerBuilder; import net.tomp2p.peers.Number160; import net.tomp2p.peers.PeerAddress; +import net.tomp2p.peers.PeerMap; +import net.tomp2p.peers.PeerMapConfiguration; +import net.tomp2p.rpc.ObjectDataReply; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -38,6 +39,9 @@ import net.sourceforge.argparse4j.inf.Namespace; public class SeedNode { private static final Logger log = LoggerFactory.getLogger(SeedNode.class); + private static Peer peer = null; + private static boolean running = true; + public static void main(String[] args) throws Exception { ArgumentParser parser = new ArgumentParser(); Namespace namespace = parser.parseArgs(args); @@ -46,6 +50,72 @@ public class SeedNode { String id = defaultNode.getId(); int port = defaultNode.getPort(); + // Passed program args will override the properties of the default bootstrapNode + // So you can use the same id but different ports (e.g. running several nodes on one server with + // different ports) + if (namespace.getString(ArgumentParser.SEED_ID_FLAG) != null) + id = namespace.getString(ArgumentParser.SEED_ID_FLAG); + + if (namespace.getString(ArgumentParser.SEED_PORT_FLAG) != null) + port = Integer.valueOf(namespace.getString(ArgumentParser.SEED_PORT_FLAG)); + + try { + Number160 peerId = Number160.createHash(id); + PeerMapConfiguration pmc = new PeerMapConfiguration(peerId).peerNoVerification(); + PeerMap pm = new PeerMap(pmc); + peer = new PeerBuilder(peerId).ports(port).peerMap(pm).start(); + peer.objectDataReply(new ObjectDataReply() { + @Override + public Object reply(PeerAddress sender, Object request) throws Exception { + log.trace("received request: ", request.toString()); + return "pong"; + } + }); + + new PeerBuilderDHT(peer).start(); + new PeerBuilderNAT(peer).start(); + + log.debug("SeedNode started."); + new Thread(new Runnable() { + + @Override + public void run() { + while (running) { + for (PeerAddress pa : peer.peerBean().peerMap().all()) { + log.debug("peer online:" + pa); + } + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + }).start(); + + } catch (Exception e) { + if (peer != null) + peer.shutdown().awaitUninterruptibly(); + } + } + + public static void stop() { + running = false; + if (peer != null) { + peer.shutdown().awaitUninterruptibly(); + } + peer = null; + } + + + /*public static void main(String[] args) throws Exception { + ArgumentParser parser = new ArgumentParser(); + Namespace namespace = parser.parseArgs(args); + + Node defaultNode = BootstrapNodes.DIGITAL_OCEAN_1; + String id = defaultNode.getId(); + int port = defaultNode.getPort(); + // Passed program args will override the properties of the default bootstrapNode // So you can use the same id but different ports (e.g. running several nodes on one server with // different ports) @@ -60,18 +130,18 @@ public class SeedNode { Peer peer = null; try { // Lets test with different settings - /* ChannelServerConfiguration csc = PeerBuilder.createDefaultChannelServerConfiguration(); + ChannelServerConfiguration csc = PeerBuilder.createDefaultChannelServerConfiguration(); csc.ports(new Ports(Node.DEFAULT_PORT, Node.DEFAULT_PORT)); csc.portsForwarding(new Ports(Node.DEFAULT_PORT, Node.DEFAULT_PORT)); csc.connectionTimeoutTCPMillis(10 * 1000); csc.idleTCPSeconds(10); - csc.idleUDPSeconds(10);*/ + csc.idleUDPSeconds(10); Bindings bindings = new Bindings(); bindings.addProtocol(StandardProtocolFamily.INET); peer = new PeerBuilder(Number160.createHash(id)).bindings(bindings) - /*.channelServerConfiguration(csc)*/.ports(port).start(); + .channelServerConfiguration(csc).ports(port).start(); peer.objectDataReply((sender, request) -> { log.trace("received request: ", request.toString()); @@ -94,5 +164,5 @@ public class SeedNode { if (peer != null) peer.shutdown().awaitUninterruptibly(); } - } + }*/ } diff --git a/src/main/java/io/bitsquare/msg/tomp2p/BootstrappedPeerFactory.java b/src/main/java/io/bitsquare/msg/tomp2p/BootstrappedPeerFactory.java index ba92febd6a..aebbaa7387 100644 --- a/src/main/java/io/bitsquare/msg/tomp2p/BootstrappedPeerFactory.java +++ b/src/main/java/io/bitsquare/msg/tomp2p/BootstrappedPeerFactory.java @@ -53,9 +53,12 @@ import net.tomp2p.p2p.Peer; import net.tomp2p.p2p.PeerBuilder; import net.tomp2p.peers.Number160; import net.tomp2p.peers.PeerAddress; +import net.tomp2p.peers.PeerMap; import net.tomp2p.peers.PeerMapChangeListener; +import net.tomp2p.peers.PeerMapConfiguration; import net.tomp2p.peers.PeerStatistic; import net.tomp2p.storage.Storage; +import net.tomp2p.utils.Utils; import org.jetbrains.annotations.NotNull; @@ -110,7 +113,10 @@ class BootstrappedPeerFactory { public ListenableFuture start(int port) { try { setState(BootstrapState.PEER_CREATION, "We create a P2P node."); - peer = new PeerBuilder(keyPair).ports(port).start(); + + PeerMapConfiguration pmc = new PeerMapConfiguration(Utils.makeSHAHash(keyPair.getPublic().getEncoded())); + PeerMap pm = new PeerMap(pmc); + peer = new PeerBuilder(keyPair).ports(port).peerMap(pm).start(); peerDHT = new PeerBuilderDHT(peer).storageLayer(new StorageLayer(storage)).start(); peer.peerBean().peerMap().addPeerMapChangeListener(new PeerMapChangeListener() { diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index cffac7cb40..1c3f23e809 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -26,7 +26,7 @@ - +