From df3a50706639085ccd12d0257f3f222465737e8f Mon Sep 17 00:00:00 2001 From: Manfred Karrer Date: Wed, 5 Nov 2014 22:00:55 +0100 Subject: [PATCH] Change polling from 1 sec to 3 sec, refactorings --- .../java/io/bitsquare/app/ArgumentParser.java | 13 ++++-- .../java/io/bitsquare/app/cli/SeedNode.java | 16 +++---- .../gui/main/trade/offerbook/OfferBook.java | 2 +- .../msg/BootstrappedPeerFactory.java | 46 ++++++++++--------- .../io/bitsquare/msg/actor/DHTManager.java | 8 ++-- 5 files changed, 45 insertions(+), 40 deletions(-) diff --git a/src/main/java/io/bitsquare/app/ArgumentParser.java b/src/main/java/io/bitsquare/app/ArgumentParser.java index 2507017c4c..2d784655b1 100644 --- a/src/main/java/io/bitsquare/app/ArgumentParser.java +++ b/src/main/java/io/bitsquare/app/ArgumentParser.java @@ -17,6 +17,8 @@ package io.bitsquare.app; +import io.bitsquare.network.BootstrapNode; + import net.sourceforge.argparse4j.ArgumentParsers; import net.sourceforge.argparse4j.inf.ArgumentParserException; import net.sourceforge.argparse4j.inf.Namespace; @@ -24,7 +26,7 @@ import net.sourceforge.argparse4j.inf.Namespace; /* optional arguments: -h, --help show this help message and exit - -d PEERID, --peerid PEERID Seed peer ID. (default: digitalocean1.bitsquare.io) + -d PEER_ID, --peerid PEER Seed peer ID (default: "digitalocean1.bitsquare.io") -p PORT, --port PORT IP port to listen on. (default: 5000) -i INTERFACE, --interface INTERFACE Network interface to listen on. -n NAME, --name NAME Append name to application name. @@ -33,10 +35,12 @@ public class ArgumentParser { public static String PEER_ID_FLAG = "peerid"; public static String PORT_FLAG = "port"; - public static Integer PORT_DEFAULT = 5000; - public static String INFHINT_FLAG = "interface"; + public static String INTERFACE_HINT_FLAG = "interface"; public static String NAME_FLAG = "name"; + public static Integer PORT_DEFAULT = 5000; + public static String PEER_ID_DEFAULT = BootstrapNode.DIGITAL_OCEAN1.getId(); + private final net.sourceforge.argparse4j.inf.ArgumentParser parser; public ArgumentParser() { @@ -44,11 +48,12 @@ public class ArgumentParser { .defaultHelp(true) .description("Bitsquare - The decentralized bitcoin exchange."); parser.addArgument("-d", "--" + PEER_ID_FLAG) + .setDefault(PEER_ID_DEFAULT) .help("Seed peer ID."); parser.addArgument("-p", "--" + PORT_FLAG) .setDefault(PORT_DEFAULT) .help("IP port to listen on."); - parser.addArgument("-i", "--" + INFHINT_FLAG) + parser.addArgument("-i", "--" + INTERFACE_HINT_FLAG) .help("Network interface to listen on."); parser.addArgument("-n", "--" + NAME_FLAG) .help("Append name to application name."); diff --git a/src/main/java/io/bitsquare/app/cli/SeedNode.java b/src/main/java/io/bitsquare/app/cli/SeedNode.java index 01517108e6..8c20e06289 100644 --- a/src/main/java/io/bitsquare/app/cli/SeedNode.java +++ b/src/main/java/io/bitsquare/app/cli/SeedNode.java @@ -52,16 +52,11 @@ public class SeedNode { ArgumentParser parser = new ArgumentParser(); Namespace namespace = parser.parseArgs(args); - if (namespace.getString(ArgumentParser.INFHINT_FLAG) != null) { - interfaceHint = namespace.getString(ArgumentParser.INFHINT_FLAG); - } + if (namespace.getString(ArgumentParser.INTERFACE_HINT_FLAG) != null) + interfaceHint = namespace.getString(ArgumentParser.INTERFACE_HINT_FLAG); int serverPort = Integer.valueOf(namespace.getString(ArgumentParser.PORT_FLAG)); - - String seedID = BootstrapNode.LOCAL_HOST.getId(); - if (namespace.getString(ArgumentParser.PEER_ID_FLAG) != null) { - seedID = namespace.getString(ArgumentParser.PEER_ID_FLAG); - } + String seedID = namespace.getString(ArgumentParser.PEER_ID_FLAG); final Set peerAddresses = new HashSet<>(); for (Node node : BootstrapNode.values()) { @@ -81,14 +76,15 @@ public class SeedNode { inbox.send(seedNode, new InitializePeer(Number160.createHash(seedID), serverPort, interfaceHint, peerAddresses)); + final String _seedID = seedID; Thread seedNodeThread = new Thread(() -> { Boolean quit = false; while (!quit) { try { Object m = inbox.receive(FiniteDuration.create(5L, "seconds")); if (m instanceof PeerInitialized) { - log.debug("Seed Peer Initialized on port " + ((PeerInitialized) m).getPort - ()); + log.debug("Seed Peer with ID " + _seedID + + " initialized on port " + ((PeerInitialized) m).getPort()); } } catch (Exception e) { if (!(e instanceof TimeoutException)) { diff --git a/src/main/java/io/bitsquare/gui/main/trade/offerbook/OfferBook.java b/src/main/java/io/bitsquare/gui/main/trade/offerbook/OfferBook.java index e962e6b451..f9296cd0ee 100644 --- a/src/main/java/io/bitsquare/gui/main/trade/offerbook/OfferBook.java +++ b/src/main/java/io/bitsquare/gui/main/trade/offerbook/OfferBook.java @@ -173,7 +173,7 @@ public class OfferBook { private void startPolling() { addListeners(); setBankAccount(user.getCurrentBankAccount()); - pollingTimer = Utilities.setInterval(1000, (animationTimer) -> { + pollingTimer = Utilities.setInterval(3000, (animationTimer) -> { messageFacade.requestInvalidationTimeStampFromDHT(fiatCode); return null; }); diff --git a/src/main/java/io/bitsquare/msg/BootstrappedPeerFactory.java b/src/main/java/io/bitsquare/msg/BootstrappedPeerFactory.java index 0a3481fba0..199f022faa 100644 --- a/src/main/java/io/bitsquare/msg/BootstrappedPeerFactory.java +++ b/src/main/java/io/bitsquare/msg/BootstrappedPeerFactory.java @@ -77,6 +77,8 @@ public class BootstrappedPeerFactory { private final SettableFuture settableFuture = SettableFuture.create(); public final StringProperty connectionState = new SimpleStringProperty(); + private Peer peer; + private PeerDHT peerDHT; /////////////////////////////////////////////////////////////////////////////////////////// @@ -109,8 +111,8 @@ public class BootstrappedPeerFactory { public ListenableFuture start(int port) { try { - Peer peer = new PeerBuilder(keyPair).ports(port).behindFirewall().start(); - PeerDHT peerDHT = new PeerBuilderDHT(peer).storageLayer(new StorageLayer(storage)).start(); + peer = new PeerBuilder(keyPair).ports(port).start(); + peerDHT = new PeerBuilderDHT(peer).storageLayer(new StorageLayer(storage)).start(); peer.peerBean().peerMap().addPeerMapChangeListener(new PeerMapChangeListener() { @Override @@ -154,18 +156,14 @@ public class BootstrappedPeerFactory { switch (lastSuccessfulBootstrap) { case "relay": - futureDiscover = peerDHT.peer().discover().peerAddress(getBootstrapAddress()).start(); - PeerNAT peerNAT = new PeerBuilderNAT(peerDHT.peer()).start(); - FutureNAT futureNAT = peerNAT.startSetupPortforwarding(futureDiscover); - bootstrapWithRelay(peerDHT, peerNAT, futureDiscover, futureNAT); + bootstrapWithRelay(); break; case "portForwarding": - futureDiscover = peerDHT.peer().discover().peerAddress(getBootstrapAddress()).start(); - tryPortForwarding(peerDHT, futureDiscover); + tryPortForwarding(); break; case "default": default: - discover(peerDHT); + discover(); break; } } catch (IOException e) { @@ -177,13 +175,13 @@ public class BootstrappedPeerFactory { } // 1. Attempt: Try to discover our outside visible address - private void discover(PeerDHT peerDHT) { - FutureDiscover futureDiscover = peerDHT.peer().discover().peerAddress(getBootstrapAddress()).start(); + private void discover() { + FutureDiscover futureDiscover = peer.discover().peerAddress(getBootstrapAddress()).start(); futureDiscover.addListener(new BaseFutureListener() { @Override public void operationComplete(BaseFuture future) throws Exception { if (future.isSuccess()) { - setState("We are visible to other peers: My address visible to " + + setState("We are directly connected and visible to other peers: My address visible to " + "the outside is " + futureDiscover.peerAddress()); persistence.write(BootstrappedPeerFactory.this, "lastSuccessfulBootstrap", "default"); settableFuture.set(peerDHT); @@ -192,7 +190,7 @@ public class BootstrappedPeerFactory { setState("We are probably behind a NAT and not reachable to other peers. " + "We try port forwarding as next step."); - tryPortForwarding(peerDHT, futureDiscover); + tryPortForwarding(); } } @@ -206,20 +204,22 @@ public class BootstrappedPeerFactory { } // 2. Attempt: Try to set up port forwarding with UPNP and NAT-PMP - private void tryPortForwarding(PeerDHT peerDHT, FutureDiscover futureDiscover) { - PeerNAT peerNAT = new PeerBuilderNAT(peerDHT.peer()).start(); + private void tryPortForwarding() { + FutureDiscover futureDiscover = peer.discover().peerAddress(getBootstrapAddress()).start(); + PeerNAT peerNAT = new PeerBuilderNAT(peer).start(); FutureNAT futureNAT = peerNAT.startSetupPortforwarding(futureDiscover); futureNAT.addListener(new BaseFutureListener() { @Override public void operationComplete(BaseFuture future) throws Exception { if (future.isSuccess()) { - setState("Automatic port forwarding is setup. Address = " + futureNAT.peerAddress()); + setState("Automatic port forwarding is setup. We need to run a discover again. Address = " + + futureNAT.peerAddress()); // we need a second discover process - discoverAfterPortForwarding(peerDHT); + discoverAfterPortForwarding(); } else { setState("Port forwarding has failed. We try to use a relay as next step."); - bootstrapWithRelay(peerDHT, peerNAT, futureDiscover, futureNAT); + bootstrapWithRelay(); } } @@ -233,8 +233,8 @@ public class BootstrappedPeerFactory { } // Try to determine our outside visible address after port forwarding is setup - private void discoverAfterPortForwarding(PeerDHT peerDHT) { - FutureDiscover futureDiscover = peerDHT.peer().discover().peerAddress(getBootstrapAddress()).start(); + private void discoverAfterPortForwarding() { + FutureDiscover futureDiscover = peer.discover().peerAddress(getBootstrapAddress()).start(); futureDiscover.addListener(new BaseFutureListener() { @Override public void operationComplete(BaseFuture future) throws Exception { @@ -265,8 +265,10 @@ public class BootstrappedPeerFactory { } // 3. Attempt: We try to use another peer as relay - private void bootstrapWithRelay(PeerDHT peerDHT, PeerNAT peerNAT, FutureDiscover futureDiscover, - FutureNAT futureNAT) { + private void bootstrapWithRelay() { + FutureDiscover futureDiscover = peer.discover().peerAddress(getBootstrapAddress()).start(); + PeerNAT peerNAT = new PeerBuilderNAT(peer).start(); + FutureNAT futureNAT = peerNAT.startSetupPortforwarding(futureDiscover); FutureRelayNAT futureRelayNAT = peerNAT.startRelay(futureDiscover, futureNAT); futureRelayNAT.addListener(new BaseFutureListener() { @Override diff --git a/src/main/java/io/bitsquare/msg/actor/DHTManager.java b/src/main/java/io/bitsquare/msg/actor/DHTManager.java index dd26040666..f024f74e73 100644 --- a/src/main/java/io/bitsquare/msg/actor/DHTManager.java +++ b/src/main/java/io/bitsquare/msg/actor/DHTManager.java @@ -79,6 +79,10 @@ public class DHTManager extends AbstractActor { peer = new PeerBuilder(initializePeer.getPeerId()).ports(initializePeer.getPort()).bindings(bindings) .start(); + peer.objectDataReply((sender, request) -> { + log.debug("received request: ", request.toString()); + return "pong"; + }); // For the moment we want not to bootstrap to other seed nodes to keep test scenarios // simple @@ -110,9 +114,7 @@ public class DHTManager extends AbstractActor { sender().tell(new PeerInitialized(peer.peerID(), initializePeer.getPort()), self()); } catch (Throwable t) { - log.info("The second instance has been started. If that happens at the first instance" + - " we are in trouble... " + t.getMessage()); - sender().tell(new PeerInitialized(null, null), self()); + log.error(t.getMessage()); } }